summaryrefslogtreecommitdiff
path: root/static/freebsd/man9
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
commit1f19f33e45791ea59aed048796fc68672c6723a5 (patch)
tree54625fba89e91d1c2177801ec635e8528bba937f /static/freebsd/man9
parentac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (diff)
docs: Removed Precompiled HTML
Diffstat (limited to 'static/freebsd/man9')
-rw-r--r--static/freebsd/man9/BUF_ISLOCKED.9 4.html68
-rw-r--r--static/freebsd/man9/BUF_LOCK.9 4.html71
-rw-r--r--static/freebsd/man9/BUF_LOCKFREE.9 4.html61
-rw-r--r--static/freebsd/man9/BUF_LOCKINIT.9 4.html60
-rw-r--r--static/freebsd/man9/BUF_RECURSED.9 4.html63
-rw-r--r--static/freebsd/man9/BUF_TIMELOCK.9 4.html80
-rw-r--r--static/freebsd/man9/BUF_UNLOCK.9 4.html62
-rw-r--r--static/freebsd/man9/BUS_ADD_CHILD.9 3.html77
-rw-r--r--static/freebsd/man9/BUS_BIND_INTR.9 3.html85
-rw-r--r--static/freebsd/man9/BUS_CHILD_DELETED.9 4.html52
-rw-r--r--static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html48
-rw-r--r--static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html59
-rw-r--r--static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html64
-rw-r--r--static/freebsd/man9/BUS_CONFIG_INTR.9 3.html103
-rw-r--r--static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html91
-rw-r--r--static/freebsd/man9/BUS_GET_CPUS.9 3.html88
-rw-r--r--static/freebsd/man9/BUS_GET_PROPERTY.9 4.html74
-rw-r--r--static/freebsd/man9/BUS_HINTED_CHILD.9 4.html57
-rw-r--r--static/freebsd/man9/BUS_NEW_PASS.9 4.html50
-rw-r--r--static/freebsd/man9/BUS_PRINT_CHILD.9 4.html58
-rw-r--r--static/freebsd/man9/BUS_READ_IVAR.9 4.html67
-rw-r--r--static/freebsd/man9/BUS_RESCAN.9 4.html48
-rw-r--r--static/freebsd/man9/BUS_SETUP_INTR.9 3.html169
-rw-r--r--static/freebsd/man9/CTASSERT.9 4.html65
-rw-r--r--static/freebsd/man9/DB_COMMAND.9 3.html180
-rw-r--r--static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html167
-rw-r--r--static/freebsd/man9/DECLARE_MODULE.9 3.html105
-rw-r--r--static/freebsd/man9/DEFINE_IFUNC.9 3.html118
-rw-r--r--static/freebsd/man9/DELAY.9 4.html46
-rw-r--r--static/freebsd/man9/DEVICE_ATTACH.9 4.html64
-rw-r--r--static/freebsd/man9/DEVICE_DETACH.9 4.html58
-rw-r--r--static/freebsd/man9/DEVICE_IDENTIFY.9 3.html86
-rw-r--r--static/freebsd/man9/DEVICE_PROBE.9 3.html115
-rw-r--r--static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html55
-rw-r--r--static/freebsd/man9/DEV_MODULE.9 4.html99
-rw-r--r--static/freebsd/man9/DRIVER_MODULE.9 3.html139
-rw-r--r--static/freebsd/man9/EVENTHANDLER.9 3.html231
-rw-r--r--static/freebsd/man9/KASSERT.9 3.html161
-rw-r--r--static/freebsd/man9/LOCK_PROFILING.9 3.html150
-rw-r--r--static/freebsd/man9/MODULE_DEPEND.9 4.html74
-rw-r--r--static/freebsd/man9/MODULE_PNP_INFO.9 4.html177
-rw-r--r--static/freebsd/man9/MODULE_VERSION.9 4.html55
-rw-r--r--static/freebsd/man9/OF_child.9 4.html76
-rw-r--r--static/freebsd/man9/OF_device_from_xref.9 3.html101
-rw-r--r--static/freebsd/man9/OF_finddevice.9 4.html73
-rw-r--r--static/freebsd/man9/OF_getprop.9 4.html293
-rw-r--r--static/freebsd/man9/OF_node_from_xref.9 3.html94
-rw-r--r--static/freebsd/man9/OF_package_to_path.9 4.html52
-rw-r--r--static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html98
-rw-r--r--static/freebsd/man9/PCI_IOV_INIT.9 4.html82
-rw-r--r--static/freebsd/man9/PCI_IOV_UNINIT.9 4.html58
-rw-r--r--static/freebsd/man9/PHOLD.9 4.html64
-rw-r--r--static/freebsd/man9/SDT.9 4.html460
-rw-r--r--static/freebsd/man9/SYSCALL_MODULE.9 4.html89
-rw-r--r--static/freebsd/man9/SYSINIT.9 3.html138
-rw-r--r--static/freebsd/man9/VFS.9 4.html45
-rw-r--r--static/freebsd/man9/VFS_CHECKEXP.9 4.html88
-rw-r--r--static/freebsd/man9/VFS_FHTOVP.9 3.html81
-rw-r--r--static/freebsd/man9/VFS_MOUNT.9 4.html70
-rw-r--r--static/freebsd/man9/VFS_QUOTACTL.9 4.html64
-rw-r--r--static/freebsd/man9/VFS_ROOT.9 4.html62
-rw-r--r--static/freebsd/man9/VFS_SET.9 4.html103
-rw-r--r--static/freebsd/man9/VFS_STATFS.9 4.html105
-rw-r--r--static/freebsd/man9/VFS_SYNC.9 4.html74
-rw-r--r--static/freebsd/man9/VFS_UNMOUNT.9 4.html67
-rw-r--r--static/freebsd/man9/VFS_VGET.9 4.html74
-rw-r--r--static/freebsd/man9/VNET.9 4.html353
-rw-r--r--static/freebsd/man9/VOP_ACCESS.9 4.html102
-rw-r--r--static/freebsd/man9/VOP_ACLCHECK.9 4.html100
-rw-r--r--static/freebsd/man9/VOP_ADVISE.9 4.html87
-rw-r--r--static/freebsd/man9/VOP_ADVLOCK.9 4.html89
-rw-r--r--static/freebsd/man9/VOP_ALLOCATE.9 4.html86
-rw-r--r--static/freebsd/man9/VOP_ATTRIB.9 4.html139
-rw-r--r--static/freebsd/man9/VOP_BMAP.9 4.html90
-rw-r--r--static/freebsd/man9/VOP_BWRITE.9 4.html57
-rw-r--r--static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html115
-rw-r--r--static/freebsd/man9/VOP_CREATE.9 4.html118
-rw-r--r--static/freebsd/man9/VOP_DEALLOCATE.9 4.html99
-rw-r--r--static/freebsd/man9/VOP_FSYNC.9 4.html105
-rw-r--r--static/freebsd/man9/VOP_GETACL.9 4.html100
-rw-r--r--static/freebsd/man9/VOP_GETEXTATTR.9 4.html119
-rw-r--r--static/freebsd/man9/VOP_GETPAGES.9 3.html160
-rw-r--r--static/freebsd/man9/VOP_INACTIVE.9 4.html74
-rw-r--r--static/freebsd/man9/VOP_INOTIFY.9 4.html78
-rw-r--r--static/freebsd/man9/VOP_IOCTL.9 4.html77
-rw-r--r--static/freebsd/man9/VOP_LINK.9 4.html83
-rw-r--r--static/freebsd/man9/VOP_LISTEXTATTR.9 4.html111
-rw-r--r--static/freebsd/man9/VOP_LOCK.9 4.html128
-rw-r--r--static/freebsd/man9/VOP_LOOKUP.9 4.html148
-rw-r--r--static/freebsd/man9/VOP_OPENCLOSE.9 4.html108
-rw-r--r--static/freebsd/man9/VOP_PATHCONF.9 4.html88
-rw-r--r--static/freebsd/man9/VOP_PRINT.9 4.html54
-rw-r--r--static/freebsd/man9/VOP_RDWR.9 4.html112
-rw-r--r--static/freebsd/man9/VOP_READDIR.9 4.html109
-rw-r--r--static/freebsd/man9/VOP_READLINK.9 4.html78
-rw-r--r--static/freebsd/man9/VOP_READ_PGCACHE.9 4.html98
-rw-r--r--static/freebsd/man9/VOP_REALLOCBLKS.9 4.html58
-rw-r--r--static/freebsd/man9/VOP_REMOVE.9 4.html83
-rw-r--r--static/freebsd/man9/VOP_RENAME.9 4.html93
-rw-r--r--static/freebsd/man9/VOP_REVOKE.9 4.html58
-rw-r--r--static/freebsd/man9/VOP_SETACL.9 4.html107
-rw-r--r--static/freebsd/man9/VOP_SETEXTATTR.9 4.html121
-rw-r--r--static/freebsd/man9/VOP_SETLABEL.9 3.html127
-rw-r--r--static/freebsd/man9/VOP_STRATEGY.9 4.html67
-rw-r--r--static/freebsd/man9/VOP_VPTOCNP.9 4.html97
-rw-r--r--static/freebsd/man9/VOP_VPTOFH.9 4.html56
-rw-r--r--static/freebsd/man9/accept_filter.9 3.html129
-rw-r--r--static/freebsd/man9/accf_data.9 4.html73
-rw-r--r--static/freebsd/man9/accf_dns.9 3.html74
-rw-r--r--static/freebsd/man9/accf_http.9 3.html89
-rw-r--r--static/freebsd/man9/accf_tls.9 3.html86
-rw-r--r--static/freebsd/man9/acl.9 3.html207
-rw-r--r--static/freebsd/man9/alq.9 3.html300
-rw-r--r--static/freebsd/man9/altq.9 3.html510
-rw-r--r--static/freebsd/man9/atomic.9 3.html613
-rw-r--r--static/freebsd/man9/backlight.9 3.html97
-rw-r--r--static/freebsd/man9/bhnd.9 3.html2322
-rw-r--r--static/freebsd/man9/bhnd_erom.9 3.html355
-rw-r--r--static/freebsd/man9/bios.9 3.html158
-rw-r--r--static/freebsd/man9/bitset.9 3.html487
-rw-r--r--static/freebsd/man9/bpf.9 3.html196
-rw-r--r--static/freebsd/man9/buf.9 3.html111
-rw-r--r--static/freebsd/man9/buf_ring.9 3.html130
-rw-r--r--static/freebsd/man9/bus_activate_resource.9 3.html115
-rw-r--r--static/freebsd/man9/bus_adjust_resource.9 4.html93
-rw-r--r--static/freebsd/man9/bus_alloc_resource.9 3.html168
-rw-r--r--static/freebsd/man9/bus_attach_children.9 3.html138
-rw-r--r--static/freebsd/man9/bus_child_present.9 3.html86
-rw-r--r--static/freebsd/man9/bus_dma.9 3.html1154
-rw-r--r--static/freebsd/man9/bus_generic_detach.9 4.html62
-rw-r--r--static/freebsd/man9/bus_generic_new_pass.9 4.html49
-rw-r--r--static/freebsd/man9/bus_generic_print_child.9 3.html99
-rw-r--r--static/freebsd/man9/bus_generic_read_ivar.9 4.html56
-rw-r--r--static/freebsd/man9/bus_generic_shutdown.9 4.html55
-rw-r--r--static/freebsd/man9/bus_get_resource.9 4.html87
-rw-r--r--static/freebsd/man9/bus_map_resource.9 3.html150
-rw-r--r--static/freebsd/man9/bus_release_resource.9 4.html85
-rw-r--r--static/freebsd/man9/bus_set_pass.9 4.html45
-rw-r--r--static/freebsd/man9/bus_set_resource.9 4.html95
-rw-r--r--static/freebsd/man9/bus_space.9 3.html1712
-rw-r--r--static/freebsd/man9/byteorder.9 4.html219
-rw-r--r--static/freebsd/man9/callout.9 3.html614
-rw-r--r--static/freebsd/man9/casuword.9 3.html88
-rw-r--r--static/freebsd/man9/cd.9 3.html95
-rw-r--r--static/freebsd/man9/cdefs.9 3.html937
-rw-r--r--static/freebsd/man9/cnv.9 4.html278
-rw-r--r--static/freebsd/man9/condvar.9 4.html216
-rw-r--r--static/freebsd/man9/config_intrhook.9 3.html127
-rw-r--r--static/freebsd/man9/contigmalloc.9 3.html118
-rw-r--r--static/freebsd/man9/copy.9 3.html130
-rw-r--r--static/freebsd/man9/coredumper_register.9 3.html181
-rw-r--r--static/freebsd/man9/counter.9 4.html282
-rw-r--r--static/freebsd/man9/cpu_machdep.9 3.html334
-rw-r--r--static/freebsd/man9/cpuset.9 4.html323
-rw-r--r--static/freebsd/man9/cr_bsd_visible.9 3.html97
-rw-r--r--static/freebsd/man9/cr_cansee.9 3.html72
-rw-r--r--static/freebsd/man9/cr_canseejailproc.9 4.html69
-rw-r--r--static/freebsd/man9/cr_canseeothergids.9 4.html64
-rw-r--r--static/freebsd/man9/cr_canseeotheruids.9 4.html61
-rw-r--r--static/freebsd/man9/critical_enter.9 3.html94
-rw-r--r--static/freebsd/man9/crypto.9 3.html182
-rw-r--r--static/freebsd/man9/crypto_buffer.9 3.html256
-rw-r--r--static/freebsd/man9/crypto_driver.9 4.html269
-rw-r--r--static/freebsd/man9/crypto_request.9 4.html505
-rw-r--r--static/freebsd/man9/crypto_session.9 3.html230
-rw-r--r--static/freebsd/man9/deadfs.9 4.html47
-rw-r--r--static/freebsd/man9/dev_clone.9 4.html67
-rw-r--r--static/freebsd/man9/dev_refthread.9 3.html125
-rw-r--r--static/freebsd/man9/devclass.9 4.html55
-rw-r--r--static/freebsd/man9/devclass_find.9 4.html52
-rw-r--r--static/freebsd/man9/devclass_get_count.9 4.html46
-rw-r--r--static/freebsd/man9/devclass_get_device.9 4.html52
-rw-r--r--static/freebsd/man9/devclass_get_devices.9 4.html59
-rw-r--r--static/freebsd/man9/devclass_get_drivers.9 4.html59
-rw-r--r--static/freebsd/man9/devclass_get_maxunit.9 4.html64
-rw-r--r--static/freebsd/man9/devclass_get_name.9 4.html45
-rw-r--r--static/freebsd/man9/devclass_get_softc.9 4.html53
-rw-r--r--static/freebsd/man9/devctl_notify.9 4.html64
-rw-r--r--static/freebsd/man9/devctl_process_running.9 4.html50
-rw-r--r--static/freebsd/man9/devctl_safe_quote_sb.9 4.html51
-rw-r--r--static/freebsd/man9/devfs_set_cdevpriv.9 3.html127
-rw-r--r--static/freebsd/man9/device.9 3.html76
-rw-r--r--static/freebsd/man9/device_add_child.9 3.html110
-rw-r--r--static/freebsd/man9/device_delete_child.9 4.html60
-rw-r--r--static/freebsd/man9/device_delete_children.9 4.html57
-rw-r--r--static/freebsd/man9/device_enable.9 4.html63
-rw-r--r--static/freebsd/man9/device_find_child.9 4.html56
-rw-r--r--static/freebsd/man9/device_get_children.9 3.html78
-rw-r--r--static/freebsd/man9/device_get_devclass.9 4.html46
-rw-r--r--static/freebsd/man9/device_get_driver.9 4.html46
-rw-r--r--static/freebsd/man9/device_get_ivars.9 4.html60
-rw-r--r--static/freebsd/man9/device_get_name.9 4.html55
-rw-r--r--static/freebsd/man9/device_get_parent.9 4.html47
-rw-r--r--static/freebsd/man9/device_get_property.9 3.html92
-rw-r--r--static/freebsd/man9/device_get_softc.9 4.html62
-rw-r--r--static/freebsd/man9/device_get_state.9 3.html90
-rw-r--r--static/freebsd/man9/device_get_sysctl.9 4.html56
-rw-r--r--static/freebsd/man9/device_get_unit.9 4.html45
-rw-r--r--static/freebsd/man9/device_printf.9 4.html53
-rw-r--r--static/freebsd/man9/device_probe_and_attach.9 3.html117
-rw-r--r--static/freebsd/man9/device_quiet.9 4.html64
-rw-r--r--static/freebsd/man9/device_set_desc.9 4.html72
-rw-r--r--static/freebsd/man9/device_set_driver.9 4.html50
-rw-r--r--static/freebsd/man9/device_set_flags.9 4.html55
-rw-r--r--static/freebsd/man9/devstat.9 3.html401
-rw-r--r--static/freebsd/man9/devtoname.9 4.html45
-rw-r--r--static/freebsd/man9/disk.9 3.html258
-rw-r--r--static/freebsd/man9/dnv.9 3.html153
-rw-r--r--static/freebsd/man9/domain.9 3.html194
-rw-r--r--static/freebsd/man9/domainset.9 3.html160
-rw-r--r--static/freebsd/man9/dpcpu.9 4.html160
-rw-r--r--static/freebsd/man9/drbr.9 3.html127
-rw-r--r--static/freebsd/man9/driver.9 3.html98
-rw-r--r--static/freebsd/man9/ecn.9 3.html174
-rw-r--r--static/freebsd/man9/efirt.9 3.html208
-rw-r--r--static/freebsd/man9/epoch.9 4.html284
-rw-r--r--static/freebsd/man9/ether_gen_addr.9 4.html65
-rw-r--r--static/freebsd/man9/eventtimers.9 4.html252
-rw-r--r--static/freebsd/man9/extattr.9 3.html87
-rw-r--r--static/freebsd/man9/exterror.9 3.html185
-rw-r--r--static/freebsd/man9/fail.9 3.html263
-rw-r--r--static/freebsd/man9/fdt_pinctrl.9 3.html174
-rw-r--r--static/freebsd/man9/fetch.9 3.html130
-rw-r--r--static/freebsd/man9/firmware.9 3.html319
-rw-r--r--static/freebsd/man9/fpu_kern.9 3.html192
-rw-r--r--static/freebsd/man9/g_access.9 3.html151
-rw-r--r--static/freebsd/man9/g_attach.9 3.html139
-rw-r--r--static/freebsd/man9/g_bio.9 3.html270
-rw-r--r--static/freebsd/man9/g_consumer.9 3.html128
-rw-r--r--static/freebsd/man9/g_data.9 3.html104
-rw-r--r--static/freebsd/man9/g_event.9 3.html176
-rw-r--r--static/freebsd/man9/g_geom.9 3.html197
-rw-r--r--static/freebsd/man9/g_provider.9 3.html130
-rw-r--r--static/freebsd/man9/g_provider_by_name.9 4.html66
-rw-r--r--static/freebsd/man9/g_wither_geom.9 3.html73
-rw-r--r--static/freebsd/man9/get_cyclecount.9 4.html67
-rw-r--r--static/freebsd/man9/getenv.9 4.html231
-rw-r--r--static/freebsd/man9/getnewvnode.9 4.html72
-rw-r--r--static/freebsd/man9/gone_in.9 4.html81
-rw-r--r--static/freebsd/man9/groupmember.9 4.html74
-rw-r--r--static/freebsd/man9/hardclock.9 3.html69
-rw-r--r--static/freebsd/man9/hash.9 3.html211
-rw-r--r--static/freebsd/man9/hashalloc.9 3.html253
-rw-r--r--static/freebsd/man9/hashinit.9 3.html174
-rw-r--r--static/freebsd/man9/hexdump.9 4.html79
-rw-r--r--static/freebsd/man9/hhook.9 3.html292
-rw-r--r--static/freebsd/man9/hz.9 3.html115
-rw-r--r--static/freebsd/man9/ieee80211.9 3.html568
-rw-r--r--static/freebsd/man9/ieee80211_amrr.9 3.html159
-rw-r--r--static/freebsd/man9/ieee80211_beacon.9 3.html102
-rw-r--r--static/freebsd/man9/ieee80211_bmiss.9 3.html72
-rw-r--r--static/freebsd/man9/ieee80211_crypto.9 3.html221
-rw-r--r--static/freebsd/man9/ieee80211_ddb.9 4.html56
-rw-r--r--static/freebsd/man9/ieee80211_input.9 3.html83
-rw-r--r--static/freebsd/man9/ieee80211_node.9 3.html190
-rw-r--r--static/freebsd/man9/ieee80211_output.9 3.html141
-rw-r--r--static/freebsd/man9/ieee80211_proto.9 3.html198
-rw-r--r--static/freebsd/man9/ieee80211_radiotap.9 3.html248
-rw-r--r--static/freebsd/man9/ieee80211_regdomain.9 3.html118
-rw-r--r--static/freebsd/man9/ieee80211_scan.9 3.html291
-rw-r--r--static/freebsd/man9/ieee80211_vap.9 3.html116
-rw-r--r--static/freebsd/man9/iflib.9 4.html55
-rw-r--r--static/freebsd/man9/iflibdd.9 4.html367
-rw-r--r--static/freebsd/man9/iflibdi.9 4.html250
-rw-r--r--static/freebsd/man9/iflibtxrx.9 3.html258
-rw-r--r--static/freebsd/man9/ifnet.9 3.html1731
-rw-r--r--static/freebsd/man9/inittodr.9 3.html76
-rw-r--r--static/freebsd/man9/insmntque.9 3.html84
-rw-r--r--static/freebsd/man9/intr_event.9 3.html341
-rw-r--r--static/freebsd/man9/intro.9 3.html387
-rw-r--r--static/freebsd/man9/kasan.9 3.html137
-rw-r--r--static/freebsd/man9/kern_reboot.9 3.html228
-rw-r--r--static/freebsd/man9/kern_testfrwk.9 3.html150
-rw-r--r--static/freebsd/man9/kern_yield.9 3.html114
-rw-r--r--static/freebsd/man9/kernacc.9 4.html71
-rw-r--r--static/freebsd/man9/kernel_mount.9 3.html160
-rw-r--r--static/freebsd/man9/khelp.9 3.html309
-rw-r--r--static/freebsd/man9/kmsan.9 3.html314
-rw-r--r--static/freebsd/man9/kobj.9 3.html142
-rw-r--r--static/freebsd/man9/kproc.9 3.html294
-rw-r--r--static/freebsd/man9/kqueue.9 4.html299
-rw-r--r--static/freebsd/man9/kstack_contains.9 4.html57
-rw-r--r--static/freebsd/man9/kthread.9 3.html271
-rw-r--r--static/freebsd/man9/ktr.9 4.html182
-rw-r--r--static/freebsd/man9/lock.9 4.html431
-rw-r--r--static/freebsd/man9/locking.9 3.html458
-rw-r--r--static/freebsd/man9/mac.9 3.html200
-rw-r--r--static/freebsd/man9/make_dev.9 4.html415
-rw-r--r--static/freebsd/man9/malloc.9 4.html332
-rw-r--r--static/freebsd/man9/mbchain.9 4.html229
-rw-r--r--static/freebsd/man9/mbuf.9 4.html1032
-rw-r--r--static/freebsd/man9/mbuf_tags.9 4.html262
-rw-r--r--static/freebsd/man9/mdchain.9 4.html229
-rw-r--r--static/freebsd/man9/memcchr.9 4.html55
-rw-r--r--static/freebsd/man9/memguard.9 3.html135
-rw-r--r--static/freebsd/man9/mi_switch.9 3.html134
-rw-r--r--static/freebsd/man9/microseq.9 4.html524
-rw-r--r--static/freebsd/man9/microtime.9 4.html104
-rw-r--r--static/freebsd/man9/microuptime.9 4.html110
-rw-r--r--static/freebsd/man9/mod_cc.9 3.html281
-rw-r--r--static/freebsd/man9/module.9 3.html88
-rw-r--r--static/freebsd/man9/mtx_pool.9 3.html162
-rw-r--r--static/freebsd/man9/mutex.9 4.html456
-rw-r--r--static/freebsd/man9/namei.9 3.html423
-rw-r--r--static/freebsd/man9/netisr.9 4.html235
-rw-r--r--static/freebsd/man9/nv.9 4.html1177
-rw-r--r--static/freebsd/man9/nvmem.9 3.html192
-rw-r--r--static/freebsd/man9/ofw_bus_is_compatible.9 3.html138
-rw-r--r--static/freebsd/man9/ofw_bus_status_okay.9 4.html72
-rw-r--r--static/freebsd/man9/ofw_graph.9 4.html99
-rw-r--r--static/freebsd/man9/osd.9 4.html307
-rw-r--r--static/freebsd/man9/owll.9 4.html95
-rw-r--r--static/freebsd/man9/own.9 4.html216
-rw-r--r--static/freebsd/man9/p_candebug.9 4.html106
-rw-r--r--static/freebsd/man9/p_cansee.9 4.html63
-rw-r--r--static/freebsd/man9/panic.9 3.html114
-rw-r--r--static/freebsd/man9/pci.9 4.html897
-rw-r--r--static/freebsd/man9/pci_iov_schema.9 3.html233
-rw-r--r--static/freebsd/man9/pfil.9 3.html135
-rw-r--r--static/freebsd/man9/pfind.9 4.html83
-rw-r--r--static/freebsd/man9/pget.9 4.html87
-rw-r--r--static/freebsd/man9/pgfind.9 4.html59
-rw-r--r--static/freebsd/man9/physio.9 4.html100
-rw-r--r--static/freebsd/man9/pmap.9 4.html98
-rw-r--r--static/freebsd/man9/pmap_activate.9 4.html52
-rw-r--r--static/freebsd/man9/pmap_clear_modify.9 4.html52
-rw-r--r--static/freebsd/man9/pmap_copy.9 4.html78
-rw-r--r--static/freebsd/man9/pmap_enter.9 3.html134
-rw-r--r--static/freebsd/man9/pmap_extract.9 4.html88
-rw-r--r--static/freebsd/man9/pmap_growkernel.9 4.html52
-rw-r--r--static/freebsd/man9/pmap_init.9 4.html53
-rw-r--r--static/freebsd/man9/pmap_is_modified.9 4.html70
-rw-r--r--static/freebsd/man9/pmap_is_prefaultable.9 4.html56
-rw-r--r--static/freebsd/man9/pmap_kextract.9 4.html83
-rw-r--r--static/freebsd/man9/pmap_map.9 4.html74
-rw-r--r--static/freebsd/man9/pmap_mincore.9 4.html66
-rw-r--r--static/freebsd/man9/pmap_object_init_pt.9 4.html66
-rw-r--r--static/freebsd/man9/pmap_page_exists_quick.9 4.html68
-rw-r--r--static/freebsd/man9/pmap_page_init.9 4.html52
-rw-r--r--static/freebsd/man9/pmap_pinit.9 4.html62
-rw-r--r--static/freebsd/man9/pmap_protect.9 4.html54
-rw-r--r--static/freebsd/man9/pmap_qenter.9 4.html78
-rw-r--r--static/freebsd/man9/pmap_quick_enter_page.9 4.html93
-rw-r--r--static/freebsd/man9/pmap_release.9 4.html60
-rw-r--r--static/freebsd/man9/pmap_remove.9 4.html78
-rw-r--r--static/freebsd/man9/pmap_resident_count.9 4.html75
-rw-r--r--static/freebsd/man9/pmap_unwire.9 4.html61
-rw-r--r--static/freebsd/man9/pmap_zero_page.9 4.html67
-rw-r--r--static/freebsd/man9/printf.9 3.html162
-rw-r--r--static/freebsd/man9/prison_check.9 4.html52
-rw-r--r--static/freebsd/man9/priv.9 3.html102
-rw-r--r--static/freebsd/man9/prng.9 4.html93
-rw-r--r--static/freebsd/man9/proc_rwmem.9 4.html95
-rw-r--r--static/freebsd/man9/pseudofs.9 4.html56
-rw-r--r--static/freebsd/man9/psignal.9 3.html110
-rw-r--r--static/freebsd/man9/pwmbus.9 3.html135
-rw-r--r--static/freebsd/man9/random.9 4.html160
-rw-r--r--static/freebsd/man9/random_harvest.9 4.html88
-rw-r--r--static/freebsd/man9/ratecheck.9 4.html71
-rw-r--r--static/freebsd/man9/redzone.9 4.html118
-rw-r--r--static/freebsd/man9/refcount.9 3.html156
-rw-r--r--static/freebsd/man9/regulator.9 4.html193
-rw-r--r--static/freebsd/man9/resettodr.9 4.html49
-rw-r--r--static/freebsd/man9/resource_int_value.9 4.html94
-rw-r--r--static/freebsd/man9/rijndael.9 3.html99
-rw-r--r--static/freebsd/man9/rman.9 4.html411
-rw-r--r--static/freebsd/man9/rmlock.9 4.html366
-rw-r--r--static/freebsd/man9/rtentry.9 3.html206
-rw-r--r--static/freebsd/man9/runqueue.9 3.html107
-rw-r--r--static/freebsd/man9/rwlock.9 4.html324
-rw-r--r--static/freebsd/man9/sbuf.9 4.html525
-rw-r--r--static/freebsd/man9/scheduler.9 4.html208
-rw-r--r--static/freebsd/man9/securelevel_gt.9 4.html65
-rw-r--r--static/freebsd/man9/selrecord.9 4.html94
-rw-r--r--static/freebsd/man9/sema.9 4.html126
-rw-r--r--static/freebsd/man9/seqc.9 4.html124
-rw-r--r--static/freebsd/man9/sf_buf.9 3.html110
-rw-r--r--static/freebsd/man9/sglist.9 4.html471
-rw-r--r--static/freebsd/man9/shm_map.9 4.html163
-rw-r--r--static/freebsd/man9/signal.9 4.html356
-rw-r--r--static/freebsd/man9/sleep.9 4.html307
-rw-r--r--static/freebsd/man9/sleepqueue.9 4.html326
-rw-r--r--static/freebsd/man9/smr.9 3.html234
-rw-r--r--static/freebsd/man9/socket.9 4.html563
-rw-r--r--static/freebsd/man9/stack.9 4.html174
-rw-r--r--static/freebsd/man9/store.9 4.html92
-rw-r--r--static/freebsd/man9/style.9 3.html783
-rw-r--r--static/freebsd/man9/style.lua.9 3.html101
-rw-r--r--static/freebsd/man9/superio.9 4.html195
-rw-r--r--static/freebsd/man9/swi.9 3.html172
-rw-r--r--static/freebsd/man9/sx.9 4.html301
-rw-r--r--static/freebsd/man9/syscall_helper_register.9 4.html129
-rw-r--r--static/freebsd/man9/sysctl.9 3.html1148
-rw-r--r--static/freebsd/man9/sysctl_add_oid.9 3.html151
-rw-r--r--static/freebsd/man9/sysctl_ctx_init.9 3.html200
-rw-r--r--static/freebsd/man9/taskqueue.9 4.html494
-rw-r--r--static/freebsd/man9/tcp_functions.9 3.html316
-rw-r--r--static/freebsd/man9/thread_exit.9 4.html50
-rw-r--r--static/freebsd/man9/time.9 4.html82
-rw-r--r--static/freebsd/man9/tvtohz.9 4.html60
-rw-r--r--static/freebsd/man9/ucred.9 4.html188
-rw-r--r--static/freebsd/man9/uidinfo.9 4.html88
-rw-r--r--static/freebsd/man9/uio.9 3.html212
-rw-r--r--static/freebsd/man9/unr.9 4.html186
-rw-r--r--static/freebsd/man9/usbdi.9 3.html477
-rw-r--r--static/freebsd/man9/vaccess.9 3.html99
-rw-r--r--static/freebsd/man9/vaccess_acl_nfs4.9 3.html111
-rw-r--r--static/freebsd/man9/vaccess_acl_posix1e.9 3.html109
-rw-r--r--static/freebsd/man9/vflush.9 4.html81
-rw-r--r--static/freebsd/man9/vfs_busy.9 4.html84
-rw-r--r--static/freebsd/man9/vfs_getnewfsid.9 4.html72
-rw-r--r--static/freebsd/man9/vfs_getopt.9 4.html176
-rw-r--r--static/freebsd/man9/vfs_getvfs.9 4.html71
-rw-r--r--static/freebsd/man9/vfs_mountedfrom.9 4.html48
-rw-r--r--static/freebsd/man9/vfs_rootmountalloc.9 4.html60
-rw-r--r--static/freebsd/man9/vfs_suser.9 4.html70
-rw-r--r--static/freebsd/man9/vfs_timestamp.9 4.html55
-rw-r--r--static/freebsd/man9/vfs_unbusy.9 4.html54
-rw-r--r--static/freebsd/man9/vfs_unmountall.9 4.html41
-rw-r--r--static/freebsd/man9/vfsconf.9 3.html121
-rw-r--r--static/freebsd/man9/vget.9 4.html64
-rw-r--r--static/freebsd/man9/vgone.9 4.html57
-rw-r--r--static/freebsd/man9/vhold.9 4.html76
-rw-r--r--static/freebsd/man9/vinvalbuf.9 4.html111
-rw-r--r--static/freebsd/man9/vm_fault_prefault.9 4.html71
-rw-r--r--static/freebsd/man9/vm_map.9 4.html290
-rw-r--r--static/freebsd/man9/vm_map_check_protection.9 4.html70
-rw-r--r--static/freebsd/man9/vm_map_delete.9 4.html68
-rw-r--r--static/freebsd/man9/vm_map_entry_resize_free.9 3.html176
-rw-r--r--static/freebsd/man9/vm_map_find.9 3.html122
-rw-r--r--static/freebsd/man9/vm_map_findspace.9 4.html74
-rw-r--r--static/freebsd/man9/vm_map_inherit.9 4.html75
-rw-r--r--static/freebsd/man9/vm_map_init.9 4.html61
-rw-r--r--static/freebsd/man9/vm_map_insert.9 4.html82
-rw-r--r--static/freebsd/man9/vm_map_lock.9 4.html118
-rw-r--r--static/freebsd/man9/vm_map_lookup.9 3.html83
-rw-r--r--static/freebsd/man9/vm_map_madvise.9 4.html66
-rw-r--r--static/freebsd/man9/vm_map_max.9 4.html66
-rw-r--r--static/freebsd/man9/vm_map_protect.9 3.html105
-rw-r--r--static/freebsd/man9/vm_map_remove.9 4.html69
-rw-r--r--static/freebsd/man9/vm_map_stack.9 3.html102
-rw-r--r--static/freebsd/man9/vm_map_submap.9 3.html78
-rw-r--r--static/freebsd/man9/vm_map_sync.9 4.html71
-rw-r--r--static/freebsd/man9/vm_map_wire.9 3.html99
-rw-r--r--static/freebsd/man9/vm_page_aflag.9 4.html92
-rw-r--r--static/freebsd/man9/vm_page_alloc.9 4.html248
-rw-r--r--static/freebsd/man9/vm_page_bits.9 4.html141
-rw-r--r--static/freebsd/man9/vm_page_busy.9 4.html178
-rw-r--r--static/freebsd/man9/vm_page_deactivate.9 4.html50
-rw-r--r--static/freebsd/man9/vm_page_dontneed.9 4.html57
-rw-r--r--static/freebsd/man9/vm_page_free.9 3.html93
-rw-r--r--static/freebsd/man9/vm_page_grab.9 4.html76
-rw-r--r--static/freebsd/man9/vm_page_insert.9 4.html88
-rw-r--r--static/freebsd/man9/vm_page_lookup.9 4.html59
-rw-r--r--static/freebsd/man9/vm_page_rename.9 4.html62
-rw-r--r--static/freebsd/man9/vm_page_wire.9 4.html77
-rw-r--r--static/freebsd/man9/vm_set_page_size.9 4.html51
-rw-r--r--static/freebsd/man9/vmem.9 3.html261
-rw-r--r--static/freebsd/man9/vn_deallocate.9 4.html99
-rw-r--r--static/freebsd/man9/vn_fullpath.9 3.html156
-rw-r--r--static/freebsd/man9/vn_isdisk.9 4.html67
-rw-r--r--static/freebsd/man9/vnode.9 3.html153
-rw-r--r--static/freebsd/man9/vnode_pager_purge_range.9 4.html71
-rw-r--r--static/freebsd/man9/vnode_pager_setsize.9 4.html72
-rw-r--r--static/freebsd/man9/vref.9 4.html68
-rw-r--r--static/freebsd/man9/vrefcnt.9 4.html48
-rw-r--r--static/freebsd/man9/vrele.9 4.html85
-rw-r--r--static/freebsd/man9/vslock.9 4.html79
-rw-r--r--static/freebsd/man9/watchdog.9 4.html71
-rw-r--r--static/freebsd/man9/zero_region.9 4.html85
-rw-r--r--static/freebsd/man9/zone.9 3.html596
471 files changed, 0 insertions, 76362 deletions
diff --git a/static/freebsd/man9/BUF_ISLOCKED.9 4.html b/static/freebsd/man9/BUF_ISLOCKED.9 4.html
deleted file mode 100644
index d2ed0b6a..00000000
--- a/static/freebsd/man9/BUF_ISLOCKED.9 4.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_ISLOCKED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_ISLOCKED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_ISLOCKED</code> &#x2014;
- <span class="Nd">returns the state of the lock linked to the
- buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUF_ISLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_ISLOCKED"><code class="Fn" id="BUF_ISLOCKED">BUF_ISLOCKED</code></a>()
- function returns the status of the lock linked to the buffer in relation to
- curthread.</p>
-<p class="Pp">It can return:</p>
-<dl class="Bl-tag">
- <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt>
- <dd>An exclusive lock is held by curthread.</dd>
- <dt id="LK_EXCLOTHER"><a class="permalink" href="#LK_EXCLOTHER"><code class="Dv">LK_EXCLOTHER</code></a></dt>
- <dd>An exclusive lock is held by someone other than curthread.</dd>
- <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt>
- <dd>A shared lock is held.</dd>
- <dt id="0"><a class="permalink" href="#0"><code class="Li">0</code></a></dt>
- <dd>The lock is not held by anyone.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Attilio
- Rao</span>
- &lt;<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 26, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_LOCK.9 4.html b/static/freebsd/man9/BUF_LOCK.9 4.html
deleted file mode 100644
index 6876648a..00000000
--- a/static/freebsd/man9/BUF_LOCK.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_LOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_LOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_LOCK</code> &#x2014; <span class="Nd">locks a
- buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUF_LOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>, <var class="Fa" style="white-space: nowrap;">int
- locktype</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_LOCK"><code class="Fn" id="BUF_LOCK">BUF_LOCK</code></a>()
- function locks the given buffer. If the lock is already held this call will
- block until it can acquire the lock unless <code class="Dv">LK_NOWAIT</code>
- is set.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer to lock.</dd>
- <dt><var class="Fa">locktype</var></dt>
- <dd>Flags controlling the type of lock. See <a class="Xr">lockmgr(9)</a> for
- details.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A value of 0 is returned upon success. See
- <a class="Xr">lockmgr(9)</a> for information on non-zero return values.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_TIMELOCK(9)</a>,
- <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 9, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_LOCKFREE.9 4.html b/static/freebsd/man9/BUF_LOCKFREE.9 4.html
deleted file mode 100644
index 5d55fe83..00000000
--- a/static/freebsd/man9/BUF_LOCKFREE.9 4.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_LOCKFREE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_LOCKFREE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_LOCKFREE</code> &#x2014;
- <span class="Nd">destroys a buffer's lock</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUF_LOCKFREE</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_LOCKFREE"><code class="Fn" id="BUF_LOCKFREE">BUF_LOCKFREE</code></a>()
- macro destroys the buffer lock. The lock must not be held when this macro is
- called or a panic will result.</p>
-<p class="Pp">Its argument is:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer whose lock is to be destroyed.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">BUF_UNLOCK(9)</a>,
- <a class="Xr">lockdestroy(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 9, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_LOCKINIT.9 4.html b/static/freebsd/man9/BUF_LOCKINIT.9 4.html
deleted file mode 100644
index 1365919a..00000000
--- a/static/freebsd/man9/BUF_LOCKINIT.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_LOCKINIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_LOCKINIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_LOCKINIT</code> &#x2014;
- <span class="Nd">initializes a buffer lock</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUF_LOCKINIT</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_LOCKINIT"><code class="Fn" id="BUF_LOCKINIT">BUF_LOCKINIT</code></a>()
- macro initializes a buffer lock.</p>
-<p class="Pp">Its argument is:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer whose lock it to be initialized.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">BUF_UNLOCK(9)</a>,
- <a class="Xr">lockinit(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 6, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_RECURSED.9 4.html b/static/freebsd/man9/BUF_RECURSED.9 4.html
deleted file mode 100644
index 753ddf80..00000000
--- a/static/freebsd/man9/BUF_RECURSED.9 4.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_RECURSED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_RECURSED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_RECURSED</code> &#x2014;
- <span class="Nd">checks if the lock linked to the buffer is
- recursed</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUF_RECURSED</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_RECURSED"><code class="Fn" id="BUF_RECURSED">BUF_RECURSED</code></a>()
- function checks if the lock linked to the given buffer is recursed and
- returns 1 if the condition is true, 0 otherwise.</p>
-<p class="Pp">Its argument is:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer linked to the lock. See <a class="Xr">lockmgr_recursed(9)</a>
- for details.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Attilio
- Rao</span>
- &lt;<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 22, 2008</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_TIMELOCK.9 4.html b/static/freebsd/man9/BUF_TIMELOCK.9 4.html
deleted file mode 100644
index 24b3f3a9..00000000
--- a/static/freebsd/man9/BUF_TIMELOCK.9 4.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_TIMELOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_TIMELOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_TIMELOCK</code> &#x2014;
- <span class="Nd">locks a buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUF_TIMELOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>, <var class="Fa" style="white-space: nowrap;">int
- locktype</var>, <var class="Fa" style="white-space: nowrap;">char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int catch</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_TIMELOCK"><code class="Fn" id="BUF_TIMELOCK">BUF_TIMELOCK</code></a>()
- function locks the given buffer, and limits the amount of time it will sleep
- to <var class="Fa">timo</var> and OR's <var class="Fa">catch</var> into the
- sleep's priority. <var class="Fa">wmesg</var> is the wmesg used in the
- sleep.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer to lock.</dd>
- <dt><var class="Fa">locktype</var></dt>
- <dd>Flags controlling the type of lock. See <a class="Xr">lockmgr(9)</a> for
- details.</dd>
- <dt><var class="Fa">wmesg</var></dt>
- <dd>The wmesg used in any sleeps while acquiring the lock.</dd>
- <dt><var class="Fa">catch</var></dt>
- <dd>Priority OR'd into the sleep's priority.</dd>
- <dt><var class="Fa">timo</var></dt>
- <dd>The timeout for any sleeps encountered during the lock.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A value of 0 is returned on success. See
- <a class="Xr">lockmgr(9)</a> for details on non-zero return values.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 9, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUF_UNLOCK.9 4.html b/static/freebsd/man9/BUF_UNLOCK.9 4.html
deleted file mode 100644
index 370d0fbe..00000000
--- a/static/freebsd/man9/BUF_UNLOCK.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_UNLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_UNLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUF_UNLOCK</code> &#x2014;
- <span class="Nd">unlocks a locked buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUF_UNLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUF_UNLOCK"><code class="Fn" id="BUF_UNLOCK">BUF_UNLOCK</code></a>()
- function unlocks a buffer that was previously locked with
- <a class="permalink" href="#BUF_LOCK"><code class="Fn" id="BUF_LOCK">BUF_LOCK</code></a>()
- or
- <a class="permalink" href="#BUF_TIMELOCK"><code class="Fn" id="BUF_TIMELOCK">BUF_TIMELOCK</code></a>().</p>
-<p class="Pp">Its argument is:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer to unlock. The buffer must already be locked.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>,
- <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 9, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_ADD_CHILD.9 3.html b/static/freebsd/man9/BUS_ADD_CHILD.9 3.html
deleted file mode 100644
index c64b8b05..00000000
--- a/static/freebsd/man9/BUS_ADD_CHILD.9 3.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_ADD_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_ADD_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_ADD_CHILD</code> &#x2014;
- <span class="Nd">add a device node to the tree with a given
- priority</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">BUS_ADD_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int order</var>,
- <var class="Fa" style="white-space: nowrap;">const char *name</var>,
- <var class="Fa" style="white-space: nowrap;">int unit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_ADD_CHILD"><code class="Fn" id="BUS_ADD_CHILD">BUS_ADD_CHILD</code></a>()
- method is used by the driver identify routine to add devices to the tree. It
- can also be used to add children to buses that implement this routine in
- other contexts, although the behavior is bus specific. Please see
- <a class="Xr">device_add_child(9)</a> for more details. The interface is the
- same as <a class="Xr">device_add_child(9)</a> however, the bus'
- <code class="Fn">BUS_ADD_CHILD</code>() is called.</p>
-<p class="Pp" id="BUS_ADD_CHILD~2">Buses implementing
- <a class="permalink" href="#BUS_ADD_CHILD~2"><code class="Fn">BUS_ADD_CHILD</code></a>()
- should insert the device into the tree using
- <a class="Xr">device_add_child(9)</a> before adding things such as their own
- ivars and resource lists to the device.
- <code class="Fn">BUS_ADD_CHILD</code>() is not called by
- <a class="Xr">device_add_child(9)</a>.
- <code class="Fn">BUS_ADD_CHILD</code>() instead calls
- <a class="Xr">device_add_child(9)</a>.</p>
-<p class="Pp" id="BUS_ADD_CHILD~3">A panic will result when called for a bus
- that does not implement
- <a class="permalink" href="#BUS_ADD_CHILD~3"><code class="Fn">BUS_ADD_CHILD</code></a>().
- Some buses require a special bus-specific routine to be called instead of
- <code class="Fn">BUS_ADD_CHILD</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">BUS_ADD_CHILD</code>() method returns
- <var class="Vt">device_t</var> added to the tree, or
- <code class="Dv">NULL</code> to indicate failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>,
- <a class="Xr">device_add_child(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">M. Warner
- Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 8, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_BIND_INTR.9 3.html b/static/freebsd/man9/BUS_BIND_INTR.9 3.html
deleted file mode 100644
index f22ffda2..00000000
--- a/static/freebsd/man9/BUS_BIND_INTR.9 3.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_BIND_INTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_BIND_INTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_BIND_INTR</code>,
- <code class="Nm">bus_bind_intr</code> &#x2014; <span class="Nd">bind an
- interrupt resource to a specific CPU</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_BIND_INTR</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">device_t child</var>, <var class="Fa">struct resource
- *irq</var>, <var class="Fa">int cpu</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_bind_intr</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource
- *irq</var>, <var class="Fa" style="white-space: nowrap;">int cpu</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_BIND_INTR"><code class="Fn" id="BUS_BIND_INTR">BUS_BIND_INTR</code></a>()
- method allows an interrupt resource to be pinned to a specific CPU. The
- interrupt resource must have an interrupt handler attached via
- <a class="Xr">BUS_SETUP_INTR(9)</a>. The <var class="Fa">cpu</var> parameter
- corresponds to the ID of a valid CPU in the system. Binding an interrupt
- restricts the <a class="Xr">cpuset(2)</a> of any associated interrupt
- threads to only include the specified CPU. It may also direct the low-level
- interrupt handling of the interrupt to the specified CPU as well, but this
- behavior is platform-dependent. If the value <code class="Dv">NOCPU</code>
- is used for <var class="Fa">cpu</var>, then the interrupt will be
- &#x201C;unbound&#x201D; which restores any associated interrupt threads back
- to the default cpuset.</p>
-<p class="Pp">Non-sleepable locks such as mutexes should not be held across
- calls to these functions.</p>
-<p class="Pp" id="bus_bind_intr">The
- <a class="permalink" href="#bus_bind_intr"><code class="Fn">bus_bind_intr</code></a>()
- function is a simple wrapper around
- <code class="Fn">BUS_BIND_INTR</code>().</p>
-<p class="Pp" id="BUS_BIND_INTR~2">Note that currently there is no attempt made
- to arbitrate between multiple bind requests for the same interrupt from
- either the same device or multiple devices. There is also no arbitration
- between interrupt binding requests submitted by userland via
- <a class="Xr">cpuset(2)</a> and
- <a class="permalink" href="#BUS_BIND_INTR~2"><code class="Fn">BUS_BIND_INTR</code></a>().
- The most recent binding request is the one that will be in effect.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpuset(2)</a>, <a class="Xr">BUS_SETUP_INTR(9)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_BIND_INTR</code>() method and
- <code class="Fn">bus_bind_intr</code>() functions first appeared in
- <span class="Ux">FreeBSD 7.2</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 14, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html b/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html
deleted file mode 100644
index 25f74dfd..00000000
--- a/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CHILD_DELETED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CHILD_DELETED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_CHILD_DELETED</code> &#x2014;
- <span class="Nd">notify a bus device that a child is being
- deleted</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_CHILD_DELETED</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_CHILD_DELETED"><code class="Fn" id="BUS_CHILD_DELETED">BUS_CHILD_DELETED</code></a>()
- method is invoked by the new-bus framework when a device is deleted. A bus
- driver can provide an implementation of this method to release bus-specific
- resources associated with a device such as instance variables.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_CHILD_DELETED</code>() method first
- appeared in <span class="Ux">FreeBSD 10.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 21, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html b/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html
deleted file mode 100644
index 411252ab..00000000
--- a/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CHILD_DETACHED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CHILD_DETACHED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_CHILD_DETACHED</code> &#x2014;
- <span class="Nd">notify a bus device that a child was detached</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_CHILD_DETACHED</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_CHILD_DETACHED"><code class="Fn" id="BUS_CHILD_DETACHED">BUS_CHILD_DETACHED</code></a>()
- method is invoked by the new-bus framework after a device is detached or if
- a driver's attach routine (see <a class="Xr">DEVICE_ATTACH(9)</a>) fails. A
- bus driver can provide an implementation of this method to reclaim any
- resources allocated on behalf of the child or to cleanup state not properly
- released by a <a class="Xr">DEVICE_DETACH(9)</a> method.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>,
- <a class="Xr">DEVICE_DETACH(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 9, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html b/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html
deleted file mode 100644
index 64f10140..00000000
--- a/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CHILD_LOCATION(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CHILD_LOCATION(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_CHILD_LOCATION</code> &#x2014;
- <span class="Nd">obtain the location of a child on the bus.</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_CHILD_LOCATION</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">struct sbuf
- *sb</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_CHILD_LOCATION"><code class="Fn" id="BUS_CHILD_LOCATION">BUS_CHILD_LOCATION</code></a>()
- method returns the location of the <code class="Dv">child</code> device.
- This location is a series of key=value pairs. The string must be formatted
- as a space-separated list of key=value pairs. Names may only contain
- alphanumeric characters, underscores ('_') and hyphens ('-'). Values can
- contain any non-whitespace characters. Values containing whitespace can be
- quoted with double quotes ('&quot;'). Double quotes and backslashes in
- quoted values can be escaped with backslashes ('&#x00B4;).</p>
-<p class="Pp">The location is defined as a series of characteristics of the
- <code class="Dv">child</code> device that can be used to locate that device
- independent of what drivers are attached. Typically, these are slot numbers,
- bus addresses, or some topology formation. Where possible, buses are
- encouraged to provide locations that are stable from boot to boot and when
- other devices are added or removed. A location is not dependent on the kind
- of device at that location.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 22, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html b/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html
deleted file mode 100644
index 1826608f..00000000
--- a/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CHILD_PNPINFO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CHILD_PNPINFO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_CHILD_PNPINFO</code> &#x2014;
- <span class="Nd">obtain the plug and play information from a
- device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_CHILD_PNPINFO</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">struct sbuf
- *sb</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_CHILD_LOCATION"><code class="Fn" id="BUS_CHILD_LOCATION">BUS_CHILD_LOCATION</code></a>()
- method returns the identifying information about the
- <code class="Dv">child</code> device. This information is called the plug
- and play (pnp) details by some buses. This information is a series of
- key=value pairs. The string must be formatted as a space-separated list of
- key=value pairs. Names may only contain alphanumeric characters, underscores
- ('_') and hyphens ('-'). Values can contain any non-whitespace characters.
- Values containing whitespace can be quoted with double quotes ('&quot;').
- Double quotes and backslashes in quoted values can be escaped with
- backslashes ('&#x00B4;).</p>
-<p class="Pp">The pnpinfo is defined as a series of characteristics of the
- <code class="Dv">child</code> device that are independent of which drivers
- are attached, but are used to allow drivers to claim a device. Typically,
- plug and play information encodes who made the device, what the model number
- is, and some generic details about the device. By convention, only the
- generic information about the device that's used by drivers on that bus to
- decide on accepting the device is reported. Other configuration information
- (such as the cache burst size) needed for the operation of the device, but
- that doesn't distinguish it broadly from other devices is not reported.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 22, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html b/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html
deleted file mode 100644
index c14f7f36..00000000
--- a/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CONFIG_INTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CONFIG_INTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_CONFIG_INTR</code>,
- <code class="Nm">bus_config_intr</code> &#x2014; <span class="Nd">configure
- interrupt polarity and trigger mode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_CONFIG_INTR</code>(<var class="Fa">device_t bus</var>,
- <var class="Fa">device_t dev</var>, <var class="Fa">int irq</var>,
- <var class="Fa">enum intr_trigger trig</var>, <var class="Fa">enum
- intr_polarity pol</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_config_intr</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">int irq</var>, <var class="Fa">enum intr_trigger trig</var>,
- <var class="Fa">enum intr_polarity pol</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_CONFIG_INTR"><code class="Fn" id="BUS_CONFIG_INTR">BUS_CONFIG_INTR</code></a>()
- method allows bus or device drivers to provide interrupt polarity and
- trigger mode to parent buses. This typically bubbles all the way up to the
- root bus (e.g. nexus) where the necessary actions are taken to actually
- program the hardware. Since the <code class="Fn">BUS_CONFIG_INTR</code>()
- method takes an interrupt number, it is assumed but not necessarily required
- that it is called prior to <a class="Xr">BUS_SETUP_INTR(9)</a>.</p>
-<p class="Pp" id="bus_config_intr">The
- <a class="permalink" href="#bus_config_intr"><code class="Fn">bus_config_intr</code></a>()
- function is a simple wrapper around
- <code class="Fn">BUS_CONFIG_INTR</code>().</p>
-<p class="Pp">The <var class="Fa">trig</var> argument can be one of:</p>
-<dl class="Bl-tag">
- <dt id="INTR_TRIGGER_CONFORM"><a class="permalink" href="#INTR_TRIGGER_CONFORM"><code class="Dv">INTR_TRIGGER_CONFORM</code></a></dt>
- <dd>The interrupt trigger mode is standard for the bus to which the device is
- attached.</dd>
- <dt id="INTR_TRIGGER_EDGE"><a class="permalink" href="#INTR_TRIGGER_EDGE"><code class="Dv">INTR_TRIGGER_EDGE</code></a></dt>
- <dd>The interrupt is edge triggered. This means that the interrupt is raised
- by the rising edge of the signal on the interrupt line. The signal
- typically reverts to the original state so as to cause a spike.</dd>
- <dt id="INTR_TRIGGER_LEVEL"><a class="permalink" href="#INTR_TRIGGER_LEVEL"><code class="Dv">INTR_TRIGGER_LEVEL</code></a></dt>
- <dd>The interrupt is level triggered. This means that the interrupt is raised
- when the signal on the interrupt line transitions and remains unchanged
- after that until the interrupt has been serviced, after which the signal
- transitions back.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">pol</var> argument can be any one of:</p>
-<dl class="Bl-tag">
- <dt id="INTR_POLARITY_CONFORM"><a class="permalink" href="#INTR_POLARITY_CONFORM"><code class="Dv">INTR_POLARITY_CONFORM</code></a></dt>
- <dd>The interrupt polarity is standard for the bus to which the device is
- attached.</dd>
- <dt id="INTR_POLARITY_HIGH"><a class="permalink" href="#INTR_POLARITY_HIGH"><code class="Dv">INTR_POLARITY_HIGH</code></a></dt>
- <dd>The interrupt is activated by a high voltage on the interrupt line.</dd>
- <dt id="INTR_POLARITY_LOW"><a class="permalink" href="#INTR_POLARITY_LOW"><code class="Dv">INTR_POLARITY_LOW</code></a></dt>
- <dd>The interrupt is activated by a low voltage on the interrupt line.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_SETUP_INTR(9)</a>,
- <a class="Xr">BUS_TEARDOWN_INTR(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_CONFIG_INTR</code>() method first
- appeared in <span class="Ux">FreeBSD 5.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Marcel
- Moolenaar</span>
- &lt;<a class="Mt" href="mailto:marcel@xcllnt.net">marcel@xcllnt.net</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html b/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html
deleted file mode 100644
index c5a7e073..00000000
--- a/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_DESCRIBE_INTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_DESCRIBE_INTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_DESCRIBE_INTR</code>,
- <code class="Nm">bus_describe_intr</code> &#x2014;
- <span class="Nd">associate a description with an active interrupt
- handler</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_DESCRIBE_INTR</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">device_t child</var>, <var class="Fa">struct resource
- *irq</var>, <var class="Fa">void *cookie</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_describe_intr</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">struct resource *irq</var>, <var class="Fa">void
- *cookie</var>, <var class="Fa">const char *fmt</var>,
- <var class="Fa">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_DESCRIBE_INTR"><code class="Fn" id="BUS_DESCRIBE_INTR">BUS_DESCRIBE_INTR</code></a>()
- method associates a description with an active interrupt handler. The
- <var class="Fa">cookie</var> parameter must be the value returned by a
- successful call to <a class="Xr">BUS_SETUP_INTR(9)</a> for the interrupt
- <var class="Fa">irq</var>.</p>
-<p class="Pp" id="bus_describe_intr">The
- <a class="permalink" href="#bus_describe_intr"><code class="Fn">bus_describe_intr</code></a>()
- function is a simple wrapper around
- <code class="Fn">BUS_DESCRIBE_INTR</code>(). As a convenience,
- <code class="Fn">bus_describe_intr</code>() allows the caller to use
- <a class="Xr">printf(9)</a> style formatting to build the description string
- using <var class="Fa">fmt</var>.</p>
-<p class="Pp">When an interrupt handler is established by
- <a class="Xr">BUS_SETUP_INTR(9)</a>, the handler is named after the device
- the handler is established for. This name is then used in various places
- such as interrupt statistics displayed by <a class="Xr">systat(1)</a> and
- <a class="Xr">vmstat(8)</a>. For devices that use a single interrupt, the
- device name is sufficiently unique to identify the interrupt handler.
- However, for devices that use multiple interrupts it can be useful to
- distinguish the interrupt handlers. When a description is set for an active
- interrupt handler, a colon followed by the description is appended to the
- device name to form the interrupt handler name.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">systat(1)</a>, <a class="Xr">vmstat(8)</a>,
- <a class="Xr">BUS_SETUP_INTR(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">printf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_DESCRIBE_INTR</code>() method and
- <code class="Fn">bus_describe_intr</code>() functions first appeared in
- <span class="Ux">FreeBSD 8.1</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">It is not currently possible to remove a description from an
- active interrupt handler.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 9, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_GET_CPUS.9 3.html b/static/freebsd/man9/BUS_GET_CPUS.9 3.html
deleted file mode 100644
index 26bb28ba..00000000
--- a/static/freebsd/man9/BUS_GET_CPUS.9 3.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GET_CPUS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GET_CPUS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_GET_CPUS</code>,
- <code class="Nm">bus_get_cpus</code> &#x2014; <span class="Nd">request a set
- of device-specific CPUs</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/cpuset.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_GET_CPUS</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">device_t child</var>, <var class="Fa">enum cpu_sets
- op</var>, <var class="Fa">size_t setsize</var>, <var class="Fa">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_get_cpus</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">enum cpu_sets op</var>, <var class="Fa">size_t
- setsize</var>, <var class="Fa">cpuset_t *cpuset</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_GET_CPUS"><code class="Fn" id="BUS_GET_CPUS">BUS_GET_CPUS</code></a>()
- method queries the parent bus device for a set of device-specific CPUs. The
- <var class="Fa">op</var> argument specifies which set of CPUs to retrieve.
- If successful, the requested set of CPUs are returned in
- <var class="Fa">cpuset</var>. The <var class="Fa">setsize</var> argument
- specifies the size in bytes of the set passed in
- <var class="Fa">cpuset</var>.</p>
-<p class="Pp" id="BUS_GET_CPUS~2"><a class="permalink" href="#BUS_GET_CPUS~2"><code class="Fn">BUS_GET_CPUS</code></a>()
- supports querying different types of CPU sets via the <var class="Fa">op
- argument.</var> Not all set types are supported for every device. If a set
- type is not supported, <code class="Fn">BUS_GET_CPUS</code>() fails with
- <code class="Er">EINVAL</code>. These set types are supported:</p>
-<dl class="Bl-tag">
- <dt id="LOCAL_CPUS"><a class="permalink" href="#LOCAL_CPUS"><code class="Dv">LOCAL_CPUS</code></a></dt>
- <dd>The set of CPUs that are local to the device. If a device is closer to a
- specific memory domain in a non-uniform memory architecture system (NUMA),
- this will return the set of CPUs in that memory domain.</dd>
- <dt id="INTR_CPUS"><a class="permalink" href="#INTR_CPUS"><code class="Dv">INTR_CPUS</code></a></dt>
- <dd>The preferred set of CPUs that this device should use for device
- interrupts. This set type must be supported by all bus drivers.</dd>
-</dl>
-<p class="Pp" id="bus_get_cpus">The
- <a class="permalink" href="#bus_get_cpus"><code class="Fn">bus_get_cpus</code></a>()
- function is a simple wrapper around
- <code class="Fn">BUS_GET_CPUS</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpuset(2)</a>, <a class="Xr">BUS_BIND_INTR(9)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_GET_CPUS</code>() method and
- <code class="Fn">bus_get_cpus</code>() function first appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 1, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html b/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html
deleted file mode 100644
index 0186b0c3..00000000
--- a/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GET_PROPERTY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GET_PROPERTY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_GET_PROPERTY</code> &#x2014;
- <span class="Nd">get child's specific property</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">BUS_GET_PROPERTY</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">void
- *propvalue</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>,
- <var class="Fa" style="white-space: nowrap;">device_property_type_t
- type</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_GET_PROPERTY"><code class="Fn" id="BUS_GET_PROPERTY">BUS_GET_PROPERTY</code></a>()
- method is called from driver code which wants to access a child's specific
- data stored on the bus. A property has a name and an associated value.
- Implementation shall copy to <var class="Fa">propvalue</var> at most
- <var class="Fa">size</var> bytes.</p>
-<p class="Pp" id="BUS_GET_PROPERTY~2"><a class="permalink" href="#BUS_GET_PROPERTY~2"><code class="Fn">BUS_GET_PROPERTY</code></a>()
- supports different property types specified via the
- <var class="Fa">type</var> argument. The <var class="Fa">size</var> is
- guaranteed to be a multiple of the underlying property type. If a type is
- not supported, <code class="Fn">BUS_GET_PROPERTY</code>() shall return
- -1.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">If <var class="Fa">propvalue</var> is NULL or
- <var class="Fa">size</var> is zero, the implementation shall return only the
- size of the property.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The property size if successful, otherwise -1.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>,
- <a class="Xr">device_get_property(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bartlomiej
- Grzesik</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 18, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html b/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html
deleted file mode 100644
index 14ab7284..00000000
--- a/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_HINTED_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_HINTED_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_HINTED_CHILD</code> &#x2014;
- <span class="Nd">notify a bus device about a potential child device
- identified by hints</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_HINTED_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *dname</var>, <var class="Fa" style="white-space: nowrap;">int
- dunit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_HINTED_CHILD"><code class="Fn" id="BUS_HINTED_CHILD">BUS_HINTED_CHILD</code></a>()
- method is invoked by the <a class="Xr">bus_enumerate_hinted_children(9)</a>
- function for each set of named hints whose &#x201C;at&#x201D; hint matches
- the bus device <var class="Fa">dev</var>. Typically, this method should
- determine if the set of hints for the given device name and unit
- sufficiently describe a new device. If so, a new device should be added via
- <a class="Xr">BUS_ADD_CHILD(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>,
- <a class="Xr">bus_enumerate_hinted_children(9)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">BUS_HINTED_CHILD</code>() method first
- appeared in <span class="Ux">FreeBSD 6.2</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_NEW_PASS.9 4.html b/static/freebsd/man9/BUS_NEW_PASS.9 4.html
deleted file mode 100644
index 9868eff6..00000000
--- a/static/freebsd/man9/BUS_NEW_PASS.9 4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_NEW_PASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_NEW_PASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_NEW_PASS</code> &#x2014;
- <span class="Nd">notify a bus that the pass level has been
- changed</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_NEW_PASS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_NEW_PASS"><code class="Fn" id="BUS_NEW_PASS">BUS_NEW_PASS</code></a>()
- method is called on each bus device to rescan the device tree when the pass
- level has been changed. This method is responsible for invoking
- <code class="Nm">BUS_NEW_PASS</code> on child bus devices to propagate the
- rescan to child devices. It is also responsible for reprobing any unattached
- child devices and allowing drivers for the current pass to identify new
- children. A default implementation is provided by
- <a class="Xr">bus_generic_new_pass(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_generic_new_pass(9)</a>,
- <a class="Xr">bus_set_pass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 8, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html b/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html
deleted file mode 100644
index f7c10d60..00000000
--- a/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_PRINT_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_PRINT_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_PRINT_CHILD</code> &#x2014;
- <span class="Nd">print information about a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_PRINT_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_PRINT_CHILD"><code class="Fn" id="BUS_PRINT_CHILD">BUS_PRINT_CHILD</code></a>()
- method is called from system code which prints out a description of a
- device. It should describe the attachment that the child has with the
- parent. For instance the TurboLaser bus prints which node the device is
- attached to. Please see <a class="Xr">bus_generic_print_child(9)</a> for
- more information regarding the proper formatting of the messages printed by
- <code class="Fn">BUS_PRINT_CHILD</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The number of characters output.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 6, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_READ_IVAR.9 4.html b/static/freebsd/man9/BUS_READ_IVAR.9 4.html
deleted file mode 100644
index 85910507..00000000
--- a/static/freebsd/man9/BUS_READ_IVAR.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_READ_IVAR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_READ_IVAR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_READ_IVAR</code>,
- <code class="Nm">BUS_WRITE_IVAR</code> &#x2014; <span class="Nd">manipulate
- bus-specific device instance variables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_READ_IVAR</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>,
- <var class="Fa" style="white-space: nowrap;">uintptr_t *result</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_WRITE_IVAR</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>,
- <var class="Fa" style="white-space: nowrap;">uintptr_t value</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These two methods manage a bus specific set of instance variables
- of a child device. The intention is that each different type of bus defines
- a set of appropriate instance variables (such as ports and irqs for ISA bus
- etc.)</p>
-<p class="Pp">This information could be given to the child device as a struct
- but that makes it hard for a bus to add or remove variables without forcing
- an edit and recompile for all drivers which may not be possible for vendor
- supplied binary drivers.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_RESCAN.9 4.html b/static/freebsd/man9/BUS_RESCAN.9 4.html
deleted file mode 100644
index 473357cb..00000000
--- a/static/freebsd/man9/BUS_RESCAN.9 4.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_RESCAN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_RESCAN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_RESCAN</code> &#x2014;
- <span class="Nd">rescan a bus checking for devices that have been added or
- removed</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">BUS_RESCAN</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_RESCAN"><code class="Fn" id="BUS_RESCAN">BUS_RESCAN</code></a>()
- method is called to request a rescan of the child devices on a bus device.
- The method should add any devices that have been added since the previous
- scan and remove devices that have been removed. This method is not required
- to re-examine existing devices to determine if their properties have
- changed. This method is also not required to propagate the rescan request to
- child devices.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 27, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/BUS_SETUP_INTR.9 3.html b/static/freebsd/man9/BUS_SETUP_INTR.9 3.html
deleted file mode 100644
index f22418fb..00000000
--- a/static/freebsd/man9/BUS_SETUP_INTR.9 3.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_SETUP_INTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_SETUP_INTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">BUS_SETUP_INTR</code>,
- <code class="Nm">bus_setup_intr</code>,
- <code class="Nm">BUS_TEARDOWN_INTR</code>,
- <code class="Nm">bus_teardown_intr</code> &#x2014; <span class="Nd">create,
- attach and teardown an interrupt handler</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_SETUP_INTR</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">device_t child</var>, <var class="Fa">struct resource
- *irq</var>, <var class="Fa">int flags</var>, <var class="Fa">driver_filter_t
- *filter</var>, <var class="Fa">driver_intr_t *ithread</var>,
- <var class="Fa">void *arg</var>, <var class="Fa">void **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_setup_intr</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">struct resource *r</var>, <var class="Fa">int flags</var>,
- <var class="Fa">driver_filter_t filter</var>, <var class="Fa">driver_intr_t
- ithread</var>, <var class="Fa">void *arg</var>, <var class="Fa">void
- **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BUS_TEARDOWN_INTR</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">device_t child</var>, <var class="Fa">struct resource
- *irq</var>, <var class="Fa">void *cookiep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_teardown_intr</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource
- *r</var>, <var class="Fa" style="white-space: nowrap;">void
- *cookiep</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#BUS_SETUP_INTR"><code class="Fn" id="BUS_SETUP_INTR">BUS_SETUP_INTR</code></a>()
- method will create and attach an interrupt handler to an interrupt
- previously allocated by the resource manager's
- <a class="Xr">BUS_ALLOC_RESOURCE(9)</a> method. The
- <var class="Fa">flags</var> are found in
- <code class="In">&lt;<a class="In">sys/bus.h</a>&gt;</code>, and give the
- broad category of interrupt. The <var class="Fa">flags</var> also tell the
- interrupt handlers about certain device driver characteristics.
- <code class="Dv">INTR_EXCL</code> marks the handler as being an exclusive
- handler for this interrupt. <code class="Dv">INTR_MPSAFE</code> tells the
- scheduler that the interrupt handler is well behaved in a preemptive
- environment (``SMP safe''), and does not need to be protected by the ``Giant
- Lock'' mutex. <code class="Dv">INTR_ENTROPY</code> marks the interrupt as
- being a good source of entropy - this may be used by the entropy device
- <span class="Pa">/dev/random</span>.</p>
-<p class="Pp">To define a time-critical handler that will not execute any
- potentially blocking operation, use the <var class="Fa">filter</var>
- argument. See the <a class="Sx" href="#Filter_Routines">Filter Routines</a>
- section below for information on writing a filter. Otherwise, use the
- <var class="Fa">ithread</var> argument. The defined handler will be called
- with the value <var class="Fa">arg</var> as its only argument. See the
- <a class="Sx" href="#ithread_Routines">ithread Routines</a> section below
- for more information on writing an interrupt handler.</p>
-<p class="Pp" id="BUS_SETUP_INTR~2">The <var class="Fa">cookiep</var> argument
- is a pointer to a <var class="Vt">void *</var> that
- <a class="permalink" href="#BUS_SETUP_INTR~2"><code class="Fn">BUS_SETUP_INTR</code></a>()
- will write a cookie for the parent bus' use to if it is successful in
- establishing an interrupt. Driver writers may assume that this cookie will
- be non-zero. The nexus driver will write 0 on failure to
- <var class="Fa">cookiep</var>.</p>
-<p class="Pp" id="BUS_TEARDOWN_INTR">The interrupt handler will be detached by
- <a class="permalink" href="#BUS_TEARDOWN_INTR"><code class="Fn">BUS_TEARDOWN_INTR</code></a>().
- The cookie needs to be passed to <code class="Fn">BUS_TEARDOWN_INTR</code>()
- in order to tear down the correct interrupt handler. Once
- <code class="Fn">BUS_TEARDOWN_INTR</code>() returns, it is guaranteed that
- the interrupt function is not active and will no longer be called.</p>
-<p class="Pp">Mutexes are not allowed to be held across calls to these
- functions.</p>
-<section class="Ss">
-<h2 class="Ss" id="Filter_Routines"><a class="permalink" href="#Filter_Routines">Filter
- Routines</a></h2>
-<p class="Pp">A filter runs in primary interrupt context. In this context,
- normal mutexes cannot be used. Only the spin lock version of these can be
- used (specified by passing <code class="Dv">MTX_SPIN</code> to
- <a class="permalink" href="#mtx_init"><code class="Fn" id="mtx_init">mtx_init</code></a>()
- when initializing the mutex). <a class="Xr">wakeup(9)</a> and similar
- routines can be called. Atomic operations from
- <span class="Pa">machine/atomic</span> may be used. Reads and writes to
- hardware through <a class="Xr">bus_space(9)</a> may be used. PCI
- configuration registers may be read and written. All other kernel interfaces
- cannot be used.</p>
-<p class="Pp">In this restricted environment, care must be taken to account for
- all races. A careful analysis of races should be done as well. It is
- generally cheaper to take an extra interrupt, for example, than to protect
- variables with spinlocks. Read, modify, write cycles of hardware registers
- need to be carefully analyzed if other threads are accessing the same
- registers.</p>
-<p class="Pp">Generally, a filter routine will use one of two strategies. The
- first strategy is to simply mask the interrupt in hardware and allow the
- <code class="Dv">ithread</code> routine to read the state from the hardware
- and then reenable interrupts. The <code class="Dv">ithread</code> also
- acknowledges the interrupt before re-enabling the interrupt source in
- hardware. Most PCI hardware can mask its interrupt source.</p>
-<p class="Pp">The second common approach is to use a filter with multiple
- <a class="Xr">taskqueue(9)</a> tasks. In this case, the filter acknowledges
- the interrupts and queues the work to the appropriate taskqueue. Where one
- has to multiplex different kinds of interrupt sources, like a network card's
- transmit and receive paths, this can reduce lock contention and increase
- performance.</p>
-<p class="Pp">You should not <a class="Xr">malloc(9)</a> from inside a filter.
- You may not call anything that uses a normal mutex. Witness may complain
- about these.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ithread_Routines"><a class="permalink" href="#ithread_Routines">ithread
- Routines</a></h2>
-<p class="Pp">You can do whatever you want in an ithread routine, except sleep.
- Care must be taken not to sleep in an ithread. In addition, one should
- minimize lock contention in an ithread routine because contested locks
- ripple over to all other ithread routines on that interrupt.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Sleeping"><a class="permalink" href="#Sleeping">Sleeping</a></h2>
-<p class="Pp">Sleeping is voluntarily giving up control of your thread. All the
- sleep routine found in <a class="Xr">msleep(9)</a> sleep. Waiting for a
- condition variable described in <a class="Xr">condvar(9)</a> is sleeping.
- Calling any function that does any of these things is sleeping.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">random(4)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a>, <a class="Xr">locking(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Jeroen Ruigrok
- van der Werven</span>
- &lt;<a class="Mt" href="mailto:asmodai@FreeBSD.org">asmodai@FreeBSD.org</a>&gt;
- based on the manual pages for <code class="Fn">BUS_CREATE_INTR</code>() and
- <code class="Fn">BUS_CONNECT_INTR</code>() written by <span class="An">Doug
- Rabson</span>
- &lt;<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 3, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/CTASSERT.9 4.html b/static/freebsd/man9/CTASSERT.9 4.html
deleted file mode 100644
index 36b11f67..00000000
--- a/static/freebsd/man9/CTASSERT.9 4.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CTASSERT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CTASSERT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">CTASSERT</code> &#x2014; <span class="Nd">compile
- time assertion macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">CTASSERT</code>(<var class="Fa" style="white-space: nowrap;">expression</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#CTASSERT"><code class="Fn" id="CTASSERT">CTASSERT</code></a>()
- macro is deprecated and the C11 standard
- <a class="permalink" href="#_Static_assert"><code class="Fn" id="_Static_assert">_Static_assert</code></a>()
- should be used instead. The header <var class="Fa">sys/cdefs.h</var> should
- be included to provide compatibility for pre-C11 compilers.</p>
-<p class="Pp" id="CTASSERT~2">The
- <a class="permalink" href="#CTASSERT~2"><code class="Fn">CTASSERT</code></a>()
- macro evaluates <var class="Fa">expression</var> at compile time and causes
- a compiler error if it is false.</p>
-<p class="Pp" id="CTASSERT~3">The
- <a class="permalink" href="#CTASSERT~3"><code class="Fn">CTASSERT</code></a>()
- macro is useful for asserting the size or alignment of important data
- structures and variables during compilation, which would otherwise cause the
- code to fail at run time.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Assert that the size of the <var class="Vt">uuid</var> structure
- is 16 bytes.</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li">CTASSERT(sizeof(struct uuid) ==
- 16);</code></div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">KASSERT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Hiten M.
- Pandya</span>
- &lt;<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 1, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DB_COMMAND.9 3.html b/static/freebsd/man9/DB_COMMAND.9 3.html
deleted file mode 100644
index d4dcfa7d..00000000
--- a/static/freebsd/man9/DB_COMMAND.9 3.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DB_COMMAND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DB_COMMAND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DB_COMMAND</code>,
- <code class="Nm">DB_COMMAND_FLAGS</code>,
- <code class="Nm">DB_SHOW_COMMAND</code>,
- <code class="Nm">DB_SHOW_COMMAND_FLAGS</code>,
- <code class="Nm">DB_SHOW_ALL_COMMAND</code>,
- <code class="Nm">DB_TABLE_COMMAND</code>,
- <code class="Nm">DB_TABLE_COMMAND_FLAGS</code>,
- <code class="Nm">DB_ALIAS</code>, <code class="Nm">DB_ALIAS_FLAGS</code>,
- <code class="Nm">DB_SHOW_ALIAS</code>,
- <code class="Nm">DB_SHOW_ALIAS_FLAGS</code>,
- <code class="Nm">DB_SHOW_ALL_ALIAS</code>,
- <code class="Nm">DB_TABLE_ALIAS</code>,
- <code class="Nm">DB_TABLE_ALIAS_FLAGS</code>
- <code class="Nm">DB_DECLARE_TABLE</code>,
- <code class="Nm">DB_DEFINE_TABLE</code>, &#x2014; <span class="Nd">Extends
- the ddb command set</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">ddb/ddb.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DB_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_ALL_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_TABLE_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
- <var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_TABLE_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
- <var class="Fa" style="white-space: nowrap;">command_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_SHOW_ALL_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_TABLE_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
- <var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
-<p class="Pp"><code class="Fn">DB_TABLE_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
- <var class="Fa" style="white-space: nowrap;">alias_name</var>,
- <var class="Fa" style="white-space: nowrap;">command_function</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">DB_DEFINE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">table</var>);</p>
-<p class="Pp"><code class="Fn">DB_DECLARE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">table</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DB_COMMAND"><code class="Fn" id="DB_COMMAND">DB_COMMAND</code></a>()
- macro adds <var class="Fa">command_name</var> to the list of top-level
- commands. Invoking <var class="Fa">command_name</var> from ddb will call
- <var class="Fa">command_function</var>.</p>
-<p class="Pp" id="DB_SHOW_COMMAND">The
- <a class="permalink" href="#DB_SHOW_COMMAND"><code class="Fn">DB_SHOW_COMMAND</code></a>()
- and
- <a class="permalink" href="#DB_SHOW_ALL_COMMAND"><code class="Fn" id="DB_SHOW_ALL_COMMAND">DB_SHOW_ALL_COMMAND</code></a>()
- macros are roughly equivalent to <code class="Fn">DB_COMMAND</code>() but in
- these cases, <var class="Fa">command_name</var> is a sub-command of the ddb
- <b class="Sy">show</b> command and <b class="Sy">show all</b> command,
- respectively.</p>
-<p class="Pp" id="DB_TABLE_COMMAND">The
- <a class="permalink" href="#DB_TABLE_COMMAND"><code class="Fn">DB_TABLE_COMMAND</code></a>()
- macro is also similar to <code class="Fn">DB_COMMAND</code>() but adds the
- new command as a sub-command of the ddb command
- <var class="Fa">table</var>.</p>
-<p class="Pp" id="DB_ALIAS">The
- <a class="permalink" href="#DB_ALIAS"><code class="Fn">DB_ALIAS</code></a>(),
- <a class="permalink" href="#DB_SHOW_ALIAS"><code class="Fn" id="DB_SHOW_ALIAS">DB_SHOW_ALIAS</code></a>(),
- <a class="permalink" href="#DB_SHOW_ALL_ALIAS"><code class="Fn" id="DB_SHOW_ALL_ALIAS">DB_SHOW_ALL_ALIAS</code></a>(),
- and
- <a class="permalink" href="#DB_TABLE_ALIAS"><code class="Fn" id="DB_TABLE_ALIAS">DB_TABLE_ALIAS</code></a>()
- macros register the existing <var class="Fa">command_function</var> under
- the alternative command name <var class="Fa">alias_name</var>.</p>
-<p class="Pp">The _FLAGS variants of these commands allow the programmer to
- specify a value for the <var class="Fa">flag</var> field of the command
- structure. The possible flag values are defined alongside
- <var class="Ft">struct db_command</var> in
- <code class="In">&lt;<a class="In">ddb/ddb.h</a>&gt;</code>.</p>
-<p class="Pp">The general command syntax:
- <code class="Cm">command</code>[<code class="Li">/</code><var class="Ar">modifier</var>]
- <var class="Ar">address</var>[,<var class="Ar">count</var>], translates into
- the following parameters for <var class="Fa">command_function</var>:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">addr</var></dt>
- <dd>The address passed to the command as an argument.</dd>
- <dt><var class="Fa">have_addr</var></dt>
- <dd>A boolean value that is true if the addr field is valid.</dd>
- <dt><var class="Fa">count</var></dt>
- <dd>The number of quad words starting at offset <var class="Fa">addr</var>
- that the command must process.</dd>
- <dt id="examine"><var class="Fa">modif</var></dt>
- <dd>A pointer to the string of modifiers. That is, a series of symbols used to
- pass some options to the command. For example, the
- <a class="permalink" href="#examine"><b class="Sy">examine</b></a> command
- will display words in decimal form if it is passed the modifier
- &quot;d&quot;.</dd>
-</dl>
-</div>
-<p class="Pp" id="DB_DEFINE_TABLE">The
- <a class="permalink" href="#DB_DEFINE_TABLE"><code class="Fn">DB_DEFINE_TABLE</code></a>()
- macro adds a new command <var class="Fa">name</var> as a sub-command of the
- existing command table <var class="Fa">parent</var>. The new command defines
- a table named <var class="Fa">table</var> which contains sub-commands. New
- commands and aliases can be added to this table by passing
- <var class="Fa">table</var> as the first argument to one of the DB_TABLE_
- macros.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">In your module, the command is declared as:</p>
-<div class="Bd Pp Li">
-<pre>DB_COMMAND(mycmd, my_cmd_func)
-{
- if (have_addr)
- db_printf(&quot;Calling my command with address %p\n&quot;, addr);
-}</pre>
-</div>
-<p class="Pp">An alias for this command is declared as:</p>
-<div class="Bd Pp Li">
-<pre>DB_ALIAS(mycmd2, my_cmd_func);</pre>
-</div>
-<p class="Pp">Then, when in ddb:</p>
-<div class="Bd Pp Li">
-<pre></pre>
-<div class="Bf Sy">
-db&gt; mycmd 0x1000
-Calling my command with address 0x1000
-db&gt; mycmd2 0x2500
-Calling my command with address 0x2500
-db&gt;</div>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ddb(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Guillaume
- Ballet</span>
- &lt;<a class="Mt" href="mailto:gballet@gmail.com">gballet@gmail.com</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 5, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html b/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html
deleted file mode 100644
index f78cd7bd..00000000
--- a/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DECLARE_GEOM_CLASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DECLARE_GEOM_CLASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DECLARE_GEOM_CLASS</code> &#x2014;
- <span class="Nd">GEOM class declaration macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DECLARE_GEOM_CLASS</code>(<var class="Fa" style="white-space: nowrap;">class</var>,
- <var class="Fa" style="white-space: nowrap;">mod_name</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DECLARE_GEOM_CLASS"><code class="Fn" id="DECLARE_GEOM_CLASS">DECLARE_GEOM_CLASS</code></a>()
- macro registers a GEOM class in GEOM. A GEOM class itself implements one
- particular kind of transformation. Typical examples are: MBR disk partition,
- <span class="Ux">BSD</span> disklabel and RAID5 classes.
- <code class="Fn">DECLARE_GEOM_CLASS</code>() can be used both for compiled
- in and loaded as <a class="Xr">kld(4)</a> modules GEOM classes and it is the
- only official way for class registration.</p>
-<p class="Pp" id="DECLARE_GEOM_CLASS~2">The arguments to
- <a class="permalink" href="#DECLARE_GEOM_CLASS~2"><code class="Fn">DECLARE_GEOM_CLASS</code></a>()
- are:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">class</var></dt>
- <dd>The <var class="Vt">g_class</var> structure which describes a GEOM
- class.</dd>
- <dt><var class="Fa">mod_name</var></dt>
- <dd>A kernel module name (not a class name!).</dd>
-</dl>
-</div>
-<p class="Pp">Structure <var class="Vt">g_class</var> contains data describing
- the class. They are:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Vt">const char *</var> <var class="Va">name</var></dt>
- <dd>Class name.</dd>
- <dt><var class="Vt">g_taste_t *</var> <var class="Va">taste</var></dt>
- <dd>Pointer to function used for taste event handling. If it is
- non-<code class="Dv">NULL</code> it is called in three situations:
- <p class="Pp"></p>
- <ul class="Bl-dash Bl-compact">
- <li>On class activation, all existing providers are offered for
- tasting.</li>
- <li>When new provider is created it is offered for tasting.</li>
- <li>After last write access to a provider is closed it is offered for
- retasting (on first write open event &#x201C;spoil&#x201D; was
- sent).</li>
- </ul>
- </dd>
- <dt><var class="Vt">g_config_t *</var> <var class="Va">config</var></dt>
- <dd>This field is not used anymore, its functionality was replaced by the
- <var class="Va">ctlreq</var> field.</dd>
- <dt><var class="Vt">g_ctl_req_t *</var> <var class="Va">ctlreq</var></dt>
- <dd>Pointer to function used for handling events from userland
- applications.</dd>
- <dt><var class="Vt">g_init_t *</var> <var class="Va">init</var></dt>
- <dd>Pointer to function which is called right after class registration.</dd>
- <dt><var class="Vt">g_fini_t *</var> <var class="Va">fini</var></dt>
- <dd>Pointer to function which is called right before class
- deregistration.</dd>
- <dt><var class="Vt">g_ctl_destroy_geom_t *</var>
- <var class="Va">destroy_geom</var></dt>
- <dd>Pointer to a function which is called for every geom on class unload. If
- this field is not set, the class can not be unloaded.</dd>
-</dl>
-</div>
-<p class="Pp">Only a <var class="Fa">name</var> field is required; the rest are
- optional.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">The fields of <var class="Vt">g_class</var> should always be
- initialized using C99-style field naming (see the initialization of
- <var class="Va">example_class</var> below).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Example class declaration.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static struct g_geom *
-g_example_taste(struct g_class *mp, struct g_provider *pp,
- int flags __unused)
-{
- g_topology_assert();
-
- [...]
-}
-
-static void
-g_example_ctlreq(struct gctl_req *req, struct g_class *cp,
- char const *verb)
-{
-
- [...]
-}
-
-static int
-g_example_destroy_geom(struct gctl_req *req, struct g_class *cp,
- struct g_geom *gp)
-{
-
- g_topology_assert();
-
- [...]
-}
-
-static void
-g_example_init(struct g_class *mp)
-{
-
- [...]
-}
-
-static void
-g_example_fini(struct g_class *mp)
-{
-
- [...]
-}
-
-struct g_class example_class = {
- .name = &quot;EXAMPLE&quot;,
- .taste = g_example_taste,
- .ctlreq = g_example_ctlreq,
- .init = g_example_init,
- .fini = g_example_fini,
- .destroy_geom = g_example_destroy_geom
-};
-
-DECLARE_GEOM_CLASS(example_class, g_example);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>, <a class="Xr">g_attach(9)</a>,
- <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>,
- <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 13, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DECLARE_MODULE.9 3.html b/static/freebsd/man9/DECLARE_MODULE.9 3.html
deleted file mode 100644
index f0cd620a..00000000
--- a/static/freebsd/man9/DECLARE_MODULE.9 3.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DECLARE_MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DECLARE_MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DECLARE_MODULE</code> &#x2014;
- <span class="Nd">kernel module declaration macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DECLARE_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">moduledata_t data</var>,
- <var class="Fa" style="white-space: nowrap;">sub</var>,
- <var class="Fa" style="white-space: nowrap;">order</var>);</p>
-<p class="Pp"><code class="Fn">DECLARE_MODULE_TIED</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">moduledata_t data</var>,
- <var class="Fa" style="white-space: nowrap;">sub</var>,
- <var class="Fa" style="white-space: nowrap;">order</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DECLARE_MODULE"><code class="Fn" id="DECLARE_MODULE">DECLARE_MODULE</code></a>()
- macro declares a generic kernel module. It is used to register the module
- with the system, using the <code class="Fn">SYSINIT</code>() macro.
- <code class="Fn">DECLARE_MODULE</code>() is usually used within other
- macros, such as <a class="Xr">DRIVER_MODULE(9)</a>,
- <a class="Xr">DEV_MODULE(9)</a> and <a class="Xr">SYSCALL_MODULE(9)</a>. Of
- course, it can also be called directly, for example in order to implement
- dynamic sysctls.</p>
-<p class="Pp" id="DECLARE_MODULE_TIED">A module declared with
- <a class="permalink" href="#DECLARE_MODULE_TIED"><code class="Fn">DECLARE_MODULE_TIED</code></a>()
- will load only if the running kernel version (as specified by
- <code class="Dv">__FreeBSD_version</code>) is identical to that on which it
- was built. This declaration should be used by modules which depend on
- interfaces beyond the stable kernel KBI (such as ABI emulators or
- hypervisors that rely on internal kernel structures).
- <code class="Fn">DECLARE_MODULE</code>() will behave like
- <code class="Fn">DECLARE_MODULE_TIED</code>() when compiled with modules
- built with the kernel. This allows locks and other synchronization
- primitives to be inlined safely.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt id="SYSINIT"><var class="Fa">name</var></dt>
- <dd>The module name, which will be used in the
- <a class="permalink" href="#SYSINIT"><code class="Fn">SYSINIT</code></a>()
- call to identify the module.</dd>
- <dt><var class="Fa">data</var></dt>
- <dd>A <var class="Vt">moduledata_t</var> structure, which contains two main
- items, the official name of the module name, which will be used in the
- <var class="Vt">module_t</var> structure and a pointer to the event
- handler function of type <var class="Vt">modeventhand_t</var>.</dd>
- <dt><var class="Fa">sub</var></dt>
- <dd>An argument directed to the <code class="Fn">SYSINIT</code>() macro. Valid
- values for this are contained in the <var class="Vt">sysinit_sub_id</var>
- enumeration (see
- <code class="In">&lt;<a class="In">sys/kernel.h</a>&gt;</code>) and
- specify the type of system startup interfaces. The
- <a class="Xr">DRIVER_MODULE(9)</a> macro uses a value of
- <code class="Dv">SI_SUB_DRIVERS</code> here for example, since these
- modules contain a driver for a device. For kernel modules that are loaded
- at runtime, a value of <code class="Dv">SI_SUB_EXEC</code> is common.</dd>
- <dt><var class="Fa">order</var></dt>
- <dd>An argument for <code class="Fn">SYSINIT</code>(). It represents the KLDs
- order of initialization within the subsystem. Valid values are defined in
- the <var class="Vt">sysinit_elem_order</var> enumeration
- (<code class="In">&lt;<a class="In">sys/kernel.h</a>&gt;</code>).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DEV_MODULE(9)</a>,
- <a class="Xr">DRIVER_MODULE(9)</a>, <a class="Xr">module(9)</a>,
- <a class="Xr">SYSCALL_MODULE(9)</a></p>
-<p class="Pp"><span class="Pa">/usr/include/sys/kernel.h</span>,
- <span class="Pa">/usr/share/examples/kld</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;,
- inspired by the KLD Facility Programming Tutorial by <span class="An">Andrew
- Reiter</span>
- &lt;<a class="Mt" href="mailto:arr@watson.org">arr@watson.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 13, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEFINE_IFUNC.9 3.html b/static/freebsd/man9/DEFINE_IFUNC.9 3.html
deleted file mode 100644
index d7bc4b82..00000000
--- a/static/freebsd/man9/DEFINE_IFUNC.9 3.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEFINE_IFUNC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEFINE_IFUNC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEFINE_IFUNC</code> &#x2014;
- <span class="Nd">define a kernel function with an implementation selected at
- run-time</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/ifunc.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DEFINE_IFUNC</code>(<var class="Fa" style="white-space: nowrap;">qual</var>,
- <var class="Fa" style="white-space: nowrap;">ret_type</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">args</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">ifuncs are a linker feature which allows the programmer to define
- functions whose implementation is selected at boot-time or module load-time.
- The <code class="Nm">DEFINE_IFUNC</code> macro can be used to define an
- ifunc. The selection is performed by a resolver function, which returns a
- pointer to the selected function. ifunc resolvers are invoked very early
- during the machine-dependent initialization routine, or at load time for
- dynamically loaded modules. Resolution must occur before the first call to
- an ifunc. ifunc resolution is performed after CPU features are enumerated
- and after the kernel's environment is initialized. The typical use-case for
- an ifunc is a routine whose behavior depends on optional CPU features. For
- example, newer generations of a given CPU architecture may provide an
- instruction to optimize a common operation. To avoid the overhead of testing
- for the CPU feature each time the operation is performed, an ifunc can be
- used to provide two implementations for the operation: one targeting
- platforms with the extra instruction, and one for older platforms.</p>
-<p class="Pp">Because <code class="Nm">DEFINE_IFUNC</code> is a macro that
- defines a dynamically typed function, its usage looks somewhat unusual. The
- <var class="Ar">qual</var> parameter is a list of zero or more C function
- qualifiers to be applied to the ifunc. This parameter is typically empty or
- the <code class="Dv">static</code> qualifier. <var class="Ar">ret_type</var>
- is the return type of the ifunc. <var class="Ar">name</var> is the name of
- the ifunc. <var class="Ar">args</var> is a parenthesized, comma-separated
- list of the parameter types of the function, as they would appear in a C
- function declaration.</p>
-<p class="Pp">The <code class="Nm">DEFINE_IFUNC</code> usage must be followed by
- the resolver function body. The resolver must return a function with return
- type <var class="Ar">ret_type</var> and parameter types
- <var class="Ar">args</var>. The resolver function is defined with the
- &#x2018;<code class="Li">resolver</code>&#x2019; gcc-style function
- attribute, causing the corresponding <a class="Xr">elf(5)</a> function
- symbol to be of type <code class="Dv">STT_GNU_IFUNC</code> instead of
- <code class="Dv">STT_FUNC</code>. The kernel linker invokes the resolver to
- process relocations targeting ifunc calls and PLT entries referencing such
- symbols.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">ifunc resolvers are executed early during boot, before most kernel
- facilities are available. They are effectively limited to checking CPU
- feature flags and tunables.</p>
-<div class="Bd Pp Li">
-<pre>static size_t
-fast_strlen(const char *s __unused)
-{
- size_t len;
-
- /* Fast, but may not be correct in all cases. */
- __asm(&quot;movq $42,%0\n&quot; : &quot;=r&quot; (len));
- return (len);
-}
-
-static size_t
-slow_strlen(const char *s)
-{
- const char *t;
-
- for (t = s; *t != '\0'; t++);
- return (t - s);
-}
-
-DEFINE_IFUNC(, size_t, strlen, (const char *))
-{
- int enabled;
-
- enabled = 1;
- TUNABLE_INT_FETCH(&quot;debug.use_fast_strlen&quot;, &amp;enabled);
- if (enabled &amp;&amp; (cpu_features &amp; CPUID_FAST_STRLEN) != 0)
- return (fast_strlen);
- else
- return (slow_strlen);
-}</pre>
-</div>
-<p class="Pp">This defines a <code class="Fn">strlen</code>() function with an
- optimized implementation for CPUs that advertise support.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">elf(5)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">ifuncs require both toolchain support, to emit function symbols of
- type <code class="Dv">STT_GNU_IFUNC</code>, and kernel linker support, to
- invoke ifunc resolvers during boot or during module load.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 10, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DELAY.9 4.html b/static/freebsd/man9/DELAY.9 4.html
deleted file mode 100644
index 5f6c8921..00000000
--- a/static/freebsd/man9/DELAY.9 4.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DELAY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DELAY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DELAY</code> &#x2014; <span class="Nd">busy loop
- for an interval</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">DELAY</code>(<var class="Fa" style="white-space: nowrap;">int
- delay</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Delay for <var class="Fa">delay</var> microseconds (1/1000000th of
- a second).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pause(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alfred
- Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 20, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEVICE_ATTACH.9 4.html b/static/freebsd/man9/DEVICE_ATTACH.9 4.html
deleted file mode 100644
index 15d2fba7..00000000
--- a/static/freebsd/man9/DEVICE_ATTACH.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_ATTACH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_ATTACH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEVICE_ATTACH</code> &#x2014;
- <span class="Nd">attach a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">DEVICE_ATTACH</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Attach a device to the system after the
- <a class="permalink" href="#DEVICE_PROBE"><code class="Fn" id="DEVICE_PROBE">DEVICE_PROBE</code></a>()
- method has been called and has indicated that the device exists. The
- <a class="permalink" href="#DEVICE_ATTACH"><code class="Fn" id="DEVICE_ATTACH">DEVICE_ATTACH</code></a>()
- method should initialize the hardware and allocate other system resources
- (such as <a class="Xr">devfs(4)</a> entries).</p>
-<p class="Pp">Devices which implement buses should use this method to probe for
- the existence of devices attached to the bus and add them as children. If
- this is combined with the use of <a class="Xr">bus_attach_children(9)</a>
- the child devices will be automatically probed and attached.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devfs(4)</a>,
- <a class="Xr">bus_attach_children(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>,
- <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">DEVICE_SHUTDOWN(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>
- &lt;<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEVICE_DETACH.9 4.html b/static/freebsd/man9/DEVICE_DETACH.9 4.html
deleted file mode 100644
index 8dd091af..00000000
--- a/static/freebsd/man9/DEVICE_DETACH.9 4.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_DETACH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_DETACH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEVICE_DETACH</code> &#x2014;
- <span class="Nd">detach a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">DEVICE_DETACH</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Detach a device. This can be called if the user is replacing the
- driver software or if a device is about to be physically removed from the
- system.</p>
-<p class="Pp">The method should deallocate any system resources allocated during
- the <a class="Xr">DEVICE_ATTACH(9)</a> method and reset the hardware to a
- sane state (i.e., disable interrupts etc.)</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>,
- <a class="Xr">DEVICE_IDENTIFY(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>,
- <a class="Xr">DEVICE_SHUTDOWN(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html b/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html
deleted file mode 100644
index 5134840f..00000000
--- a/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_IDENTIFY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_IDENTIFY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEVICE_IDENTIFY</code> &#x2014;
- <span class="Nd">identify new child devices and register them</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">DEVICE_IDENTIFY</code>(<var class="Fa" style="white-space: nowrap;">driver_t
- *driver</var>, <var class="Fa" style="white-space: nowrap;">device_t
- parent</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The identify method of a device driver is used to add devices that
- cannot be enumerated by the standard method on a bus device. Devices can be
- enumerated in various ways including accessing non-ambiguous device
- registers and parsing firmware tables. Software-only pseudo devices are also
- often enumerated via identify methods.</p>
-<p class="Pp">For each newly identified device, a new device instance should be
- created by invoking the <a class="Xr">BUS_ADD_CHILD(9)</a> method. If the
- identify method is able to discover other properties about the new device,
- those should also be set. For example, device resources should be added to
- the device by calling <a class="Xr">bus_set_resource(9)</a> for each
- resource.</p>
-<p class="Pp">An identify method might be invoked multiple times. If a device
- driver is unloaded and loaded, the identify method will be called a second
- time after being reloaded. As a result, the identify method should avoid
- duplicate devices. Devices added by identify methods typically use a fixed
- device name in which case <a class="Xr">device_find_child(9)</a> can be used
- to detect existing devices.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following pseudo-code shows an example of a function that
- probes for a piece of hardware and registers it and its resource (an I/O
- port) with the parent bus device.</p>
-<div class="Bd Pp Li">
-<pre>void
-foo_identify(driver_t *driver, device_t parent)
-{
- device_t child;
-
- retrieve_device_information;
- if (devices matches one of your supported devices &amp;&amp;
- device_find_child(parent, &quot;foo&quot;, DEVICE_UNIT_ANY) == NULL) {
- child = BUS_ADD_CHILD(parent, 0, &quot;foo&quot;, DEVICE_UNIT_ANY);
- bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1);
- }
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>,
- <a class="Xr">bus_identify_children(9)</a>,
- <a class="Xr">bus_set_resource(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">device_find_child(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEVICE_PROBE.9 3.html b/static/freebsd/man9/DEVICE_PROBE.9 3.html
deleted file mode 100644
index 2c5243ce..00000000
--- a/static/freebsd/man9/DEVICE_PROBE.9 3.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_PROBE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_PROBE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEVICE_PROBE</code> &#x2014;
- <span class="Nd">probe for device existence</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">DEVICE_PROBE</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DEVICE_PROBE"><code class="Fn" id="DEVICE_PROBE">DEVICE_PROBE</code></a>()
- method should probe to see if the device is present. It should return 0 if
- the device exists, <code class="Er">ENXIO</code> if it cannot be found. If
- some other error happens during the probe (such as a memory allocation
- failure), an appropriate error code should be returned. For cases where more
- than one driver matches a device, a priority value can be returned. In this
- case, success codes are values less than or equal to zero with the highest
- value representing the best match. Failure codes are represented by positive
- values and the regular <span class="Ux">UNIX</span> error codes should be
- used for the purpose.</p>
-<p class="Pp">If a driver returns a success code which is less than zero, it
- must not assume that it will be the same driver which is attached to the
- device. In particular, it must not assume that any values stored in the
- softc structure will be available for its attach method and any resources
- allocated during probe must be released and re-allocated if the attach
- method is called. In addition it is an absolute requirement that the probe
- routine have no side effects whatsoever. The probe routine may be called
- more than once before the attach routine is called.</p>
-<p class="Pp">If a success code of zero is returned, the driver can assume that
- it will be the one attached, but must not hold any resources when the probe
- routine returns. A driver may assume that the softc is preserved when it
- returns a success code of zero.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A value equal to or less than zero indicates success, greater than
- zero indicates an error (errno). For values equal to or less than zero: zero
- indicates highest priority, no further probing is done; for a value less
- than zero, the lower the value the lower the priority, e.g. -100 indicates a
- lower priority than -50.</p>
-<p class="Pp">The following values are used by convention to indicate different
- strengths of matching in a probe routine. Except as noted, these are just
- suggested values, and there's nothing magical about them.</p>
-<dl class="Bl-tag">
- <dt>BUS_PROBE_SPECIFIC</dt>
- <dd>The device that cannot be reprobed, and that no possible other driver may
- exist (typically legacy drivers who don't follow all the rules, or special
- needs drivers).</dd>
- <dt>BUS_PROBE_VENDOR</dt>
- <dd>The device is supported by a vendor driver. This is for source or binary
- drivers that are not yet integrated into the
- <span class="Ux">FreeBSD</span> tree. Its use in the base OS is
- prohibited.</dd>
- <dt>BUS_PROBE_DEFAULT</dt>
- <dd>The device is a normal device matching some plug and play ID. This is the
- normal return value for drivers to use. It is intended that nearly all of
- the drivers in the tree should return this value.</dd>
- <dt>BUS_PROBE_LOW_PRIORITY</dt>
- <dd>The driver is a legacy driver, or an otherwise less desirable driver for a
- given plug and play ID. The driver has special requirements like when
- there are two drivers that support overlapping series of hardware devices.
- In this case the one that supports the older part of the line would return
- this value, while the one that supports the newer ones would return
- BUS_PROBE_DEFAULT.</dd>
- <dt>BUS_PROBE_GENERIC</dt>
- <dd>The driver matches the type of device generally. This allows drivers to
- match all serial ports generally, with specialized drivers matching
- particular types of serial ports that need special treatment for some
- reason.</dd>
- <dt>BUS_PROBE_HOOVER</dt>
- <dd>The driver matches all unclaimed devices on a bus. The
- <a class="Xr">ugen(4)</a> device is one example.</dd>
- <dt>BUS_PROBE_NOWILDCARD</dt>
- <dd>The driver expects its parent to tell it which children to manage and no
- probing is really done. The device only matches if its parent bus
- specifically said to use this driver.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>,
- <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>,
- <a class="Xr">DEVICE_SHUTDOWN(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 8, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html b/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html
deleted file mode 100644
index d63b94b0..00000000
--- a/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_SHUTDOWN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_SHUTDOWN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEVICE_SHUTDOWN</code> &#x2014;
- <span class="Nd">called during system shutdown</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">DEVICE_SHUTDOWN</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DEVICE_SHUTDOWN"><code class="Fn" id="DEVICE_SHUTDOWN">DEVICE_SHUTDOWN</code></a>()
- method is called during system shutdown to allow the driver to put the
- hardware into a consistent state for rebooting the computer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>,
- <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>,
- <a class="Xr">DEVICE_PROBE(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 6, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DEV_MODULE.9 4.html b/static/freebsd/man9/DEV_MODULE.9 4.html
deleted file mode 100644
index 5acd33df..00000000
--- a/static/freebsd/man9/DEV_MODULE.9 4.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEV_MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEV_MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEV_MODULE</code> &#x2014;
- <span class="Nd">device driver module declaration macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DEV_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DEV_MODULE"><code class="Fn" id="DEV_MODULE">DEV_MODULE</code></a>()
- macro declares a device driver kernel module. It fills in a
- <var class="Vt">moduledata_t</var> structure and then calls
- <a class="permalink" href="#DECLARE_MODULE"><code class="Fn" id="DECLARE_MODULE">DECLARE_MODULE</code></a>()
- with the correct args, where <var class="Fa">name</var> is the name of the
- module and <var class="Fa">evh</var> (with its argument
- <var class="Fa">arg</var>) is the event handler for the module (refer to
- <a class="Xr">DECLARE_MODULE(9)</a> for more information). The event handler
- is supposed to create the device with
- <a class="permalink" href="#make_dev"><code class="Fn" id="make_dev">make_dev</code></a>()
- on load and to destroy it when it is unloaded using
- <a class="permalink" href="#destroy_dev"><code class="Fn" id="destroy_dev">destroy_dev</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>#include &lt;sys/module.h&gt;
-#include &lt;sys/conf.h&gt;
-
-static struct cdevsw foo_devsw = { ... };
-
-static struct cdev *sdev;
-
-static int
-foo_load(module_t mod, int cmd, void *arg)
-{
- int err = 0;
-
- switch (cmd) {
- case MOD_LOAD:
- sdev = make_dev(&amp;foo_devsw, 0, UID_ROOT, GID_WHEEL, 0600, &quot;foo&quot;);
- break; /* Success*/
-
- case MOD_UNLOAD:
- case MOD_SHUTDOWN:
- destroy_dev(sdev);
- break; /* Success*/
-
- default:
- err = EINVAL;
- break;
- }
-
- return(err);
-}
-
-DEV_MODULE(foo, foo_load, NULL);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>,
- <a class="Xr">destroy_dev(9)</a>, <a class="Xr">make_dev(9)</a>,
- <a class="Xr">module(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 19, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/DRIVER_MODULE.9 3.html b/static/freebsd/man9/DRIVER_MODULE.9 3.html
deleted file mode 100644
index c58d4846..00000000
--- a/static/freebsd/man9/DRIVER_MODULE.9 3.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DRIVER_MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DRIVER_MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DRIVER_MODULE</code>,
- <code class="Nm">DRIVER_MODULE_ORDERED</code>,
- <code class="Nm">EARLY_DRIVER_MODULE</code>,
- <code class="Nm">EARLY_DRIVER_MODULE_ORDERED</code> &#x2014;
- <span class="Nd">kernel driver declaration macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DRIVER_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">busname</var>,
- <var class="Fa" style="white-space: nowrap;">driver_t driver</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-<p class="Pp"><code class="Fn">DRIVER_MODULE_ORDERED</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">busname</var>,
- <var class="Fa" style="white-space: nowrap;">driver_t driver</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int order</var>);</p>
-<p class="Pp"><code class="Fn">EARLY_DRIVER_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">busname</var>,
- <var class="Fa" style="white-space: nowrap;">driver_t driver</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int pass</var>);</p>
-<p class="Pp"><code class="Fn">EARLY_DRIVER_MODULE_ORDERED</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">busname</var>,
- <var class="Fa" style="white-space: nowrap;">driver_t driver</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">enum sysinit_elem_order
- order</var>, <var class="Fa" style="white-space: nowrap;">int
- pass</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#DRIVER_MODULE"><code class="Fn" id="DRIVER_MODULE">DRIVER_MODULE</code></a>()
- macro declares a kernel driver. <code class="Fn">DRIVER_MODULE</code>()
- expands to the real driver declaration, where the phrase
- <var class="Fa">name</var> is used as the naming prefix for the driver and
- its functions. Note that it is supplied as plain text, and not a
- <code class="Li">char</code> or <code class="Li">char *</code>.</p>
-<p class="Pp"><var class="Fa">busname</var> is the parent bus of the driver
- (PCI, ISA, PPBUS and others), e.g.
- &#x2018;<code class="Li">pci</code>&#x2019;,
- &#x2018;<code class="Li">isa</code>&#x2019;, or
- &#x2018;<code class="Li">ppbus</code>&#x2019;.</p>
-<p class="Pp" id="DRIVER_MODULE~2">The identifier used in
- <a class="permalink" href="#DRIVER_MODULE~2"><code class="Fn">DRIVER_MODULE</code></a>()
- can be different from the driver name. Also, the same driver identifier can
- exist on different buses, which is a pretty clean way of making front ends
- for different cards using the same driver on the same or different buses.
- For example, the following is allowed:</p>
-<p class="Pp" id="DRIVER_MODULE~3"><a class="permalink" href="#DRIVER_MODULE~3"><code class="Fn">DRIVER_MODULE</code></a>(<var class="Fa">foo</var>,
- <var class="Fa">isa</var>, <var class="Fa">foo_driver</var>,
- <var class="Fa">NULL</var>, <var class="Fa">NULL</var>);</p>
-<p class="Pp" id="DRIVER_MODULE~4"><a class="permalink" href="#DRIVER_MODULE~4"><code class="Fn">DRIVER_MODULE</code></a>(<var class="Fa">foo</var>,
- <var class="Fa">pci</var>, <var class="Fa">foo_driver</var>,
- <var class="Fa">NULL</var>, <var class="Fa">NULL</var>);</p>
-<p class="Pp" id="DRIVER_MODULE~5"><var class="Fa">driver</var> is the driver of
- type <code class="Li">driver_t</code>, which contains the information about
- the driver and is therefore one of the two most important parts of the call
- to
- <a class="permalink" href="#DRIVER_MODULE~5"><code class="Fn">DRIVER_MODULE</code></a>().</p>
-<p class="Pp">The <var class="Fa">evh</var> argument is the event handler which
- is called when the driver (or module) is loaded or unloaded (see
- <a class="Xr">module(9)</a>).</p>
-<p class="Pp">The <var class="Fa">arg</var> is unused at this time and should be
- a <code class="Dv">NULL</code> pointer.</p>
-<p class="Pp" id="DRIVER_MODULE_ORDERED">The
- <a class="permalink" href="#DRIVER_MODULE_ORDERED"><code class="Fn">DRIVER_MODULE_ORDERED</code></a>()
- macro allows a driver to be registered in a specific order. This can be
- useful if a single kernel module contains multiple drivers that are
- inter-dependent. The <var class="Fa">order</var> argument should be one of
- the <a class="Xr">SYSINIT(9)</a> initialization ordering constants
- (<code class="Dv">SI_ORDER_*</code>). The default order for a driver module
- is <code class="Dv">SI_ORDER_MIDDLE</code>. Typically a module will specify
- an order of <code class="Dv">SI_ORDER_ANY</code> for a single driver to
- ensure it is registered last.</p>
-<p class="Pp" id="EARLY_DRIVER_MODULE">The
- <a class="permalink" href="#EARLY_DRIVER_MODULE"><code class="Fn">EARLY_DRIVER_MODULE</code></a>()
- macro allows a driver to be registered for a specific pass level. The boot
- time probe and attach process makes multiple passes over the device tree.
- Certain critical drivers that provide basic services needed by other devices
- are attached during earlier passes. Most drivers are attached in a final
- general pass. A driver that attaches during an early pass must register for
- a specific pass level (BUS_PASS_*) via the <var class="Fa">pass</var>
- argument. Once a driver is registered it is available to attach to devices
- for all subsequent passes.</p>
-<p class="Pp" id="EARLY_DRIVER_MODULE_ORDERED">The
- <a class="permalink" href="#EARLY_DRIVER_MODULE_ORDERED"><code class="Fn">EARLY_DRIVER_MODULE_ORDERED</code></a>()
- macro allows a driver to be registered both in a specific order and for a
- specific pass level.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a>,
- <a class="Xr">module(9)</a>, <a class="Xr">MODULE_PNP_INFO(9)</a>,
- <a class="Xr">SYSINIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Prior to <span class="Ux">FreeBSD 14.0</span>, these macros
- accepted an additional <var class="Vt">devclass_t</var> argument after
- <var class="Fa">driver</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 19, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/EVENTHANDLER.9 3.html b/static/freebsd/man9/EVENTHANDLER.9 3.html
deleted file mode 100644
index c63fa5bf..00000000
--- a/static/freebsd/man9/EVENTHANDLER.9 3.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EVENTHANDLER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EVENTHANDLER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">EVENTHANDLER</code> &#x2014;
- <span class="Nd">kernel event handling functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/eventhandler.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">type</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">arg</var>,
- <var class="Fa" style="white-space: nowrap;">priority</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_INVOKE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">eventhandler_tag</var>
- <br/>
- <code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">arg</var>,
- <var class="Fa" style="white-space: nowrap;">priority</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">tag</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER_NOWAIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">tag</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_LIST_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_LIST_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><var class="Ft">eventhandler_tag</var>
- <br/>
- <code class="Fn">eventhandler_register</code>(<var class="Fa">struct
- eventhandler_list *list</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">void *func</var>, <var class="Fa">void *arg</var>,
- <var class="Fa">int priority</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">eventhandler_deregister</code>(<var class="Fa">struct
- eventhandler_list *list</var>, <var class="Fa">eventhandler_tag
- tag</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">eventhandler_deregister_nowait</code>(<var class="Fa">struct
- eventhandler_list *list</var>, <var class="Fa">eventhandler_tag
- tag</var>);</p>
-<p class="Pp"><var class="Ft">struct eventhandler_list *</var>
- <br/>
- <code class="Fn">eventhandler_find_list</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">eventhandler_prune_list</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventhandler_list *list</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">EVENTHANDLER</code> mechanism provides a way
- for kernel subsystems to register interest in kernel events and have their
- callback functions invoked when these events occur.</p>
-<p class="Pp">Callback functions are invoked in order of priority. The relative
- priority of each callback among other callbacks associated with an event is
- given by argument <var class="Fa">priority</var>, which is an integer
- ranging from <code class="Dv">EVENTHANDLER_PRI_FIRST</code> (highest
- priority), to <code class="Dv">EVENTHANDLER_PRI_LAST</code> (lowest
- priority). The symbol <code class="Dv">EVENTHANDLER_PRI_ANY</code> may be
- used if the handler does not have a specific priority associated with
- it.</p>
-<p class="Pp" id="EVENTHANDLER_LIST_DEFINE">The normal way to use this subsystem
- is via the macro interface. For events that are high frequency it is
- suggested that you additionally use
- <a class="permalink" href="#EVENTHANDLER_LIST_DEFINE"><code class="Fn">EVENTHANDLER_LIST_DEFINE</code></a>()
- so that the event handlers can be invoked directly using
- <a class="permalink" href="#EVENTHANDLER_DIRECT_INVOKE"><code class="Fn" id="EVENTHANDLER_DIRECT_INVOKE">EVENTHANDLER_DIRECT_INVOKE</code></a>()
- (see below). This saves the invoker from having to do a locked traversal of
- a global list of event handler lists.</p>
-<dl class="Bl-tag">
- <dt id="EVENTHANDLER_DECLARE"><a class="permalink" href="#EVENTHANDLER_DECLARE"><code class="Fn">EVENTHANDLER_DECLARE</code></a>()</dt>
- <dd>This macro declares an event handler named by argument
- <var class="Fa">name</var> with callback functions of type
- <var class="Fa">type</var>.</dd>
- <dt id="EVENTHANDLER_DEFINE"><a class="permalink" href="#EVENTHANDLER_DEFINE"><code class="Fn">EVENTHANDLER_DEFINE</code></a>()</dt>
- <dd>This macro uses <a class="Xr">SYSINIT(9)</a> to register a callback
- function <var class="Fa">func</var> with event handler
- <var class="Fa">name</var>. When invoked, function
- <var class="Fa">func</var> will be invoked with argument
- <var class="Fa">arg</var> as its first parameter along with any additional
- parameters passed in via macro
- <a class="permalink" href="#EVENTHANDLER_INVOKE"><code class="Fn" id="EVENTHANDLER_INVOKE">EVENTHANDLER_INVOKE</code></a>()
- (see below).</dd>
- <dt id="EVENTHANDLER_REGISTER"><a class="permalink" href="#EVENTHANDLER_REGISTER"><code class="Fn">EVENTHANDLER_REGISTER</code></a>()</dt>
- <dd>This macro registers a callback function <var class="Fa">func</var> with
- event handler <var class="Fa">name</var>. When invoked, function
- <var class="Fa">func</var> will be invoked with argument
- <var class="Fa">arg</var> as its first parameter along with any additional
- parameters passed in via macro
- <code class="Fn">EVENTHANDLER_INVOKE</code>() (see below).
- <code class="Fn">EVENTHANDLER_REGISTER</code>() returns a cookie of type
- <var class="Vt">eventhandler_tag</var>.</dd>
- <dt id="EVENTHANDLER_DEREGISTER"><a class="permalink" href="#EVENTHANDLER_DEREGISTER"><code class="Fn">EVENTHANDLER_DEREGISTER</code></a>()</dt>
- <dd>This macro removes a previously registered callback associated with tag
- <var class="Fa">tag</var> from the event handler named by argument
- <var class="Fa">name</var>. It waits until no threads are running handlers
- for this event before returning, making it safe to unload a module
- immediately upon return from this function.</dd>
- <dt id="EVENTHANDLER_DEREGISTER_NOWAIT"><a class="permalink" href="#EVENTHANDLER_DEREGISTER_NOWAIT"><code class="Fn">EVENTHANDLER_DEREGISTER_NOWAIT</code></a>()</dt>
- <dd>This macro removes a previously registered callback associated with tag
- <var class="Fa">tag</var> from the event handler named by argument
- <var class="Fa">name</var>. Upon return, one or more threads could still
- be running the removed function(s), but no new calls will be made. To
- remove a handler function from within that function, use this version of
- deregister, to avoid a deadlock.</dd>
- <dt><code class="Fn">EVENTHANDLER_INVOKE</code>()</dt>
- <dd>This macro is used to invoke all the callbacks associated with event
- handler <var class="Fa">name</var>. This macro is a variadic one.
- Additional arguments to the macro after the <var class="Fa">name</var>
- parameter are passed as the second and subsequent arguments to each
- registered callback function.</dd>
- <dt><code class="Fn">EVENTHANDLER_LIST_DEFINE</code>()</dt>
- <dd>This macro defines a reference to an event handler list named by argument
- <var class="Fa">name</var>. It uses <a class="Xr">SYSINIT(9)</a> to
- initialize the reference and the eventhandler list.</dd>
- <dt id="EVENTHANDLER_LIST_DECLARE"><a class="permalink" href="#EVENTHANDLER_LIST_DECLARE"><code class="Fn">EVENTHANDLER_LIST_DECLARE</code></a>()</dt>
- <dd>This macro declares an event handler list named by argument
- <var class="Fa">name</var>. This is only needed for users of
- <code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>() which are not in the
- same compilation unit of that list's definition.</dd>
- <dt><code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>()</dt>
- <dd>This macro invokes the event handlers registered for the list named by
- argument <var class="Fa">name</var>. This macro can only be used if the
- list was defined with <code class="Fn">EVENTHANDLER_LIST_DEFINE</code>().
- The macro is variadic with the same semantics as
- <code class="Fn">EVENTHANDLER_INVOKE</code>().</dd>
-</dl>
-<p class="Pp">The macros are implemented using the following functions:</p>
-<dl class="Bl-tag">
- <dt id="eventhandler_register"><a class="permalink" href="#eventhandler_register"><code class="Fn">eventhandler_register</code></a>()</dt>
- <dd>The <code class="Fn">eventhandler_register</code>() function is used to
- register a callback with a given event. The arguments expected by this
- function are:
- <dl class="Bl-tag">
- <dt><var class="Fa">list</var></dt>
- <dd>A pointer to an existing event handler list, or
- <code class="Dv">NULL</code>. If <var class="Fa">list</var> is
- <code class="Dv">NULL</code>, the event handler list corresponding to
- argument <var class="Fa">name</var> is used.</dd>
- <dt><var class="Fa">name</var></dt>
- <dd>The name of the event handler list.</dd>
- <dt><var class="Fa">func</var></dt>
- <dd>A pointer to a callback function. Argument <var class="Fa">arg</var>
- is passed to the callback function <var class="Fa">func</var> as its
- first argument when it is invoked.</dd>
- <dt><var class="Fa">priority</var></dt>
- <dd>The relative priority of this callback among all the callbacks
- registered for this event. Valid values are those in the range
- <code class="Dv">EVENTHANDLER_PRI_FIRST</code> to
- <code class="Dv">EVENTHANDLER_PRI_LAST</code>.</dd>
- </dl>
- <p class="Pp" id="eventhandler_register~2">The
- <a class="permalink" href="#eventhandler_register~2"><code class="Fn">eventhandler_register</code></a>()
- function returns a <var class="Fa">tag</var> that can later be used with
- <a class="permalink" href="#eventhandler_deregister"><code class="Fn" id="eventhandler_deregister">eventhandler_deregister</code></a>()
- to remove the particular callback function.</p>
- </dd>
- <dt><code class="Fn">eventhandler_deregister</code>()</dt>
- <dd>The <code class="Fn">eventhandler_deregister</code>() function removes the
- callback associated with tag <var class="Fa">tag</var> from the event
- handler list pointed to by <var class="Fa">list</var>. If
- <var class="Fa">tag</var> is <var class="Va">NULL</var>, all callback
- functions for the event are removed. This function will not return until
- all threads have exited from the removed handler callback function(s).
- This function is not safe to call from inside an event handler
- callback.</dd>
- <dt id="eventhandler_deregister_nowait"><a class="permalink" href="#eventhandler_deregister_nowait"><code class="Fn">eventhandler_deregister_nowait</code></a>()</dt>
- <dd>The <code class="Fn">eventhandler_deregister</code>() function removes the
- callback associated with tag <var class="Fa">tag</var> from the event
- handler list pointed to by <var class="Fa">list</var>. This function is
- safe to call from inside an event handler callback.</dd>
- <dt id="eventhandler_find_list"><a class="permalink" href="#eventhandler_find_list"><code class="Fn">eventhandler_find_list</code></a>()</dt>
- <dd>The <code class="Fn">eventhandler_find_list</code>() function returns a
- pointer to event handler list structure corresponding to event
- <var class="Fa">name</var>.</dd>
- <dt id="eventhandler_prune_list"><a class="permalink" href="#eventhandler_prune_list"><code class="Fn">eventhandler_prune_list</code></a>()</dt>
- <dd>The <code class="Fn">eventhandler_prune_list</code>() function removes all
- deregistered callbacks from the event list
- <var class="Fa">list</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The macro <code class="Fn">EVENTHANDLER_REGISTER</code>() and
- function <code class="Fn">eventhandler_register</code>() return a cookie of
- type <var class="Vt">eventhandler_tag</var>, which may be used in a
- subsequent call to <code class="Fn">EVENTHANDLER_DEREGISTER</code>() or
- <code class="Fn">eventhandler_deregister</code>().</p>
-<p class="Pp">The <code class="Fn">eventhandler_find_list</code>() function
- returns a pointer to an event handler list corresponding to parameter
- <var class="Fa">name</var>, or <code class="Dv">NULL</code> if no such list
- was found.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">EVENTHANDLER</code> facility first appeared
- in <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Joseph
- Koshy</span>
- &lt;<a class="Mt" href="mailto:jkoshy@FreeBSD.org">jkoshy@FreeBSD.org</a>&gt;
- and
- <br/>
- <span class="An">Matt Joras</span>
- &lt;<a class="Mt" href="mailto:mjoras@FreeBSD.org">mjoras@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 31, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/KASSERT.9 3.html b/static/freebsd/man9/KASSERT.9 3.html
deleted file mode 100644
index 8b96b200..00000000
--- a/static/freebsd/man9/KASSERT.9 3.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KASSERT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KASSERT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">KASSERT</code> &#x2014; <span class="Nd">kernel
- expression verification macros</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options INVARIANTS</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">KASSERT</code>(<var class="Fa" style="white-space: nowrap;">expression</var>,
- <var class="Fa" style="white-space: nowrap;">msg</var>);</p>
-<p class="Pp"><code class="Fn">MPASS</code>(<var class="Fa" style="white-space: nowrap;">expression</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Assertions are widely used within the
- <span class="Ux">FreeBSD</span> kernel to verify programmatic assumptions.
- For violations of run-time assumptions and invariants, it is desirable to
- fail as soon and as loudly as possible. Assertions are optional code; for
- non-recoverable error conditions an explicit call to
- <a class="Xr">panic(9)</a> is usually preferred.</p>
-<p class="Pp" id="KASSERT">The
- <a class="permalink" href="#KASSERT"><code class="Fn">KASSERT</code></a>()
- macro tests the given boolean <var class="Fa">expression</var>. If
- <var class="Fa">expression</var> evaluates to <code class="Dv">false</code>,
- and the kernel is compiled with <code class="Cd">options INVARIANTS</code>,
- the <a class="Xr">panic(9)</a> function is called. This terminates the
- running system at the point of the error, possibly dropping into the kernel
- debugger or initiating a kernel core dump. The second argument,
- <var class="Fa">msg</var>, is a <a class="Xr">printf(9)</a> format string
- and its arguments, enclosed in parentheses. The formatted string will become
- the panic string.</p>
-<p class="Pp">In a kernel that is built without <code class="Cd">options
- INVARIANTS</code>, the assertion macros are defined to be no-ops. This
- eliminates the runtime overhead of widespread assertions from release builds
- of the kernel. Therefore, checks which can be performed in a constant amount
- of time can be added as assertions without concern about their performance
- impact. More expensive checks, such as those that output to console, or
- verify the integrity of a chain of objects are generally best hidden behind
- the <code class="Cd">DIAGNOSTIC</code> kernel option.</p>
-<p class="Pp" id="MPASS">The
- <a class="permalink" href="#MPASS"><code class="Fn">MPASS</code></a>() macro
- (read as: &quot;must-pass&quot;) is a convenience wrapper around
- <code class="Fn">KASSERT</code>() that automatically generates a simple
- assertion message including file and line information.</p>
-<section class="Ss">
-<h2 class="Ss" id="Assertion_Guidelines"><a class="permalink" href="#Assertion_Guidelines">Assertion
- Guidelines</a></h2>
-<p class="Pp">When adding new assertions, keep in mind their primary purpose: to
- aid in identifying and debugging of complex error conditions.</p>
-<p class="Pp">The panic messages resulting from assertion failures should be
- useful without the resulting kernel dump; the message may be included in a
- bug report, and should contain the relevant information needed to discern
- how the assertion was violated. This is especially important when the error
- condition is difficult or impossible for the developer to reproduce
- locally.</p>
-<p class="Pp">Therefore, assertions should adhere to the following
- guidelines:</p>
-<ol class="Bl-enum">
- <li>Whenever possible, the value of a runtime variable checked by an assertion
- condition should appear in its message.</li>
- <li>Unrelated conditions must appear in separate assertions.</li>
- <li>Multiple related conditions should be distinguishable (e.g. by value), or
- split into separate assertions.</li>
- <li>When in doubt, print more information, not less.</li>
-</ol>
-<p class="Pp">Combined, this gives greater clarity into the exact cause of an
- assertion panic; see <a class="Sx" href="#EXAMPLES">EXAMPLES</a> below.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A hypothetical <var class="Vt">struct foo</var> object must not
- have its 'active' flag set when calling
- <code class="Fn">foo_dealloc</code>():</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-foo_dealloc(struct foo *fp)
-{
-
- KASSERT((fp-&gt;foo_flags &amp; FOO_ACTIVE) == 0,
- (&quot;%s: fp %p is still active, flags=%x&quot;, __func__, fp,
- fp-&gt;foo_flags));
- ...
-}</pre>
-</div>
-<p class="Pp">This assertion provides the full flag set for the object, as well
- as the memory pointer, which may be used by a debugger to examine the object
- in detail (for example with a 'show foo' command in
- <a class="Xr">ddb(4)</a>).</p>
-<p class="Pp">The assertion</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>MPASS(td == curthread);</pre>
-</div>
-<p class="Pp">located on line 87 of a file named foo.c would generate the
- following panic message:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>panic: Assertion td == curthread failed at foo.c:87</pre>
-</div>
-<p class="Pp">This is a simple condition, and the message provides enough
- information to investigate the failure.</p>
-<p class="Pp">The assertion</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>MPASS(td == curthread &amp;&amp; (sz &gt;= SIZE_MIN &amp;&amp; sz &lt;= SIZE_MAX));</pre>
-</div>
-<p class="Pp" id="NOT">is
- <a class="permalink" href="#NOT"><i class="Em">NOT</i></a> useful enough.
- The message doesn't indicate which part of the assertion was violated, nor
- does it report the value of <code class="Dv">sz</code>, which may be
- critical to understanding
- <a class="permalink" href="#why"><i class="Em" id="why">why</i></a> the
- assertion failed.</p>
-<p class="Pp">According to the guidelines above, this would be correctly
- expressed as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>MPASS(td == curthread);
-KASSERT(sz &gt;= SIZE_MIN &amp;&amp; sz &lt;= SIZE_MAX,
- (&quot;invalid size argument: %u&quot;, sz));</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">MPASS</code> macro first appeared in
- <span class="Ux">BSD/OS</span> and was imported into
- <span class="Ux">FreeBSD 5.0</span>. The name originates as an acronym of
- &quot;multi-processor assert&quot;, but has evolved to mean &quot;must
- pass&quot;, or &quot;must-pass assert&quot;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">panic(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Jonathan M.
- Bresler</span>
- &lt;<a class="Mt" href="mailto:jmb@FreeBSD.org">jmb@FreeBSD.org</a>&gt; and
- <br/>
- <span class="An">Mitchell Horne</span>
- &lt;<a class="Mt" href="mailto:mhorne@FreeBSD.org">mhorne@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 19, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/LOCK_PROFILING.9 3.html b/static/freebsd/man9/LOCK_PROFILING.9 3.html
deleted file mode 100644
index 996a990b..00000000
--- a/static/freebsd/man9/LOCK_PROFILING.9 3.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">LOCK_PROFILING(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">LOCK_PROFILING(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">LOCK_PROFILING</code> &#x2014;
- <span class="Nd">kernel lock profiling support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options LOCK_PROFILING</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> kernel option adds
- support for measuring and reporting lock use and contention statistics.
- These statistics are collated by &#x201C;acquisition point&#x201D;.
- Acquisition points are distinct places in the kernel source code (identified
- by source file name and line number) where a lock is acquired.</p>
-<p class="Pp">For each acquisition point, the following statistics are
- accumulated:</p>
-<ul class="Bl-bullet">
- <li>The longest time the lock was ever continuously held after being acquired
- at this point.</li>
- <li>The total time the lock was held after being acquired at this point.</li>
- <li>The total time that threads have spent waiting to acquire the lock.</li>
- <li>The total number of non-recursive acquisitions.</li>
- <li>The total number of times the lock was already held by another thread when
- this point was reached, requiring a spin or a sleep.</li>
- <li>The total number of times another thread tried to acquire the lock while
- it was held after having been acquired at this point.</li>
-</ul>
-<p class="Pp">In addition, the average hold time and average wait time are
- derived from the total hold time and total wait time respectively and the
- number of acquisitions.</p>
-<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> kernel option also adds
- the following <a class="Xr">sysctl(8)</a> variables to control and monitor
- the profiling code:</p>
-<dl class="Bl-tag">
- <dt id="debug.lock.prof.enable"><var class="Va">debug.lock.prof.enable</var></dt>
- <dd>Enable or disable the lock profiling code. This defaults to 0 (off).</dd>
- <dt id="debug.lock.prof.reset"><var class="Va">debug.lock.prof.reset</var></dt>
- <dd>Reset the current lock profiling buffers.</dd>
- <dt id="debug.lock.prof.stats"><var class="Va">debug.lock.prof.stats</var></dt>
- <dd>The actual profiling statistics in plain text. The columns are as follows,
- from left to right:
- <dl class="Bl-tag">
- <dt id="max"><var class="Va">max</var></dt>
- <dd>The longest continuous hold time in microseconds.</dd>
- <dt id="wait_max"><var class="Va">wait_max</var></dt>
- <dd>The longest continuous wait time in microseconds.</dd>
- <dt id="total"><var class="Va">total</var></dt>
- <dd>The total (accumulated) hold time in microseconds.</dd>
- <dt id="wait_total"><var class="Va">wait_total</var></dt>
- <dd>The total (accumulated) wait time in microseconds.</dd>
- <dt id="count"><var class="Va">count</var></dt>
- <dd>The total number of acquisitions.</dd>
- <dt id="avg"><var class="Va">avg</var></dt>
- <dd>The average hold time in microseconds, derived from the total hold
- time and the number of acquisitions.</dd>
- <dt id="wait_avg"><var class="Va">wait_avg</var></dt>
- <dd>The average wait time in microseconds, derived from the total wait
- time and the number of acquisitions.</dd>
- <dt id="cnt_hold"><var class="Va">cnt_hold</var></dt>
- <dd>The number of times the lock was held and another thread attempted to
- acquire the lock.</dd>
- <dt id="cnt_lock"><var class="Va">cnt_lock</var></dt>
- <dd>The number of times the lock was already held when this point was
- reached.</dd>
- <dt id="name"><var class="Va">name</var></dt>
- <dd>The name of the acquisition point, derived from the source file name
- and line number, followed by the name of the lock in parentheses.</dd>
- </dl>
- </dd>
- <dt id="debug.lock.prof.rejected"><var class="Va">debug.lock.prof.rejected</var></dt>
- <dd>The number of acquisition points that were ignored after the table filled
- up.</dd>
- <dt id="debug.lock.prof.skipspin"><var class="Va">debug.lock.prof.skipspin</var></dt>
- <dd>Disable or enable the lock profiling code for the spin locks. This
- defaults to 0 (do profiling for the spin locks).</dd>
- <dt id="debug.lock.prof.skipcount"><var class="Va">debug.lock.prof.skipcount</var></dt>
- <dd>Do sampling approximately every N lock acquisitions.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">mutex(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Mutex profiling support appeared in <span class="Ux">FreeBSD
- 5.0</span>. Generalized lock profiling support appeared in
- <span class="Ux">FreeBSD 7.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">MUTEX_PROFILING</code> code was written by
- <span class="An">Eivind Eklund</span>
- &lt;<a class="Mt" href="mailto:eivind@FreeBSD.org">eivind@FreeBSD.org</a>&gt;,
- <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt; and
- <span class="An">Robert Watson</span>
- &lt;<a class="Mt" href="mailto:rwatson@FreeBSD.org">rwatson@FreeBSD.org</a>&gt;.
- The <code class="Nm">LOCK_PROFILING</code> code was written by
- <span class="An">Kip Macy</span>
- &lt;<a class="Mt" href="mailto:kmacy@FreeBSD.org">kmacy@FreeBSD.org</a>&gt;.
- This manual page was written by <span class="An">Dag-Erling
- Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> option increases the
- size of <var class="Vt">struct lock_object</var>, so a kernel built with
- that option will not work with modules built without it.</p>
-<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> option also prevents
- inlining of the mutex code, which can result in a fairly severe performance
- penalty. This is, however, not always the case.
- <code class="Dv">LOCK_PROFILING</code> can introduce a substantial
- performance overhead that is easily monitorable using other profiling tools,
- so combining profiling tools with <code class="Dv">LOCK_PROFILING</code> is
- not recommended.</p>
-<p class="Pp">Measurements are made and stored in nanoseconds using
- <a class="Xr">nanotime(9)</a>, (on architectures without a synchronized TSC)
- but are presented in microseconds. This should still be sufficient for the
- locks one would be most interested in profiling (those that are held long
- and/or acquired often).</p>
-<p class="Pp"><code class="Dv">LOCK_PROFILING</code> should generally not be
- used in combination with other debugging options, as the results may be
- strongly affected by interactions between the features. In particular,
- <code class="Dv">LOCK_PROFILING</code> will report higher than normal
- <a class="Xr">uma(9)</a> lock contention when run with
- <code class="Dv">INVARIANTS</code> due to extra locking that occurs when
- <code class="Dv">INVARIANTS</code> is present; likewise, using it in
- combination with <code class="Dv">WITNESS</code> will lead to much higher
- lock hold times and contention in profiling output.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 7, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/MODULE_DEPEND.9 4.html b/static/freebsd/man9/MODULE_DEPEND.9 4.html
deleted file mode 100644
index d6ada94a..00000000
--- a/static/freebsd/man9/MODULE_DEPEND.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MODULE_DEPEND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MODULE_DEPEND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">MODULE_DEPEND</code> &#x2014;
- <span class="Nd">set kernel module dependencies</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MODULE_DEPEND</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">moddepend</var>,
- <var class="Fa" style="white-space: nowrap;">int minversion</var>,
- <var class="Fa" style="white-space: nowrap;">int prefversion</var>,
- <var class="Fa" style="white-space: nowrap;">int maxversion</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#MODULE_DEPEND"><code class="Fn" id="MODULE_DEPEND">MODULE_DEPEND</code></a>()
- macro sets a dependency on another kernel module with name
- <var class="Fa">moddepend</var>, which has registered its version with
- <a class="permalink" href="#MODULE_VERSION"><code class="Fn" id="MODULE_VERSION">MODULE_VERSION</code></a>().</p>
-<p class="Pp" id="MODULE_DEPEND~2">The
- <a class="permalink" href="#MODULE_DEPEND~2"><code class="Fn">MODULE_DEPEND</code></a>()
- macro provides hints to the kernel <a class="Xr">loader(8)</a> and to the
- kernel linker to ensure that the named dependency is loaded prior to the
- existing module. It does not change or dictate the order in which modules
- are initialized at runtime.</p>
-<p class="Pp">Three versions must be specified for
- <var class="Fa">moddepend</var>:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">minversion</var></dt>
- <dd>The minimum version on which the current module can depend.</dd>
- <dt><var class="Fa">maxversion</var></dt>
- <dd>The maximum version on which the current module can depend.</dd>
- <dt><var class="Fa">prefversion</var></dt>
- <dd>The preferred version on which the current module can depend.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>MODULE_DEPEND(foo, bar, 1, 3, 4);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">module(9)</a>,
- <a class="Xr">MODULE_VERSION(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 11, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/MODULE_PNP_INFO.9 4.html b/static/freebsd/man9/MODULE_PNP_INFO.9 4.html
deleted file mode 100644
index c8adacb0..00000000
--- a/static/freebsd/man9/MODULE_PNP_INFO.9 4.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MODULE_PNP_INFO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MODULE_PNP_INFO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">MODULE_PNP_INFO</code> &#x2014;
- <span class="Nd">register plug and play information for device
- matching</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MODULE_PNP_INFO</code>(<var class="Fa">const char
- *descriptor_string</var>, <var class="Fa">bus</var>,
- <var class="Fa">module</var>, <var class="Fa">void *table</var>,
- <var class="Fa">size_t num_entries</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#MODULE_PNP_INFO"><code class="Fn" id="MODULE_PNP_INFO">MODULE_PNP_INFO</code></a>()
- macro registers a <var class="Fa">table</var> of device-identifying data for
- use by <a class="Xr">devmatch(8)</a>. Since it is built off module marking
- macros, it must follow a <a class="Xr">DRIVER_MODULE(9)</a> line.</p>
-<p class="Pp">The macro takes a <var class="Fa">descriptor_string</var> that
- describes the memory layout of table entries. The string is a series of
- members separated by semi-colons. Members are identified by a type and a
- name. They are encoded in the descriptor string by concatenating the type
- with a colon, followed by the name. (The special type
- <var class="Vt">W32</var> represents two members. The first name is encoded
- like any other type. The second name is encoded by appending a forward slash
- and the second name after the first.)</p>
-<p class="Pp">Types are one of the following:</p>
-<dl class="Bl-tag">
- <dt>&#x201C;<var class="Vt">U8</var>&#x201D;</dt>
- <dd><var class="Vt">uint8_t</var> element.</dd>
- <dt>&#x201C;<var class="Vt">V8</var>&#x201D;</dt>
- <dd>Same as <var class="Vt">U8</var>, except that the sentinel value 0xFF
- matches any.</dd>
- <dt>&#x201C;<var class="Vt">G16</var>&#x201D;</dt>
- <dd><var class="Vt">uint16_t</var> element; any value greater than or equal
- matches.</dd>
- <dt>&#x201C;<var class="Vt">L16</var>&#x201D;</dt>
- <dd><var class="Vt">uint16_t</var> element; any value less than or equal
- matches.</dd>
- <dt>&#x201C;<var class="Vt">M16</var>&#x201D;</dt>
- <dd><var class="Vt">uint16_t</var> element; mask of which of the following
- fields to use.</dd>
- <dt>&#x201C;<var class="Vt">U16</var>&#x201D;</dt>
- <dd><var class="Vt">uint16_t</var> element.</dd>
- <dt>&#x201C;<var class="Vt">V16</var>&#x201D;</dt>
- <dd>Same as <var class="Vt">U16</var>, except that the sentinel value 0xFFFF
- matches any.</dd>
- <dt>&#x201C;<var class="Vt">U32</var>&#x201D;</dt>
- <dd><var class="Vt">uint32_t</var> element.</dd>
- <dt>&#x201C;<var class="Vt">V32</var>&#x201D;</dt>
- <dd>Same as <var class="Vt">U32</var>, except that the sentinel value
- 0xFFFFFFFF matches any.</dd>
- <dt>&#x201C;<var class="Vt">W32</var>&#x201D;</dt>
- <dd>Two <var class="Vt">uint16_t</var> values; the first named member is in
- the least significant word and the second named member is in the most
- significant word.</dd>
- <dt>&#x201C;<var class="Vt">Z</var>&#x201D;</dt>
- <dd>A pointer to a string to match exactly.</dd>
- <dt>&#x201C;<var class="Vt">D</var>&#x201D;</dt>
- <dd>A pointer to a human readable description for the device.</dd>
- <dt>&#x201C;<var class="Vt">P</var>&#x201D;</dt>
- <dd>A pointer that should be ignored.</dd>
- <dt>&#x201C;<var class="Vt">E</var>&#x201D;</dt>
- <dd>EISA PNP Identifier.</dd>
- <dt>&#x201C;<var class="Vt">T</var>&#x201D;</dt>
- <dd>PNP info that is true for the whole table. The driver code checks for
- these condition pragmatically before using this table to match devices.
- This item must come last in the list.</dd>
-</dl>
-<p class="Pp">The pseudo-name &#x201C;#&#x201D; is reserved for fields that
- should be ignored. Any member that does not match the parent device's
- pnpinfo output must be ignored.</p>
-<p class="Pp">The <var class="Fa">bus</var> parameter is an unquoted word naming
- the parent bus of the driver. For example, &#x201C;pci&#x201D;.</p>
-<p class="Pp">The <var class="Fa">module</var> parameter is also an unquoted
- word. It must be unique to the driver. Usually the driver's name is
- used.</p>
-<p class="Pp">The <var class="Fa">table</var> parameter points to the device
- matching data with entries matching the
- <var class="Fa">descriptor_string</var>.</p>
-<p class="Pp">The <var class="Fa">num_entries</var> parameter is the number of
- entries in the table, i.e.,
- &#x2018;<code class="Li">nitems(table)</code>&#x2019;. Note that only valid
- entries should be included. If the table contains trailing zero or bogus
- values, they should not be included in
- <var class="Fa">num_entries</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<dl class="Bl-tag">
- <dt id="Example"><a class="permalink" href="#Example"><b class="Sy">Example
- 1:</b></a> <span class="No">Using W32 for vendor/device pair</span></dt>
- <dd>
- <p class="Pp">The following example shows usage of <var class="Vt">W32</var>
- type when vendor/device values are combined into single
- <var class="Vt">uint32_t</var> value:</p>
- <div class="Bd Pp Li">
- <pre>#include &lt;sys/param.h&gt;
-#include &lt;sys/module.h&gt;
-
-static struct my_pciids {
- uint32_t devid;
- const char *desc;
-} my_ids[] = {
- { 0x12345678, &quot;Foo bar&quot; },
- { 0x9abcdef0, &quot;Baz fizz&quot; },
-};
-
-MODULE_PNP_INFO(&quot;W32:vendor/device;D:#&quot;, pci, my_driver, my_ids,
- nitems(my_ids));</pre>
- </div>
- </dd>
- <dt id="Example~2"><a class="permalink" href="#Example~2"><b class="Sy">Example
- 2:</b></a> <span class="No">Using T for common vendor value</span></dt>
- <dd>
- <p class="Pp">The following example shows usage of <var class="Vt">T</var>
- type when all entries in the table have the same vendor value:</p>
- <div class="Bd Pp Li">
- <pre>#include &lt;sys/param.h&gt;
-#include &lt;sys/module.h&gt;
-
-static struct my_pciids {
- uint16_t device;
- const char *desc;
-} my_ids[] = {
- { 0x9abc, &quot;Foo bar&quot; },
- { 0xdef0, &quot;Baz fizz&quot; },
-};
-
-MODULE_PNP_INFO(&quot;U16:device;D:#;T:vendor=0x1234&quot;, pci, my_driver,
- my_ids, nitems(my_ids));</pre>
- </div>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The <code class="Nm">MODULE_PNP_INFO</code> macro must follow
- <code class="Dv">DRIVER_MODULE</code> invocations due to limitations in the
- <code class="Dv">linker.hints</code> file format.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devmatch(8)</a>, <a class="Xr">DRIVER_MODULE(9)</a>,
- <a class="Xr">module(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The macro <code class="Nm">MODULE_PNP_INFO</code> appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The PNP framework and <a class="Xr">devmatch(8)</a> utility were
- written by <span class="An">Warner Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/MODULE_VERSION.9 4.html b/static/freebsd/man9/MODULE_VERSION.9 4.html
deleted file mode 100644
index 83840d42..00000000
--- a/static/freebsd/man9/MODULE_VERSION.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MODULE_VERSION(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MODULE_VERSION(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">MODULE_VERSION</code> &#x2014;
- <span class="Nd">set kernel module version</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MODULE_VERSION</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">int version</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#MODULE_VERSION"><code class="Fn" id="MODULE_VERSION">MODULE_VERSION</code></a>()
- macro sets the version of the module called <var class="Fa">name</var>.
- Other kernel modules can then depend on this module (see
- <a class="Xr">MODULE_DEPEND(9)</a>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>MODULE_VERSION(foo, 1);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">module(9)</a>,
- <a class="Xr">MODULE_DEPEND(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 11, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_child.9 4.html b/static/freebsd/man9/OF_child.9 4.html
deleted file mode 100644
index 931a95f6..00000000
--- a/static/freebsd/man9/OF_child.9 4.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_child</code>,
- <code class="Nm">OF_parent</code>, <code class="Nm">OF_peer</code> &#x2014;
- <span class="Nd">navigate device tree</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_child</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_parent</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_peer</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#OF_child"><code class="Fn" id="OF_child">OF_child</code></a>()
- returns the phandle value of the first child of the
- <var class="Fa">node</var>. Zero is returned if there are no child
- nodes.</p>
-<p class="Pp" id="OF_parent"><a class="permalink" href="#OF_parent"><code class="Fn">OF_parent</code></a>()
- returns the phandle for the parent of the <var class="Fa">node</var>. Zero
- is returned if <var class="Fa">node</var> is the root node.</p>
-<p class="Pp" id="OF_peer"><a class="permalink" href="#OF_peer"><code class="Fn">OF_peer</code></a>()
- returns the phandle value of the next sibling of the
- <var class="Fa">node</var>. Zero is returned if there is no sibling
- node.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>phandle_t node, child;
- ...
-for (child = OF_child(node); child != 0; child = OF_peer(child) {
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_finddevice(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 9, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_device_from_xref.9 3.html b/static/freebsd/man9/OF_device_from_xref.9 3.html
deleted file mode 100644
index b6a0ec64..00000000
--- a/static/freebsd/man9/OF_device_from_xref.9 3.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_DEVICE_FROM_XREF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_DEVICE_FROM_XREF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_device_from_xref</code>,
- <code class="Nm">OF_xref_from_device</code>,
- <code class="Nm">OF_device_register_xref</code>
- <code class="Nm">OF_device_unregister_xref</code> &#x2014;
- <span class="Nd">manage mappings between xrefs and devices</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OF_device_register_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- xref</var>, <var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">OF_device_unregister_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- xref</var>, <var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">OF_device_from_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- xref</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_xref_from_device</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">When a device tree node references another node, the driver may
- need to get a device_t instance associated with the referenced node. For
- instance, an Ethernet driver accessing a PHY device. To make this possible,
- the kernel maintains a table that maps effective handles to device_t
- instances.</p>
-<p class="Pp" id="OF_device_register_xref"><a class="permalink" href="#OF_device_register_xref"><code class="Fn">OF_device_register_xref</code></a>()
- adds a map entry from the effective phandle <var class="Fa">xref</var> to
- device <var class="Fa">dev</var>. If a mapping entry for
- <var class="Fa">xref</var> already exists, it is replaced with the new one.
- The function always returns 0.</p>
-<p class="Pp" id="OF_device_unregister_xref"><a class="permalink" href="#OF_device_unregister_xref"><code class="Fn">OF_device_unregister_xref</code></a>()
- removes a map entry from the effective phandle <var class="Fa">xref</var> to
- device <var class="Fa">dev</var>. If a mapping entry for
- <var class="Fa">xref</var> does not exists, it silently returns.</p>
-<p class="Pp" id="OF_device_from_xref"><a class="permalink" href="#OF_device_from_xref"><code class="Fn">OF_device_from_xref</code></a>()
- returns a device_t instance associated with the effective phandle
- <var class="Fa">xref</var>. If no such mapping exists, the function returns
- NULL.</p>
-<p class="Pp" id="OF_xref_from_device"><a class="permalink" href="#OF_xref_from_device"><code class="Fn">OF_xref_from_device</code></a>()
- returns the effective phandle associated with the device
- <var class="Fa">dev</var>. If no such mapping exists, the function returns
- 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre> static int
- acmephy_attach(device_t dev)
- {
- phandle_t node;
-
- /* PHY node is referenced from eth device, register it */
- node = ofw_bus_get_node(dev);
- OF_device_register_xref(OF_xref_from_node(node), dev);
-
- return (0);
- }</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_node_to_xref(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_finddevice.9 4.html b/static/freebsd/man9/OF_finddevice.9 4.html
deleted file mode 100644
index 7bc1d29a..00000000
--- a/static/freebsd/man9/OF_finddevice.9 4.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_FINDDEVICE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_FINDDEVICE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_finddevice</code> &#x2014;
- <span class="Nd">find node in device tree</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_finddevice</code>(<var class="Fa" style="white-space: nowrap;">const
- char *path</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#OF_finddevice"><code class="Fn" id="OF_finddevice">OF_finddevice</code></a>()
- returns the phandle for the node specified by the
- <var class="Fa">path</var>. Returns -1 if the path cannot be found in the
- tree.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre> phandle_t root, i2c;
-
- root = OF_finddevice(&quot;/&quot;);
- i2c = OF_finddevice(&quot;/soc/axi/i2c@a0e0000&quot;);
- if (i2c != -1) {
- ...
- }</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_child(9)</a>, <a class="Xr">OF_parent(9)</a>,
- <a class="Xr">OF_peer(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">The return value should only be checked with equality operators
- (equal to, not equal to) and not relational comparison (less than, greater
- than ). There is a discrepancy between IEEE 1275 standard and
- <span class="Ux">FreeBSD</span>'s internal representation of a phandle: IEEE
- 1275 requires the return value of this function to be -1 if the path is not
- found. But phandle_t is an unsigned type, so it cannot be relationally
- compared with -1 or 0, this comparison is always true or always false.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 9, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_getprop.9 4.html b/static/freebsd/man9/OF_getprop.9 4.html
deleted file mode 100644
index 666a3bce..00000000
--- a/static/freebsd/man9/OF_getprop.9 4.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_GETPROP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_GETPROP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_getprop</code>,
- <code class="Nm">OF_getproplen</code>,
- <code class="Nm">OF_getencprop</code>, <code class="Nm">OF_hasprop</code>,
- <code class="Nm">OF_searchprop</code>,
- <code class="Nm">OF_searchencprop</code>,
- <code class="Nm">OF_getprop_alloc</code>,
- <code class="Nm">OF_getencprop_alloc</code>,
- <code class="Nm">OF_getprop_alloc_multi</code>,
- <code class="Nm">OF_getencprop_alloc_multi</code>,
- <code class="Nm">OF_prop_free</code>, <code class="Nm">OF_nextprop</code>,
- <code class="Nm">OF_setprop</code> &#x2014; <span class="Nd">access
- properties of device tree node</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getproplen</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getencprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *prop</var>, <var class="Fa" style="white-space: nowrap;">pcell_t
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">OF_hasprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_searchprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_searchencprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">pcell_t
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getprop_alloc</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">void
- **buf</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getencprop_alloc</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">pcell_t
- **buf</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getprop_alloc_multi</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">int
- elsz</var>, <var class="Fa" style="white-space: nowrap;">void
- **buf</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_getencprop_alloc_multi</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">int
- elsz</var>, <var class="Fa" style="white-space: nowrap;">pcell_t
- **buf</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">OF_prop_free</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OF_nextprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">char
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OF_setprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *propname</var>, <var class="Fa" style="white-space: nowrap;">const void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Device nodes can have associated properties. Properties consist of
- a name and a value. A name is a human-readable string from 1 to 31
- characters long. A value is an array of zero or more bytes that encode
- certain information. The meaning of that bytes depends on how drivers
- interpret them. Properties can encode byte arrays, text strings, unsigned
- 32-bit values or any combination of these types.</p>
-<p class="Pp">Property with a zero-length value usually represents boolean
- information. If the property is present, it signifies true, otherwise
- false.</p>
-<p class="Pp">A byte array is encoded as a sequence of bytes and represents
- values like MAC addresses.</p>
-<p class="Pp">A text string is a sequence of n printable characters. It is
- encoded as a byte array of length n + 1 bytes with characters represented as
- bytes plus a terminating null character.</p>
-<p class="Pp">Unsigned 32-bit values, also sometimes called cells, are encoded
- as a sequence of 4 bytes in big-endian order.</p>
-<p class="Pp" id="OF_getproplen"><a class="permalink" href="#OF_getproplen"><code class="Fn">OF_getproplen</code></a>()
- returns either the length of the value associated with the property
- <var class="Fa">propname</var> in the node identified by
- <var class="Fa">node</var>, or 0 if the property exists but has no
- associated value. If <var class="Fa">propname</var> does not exist, -1 is
- returned.</p>
-<p class="Pp" id="OF_getprop"><a class="permalink" href="#OF_getprop"><code class="Fn">OF_getprop</code></a>()
- copies a maximum of <var class="Fa">len</var> bytes from the value
- associated with the property <var class="Fa">propname</var> of the device
- node <var class="Fa">node</var> into the memory specified by
- <var class="Fa">buf</var>. Returns the actual size of the value or -1 if the
- property does not exist.</p>
-<p class="Pp" id="OF_getencprop"><a class="permalink" href="#OF_getencprop"><code class="Fn">OF_getencprop</code></a>()
- copies a maximum of <var class="Fa">len</var> bytes into memory specified by
- <var class="Fa">buf</var>, then converts cell values from big-endian to host
- byte order. Returns the actual size of the value in bytes, or -1 if the
- property does not exist. <var class="Fa">len</var> must be a multiple of
- 4.</p>
-<p class="Pp" id="OF_hasprop"><a class="permalink" href="#OF_hasprop"><code class="Fn">OF_hasprop</code></a>()
- returns <code class="Dv">true</code> if the device node
- <var class="Fa">node</var> has a property specified by
- <var class="Fa">propname</var>, and <code class="Dv">false</code> if the
- property does not exist.</p>
-<p class="Pp" id="OF_searchprop"><a class="permalink" href="#OF_searchprop"><code class="Fn">OF_searchprop</code></a>()
- recursively looks for the property specified by
- <var class="Fa">propname</var> starting with the device node
- <var class="Fa">node</var> followed by the parent node and up to the root
- node. If the property is found, the function copies a maximum of
- <var class="Fa">len</var> bytes of the value associated with the property
- into the memory specified by <var class="Fa">buf</var>. Returns the actual
- size in bytes of the value, or -1 if the property does not exist.</p>
-<p class="Pp" id="OF_searchencprop"><a class="permalink" href="#OF_searchencprop"><code class="Fn">OF_searchencprop</code></a>()
- recursively looks for the property specified by
- <var class="Fa">propname</var> starting with the device node
- <var class="Fa">node</var> followed by the parent node and up to the root
- node. If the property is found, the function copies a maximum of
- <var class="Fa">len</var> bytes of the value associated with the property
- into the memory specified by <var class="Fa">buf</var>, then converts cell
- values from big-endian to host byte order. Returns the actual size in bytes
- of the value, or -1 if the property does not exist.</p>
-<p class="Pp" id="OF_getprop_alloc"><a class="permalink" href="#OF_getprop_alloc"><code class="Fn">OF_getprop_alloc</code></a>()
- allocates memory large enough to hold the value associated with the property
- <var class="Fa">propname</var> of the device node <var class="Fa">node</var>
- and copies the value into the newly allocated memory region. Returns the
- actual size of the value and stores the address of the allocated memory in
- <var class="Fa">*buf</var>. If the property has a zero-sized value
- <var class="Fa">*buf</var> is set NULL. Returns -1 if the property does not
- exist or memory allocation failed. Allocated memory should be released when
- no longer required by calling <code class="Fn">OF_prop_free</code>(). The
- function might sleep when allocating memory.</p>
-<p class="Pp" id="OF_getencprop_alloc"><a class="permalink" href="#OF_getencprop_alloc"><code class="Fn">OF_getencprop_alloc</code></a>()
- allocates enough memory to hold the value associated with the property
- <var class="Fa">propname</var> of the device node
- <var class="Fa">node</var>, copies the value into the newly allocated memory
- region, and then converts cell values from big-endian to host byte order.
- The actual size of the value is returned and the address of allocated memory
- is stored in <var class="Fa">*buf</var>. If the property has zero-length
- value, <var class="Fa">*buf</var> is set to NULL. Returns -1 if the property
- does not exist or memory allocation failed or the size of the value is not
- divisible by a cell size (4 bytes). Allocated memory should be released when
- no longer required by calling <code class="Fn">OF_prop_free</code>(). The
- function might sleep when allocating memory.</p>
-<p class="Pp" id="OF_getprop_alloc_multi"><a class="permalink" href="#OF_getprop_alloc_multi"><code class="Fn">OF_getprop_alloc_multi</code></a>()
- allocates memory large enough to hold the value associated with the property
- <var class="Fa">propname</var> of the device node <var class="Fa">node</var>
- and copies the value into the newly allocated memory region. The value is
- expected to be an array of zero or more elements <var class="Fa">elsz</var>
- bytes long. Returns the number of elements in the value and stores the
- address of the allocated memory in <var class="Fa">*buf</var>. If the
- property has a zero-sized value <var class="Fa">*buf</var> is set NULL.
- Returns -1 if the property does not exist or memory allocation failed or the
- size of the value is not divisible by <var class="Fa">elsz</var>. Allocated
- memory should be released when no longer required by calling
- <code class="Fn">OF_prop_free</code>(). The function might sleep when
- allocating memory.</p>
-<p class="Pp" id="OF_getencprop_alloc_multi"><a class="permalink" href="#OF_getencprop_alloc_multi"><code class="Fn">OF_getencprop_alloc_multi</code></a>()
- allocates memory large enough to hold the value associated with the property
- <var class="Fa">propname</var> of the device node <var class="Fa">node</var>
- and copies the value into the newly allocated memory region, and then
- converts cell values from big-endian to host byte order. The value is
- expected to be an array of zero or more elements <var class="Fa">elsz</var>
- bytes long. Returns the number of elements in the value and stores the
- address of the allocated memory in <var class="Fa">*buf</var>. If the
- property has a zero-sized value <var class="Fa">*buf</var> is set NULL.
- Returns -1 if the property does not exist or memory allocation failed or the
- size of the value is not divisible by <var class="Fa">elsz</var>. Allocated
- memory should be released when no longer required by calling
- <code class="Fn">OF_prop_free</code>(). The function might sleep when
- allocating memory.</p>
-<p class="Pp" id="OF_prop_free"><a class="permalink" href="#OF_prop_free"><code class="Fn">OF_prop_free</code></a>()
- releases memory at <var class="Fa">buf</var> that was allocated by
- <code class="Fn">OF_getprop_alloc</code>(),
- <code class="Fn">OF_getencprop_alloc</code>(),
- <code class="Fn">OF_getprop_alloc_multi</code>(),
- <code class="Fn">OF_getencprop_alloc_multi</code>().</p>
-<p class="Pp" id="OF_nextprop"><a class="permalink" href="#OF_nextprop"><code class="Fn">OF_nextprop</code></a>()
- copies a maximum of <var class="Fa">size</var> bytes of the name of the
- property following the <var class="Fa">propname</var> property into
- <var class="Fa">buf</var>. If <var class="Fa">propname</var> is NULL, the
- function copies the name of the first property of the device node
- <var class="Fa">node</var>. <code class="Fn">OF_nextprop</code>() returns -1
- if <var class="Fa">propname</var> is invalid or there is an internal error,
- 0 if there are no more properties after <var class="Fa">propname</var>, or 1
- otherwise.</p>
-<p class="Pp" id="OF_setprop"><a class="permalink" href="#OF_setprop"><code class="Fn">OF_setprop</code></a>()
- sets the value of the property <var class="Fa">propname</var> in the device
- node <var class="Fa">node</var> to the value beginning at the address
- specified by <var class="Fa">buf</var> and running for
- <var class="Fa">len</var> bytes. If the property does not exist, the
- function tries to create it. <code class="Fn">OF_setprop</code>() returns
- the actual size of the new value, or -1 if the property value cannot be
- changed or the new property cannot be created.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre> phandle_t node;
- phandle_t hdmixref, hdminode;
- device_t hdmi;
- uint8_t mac[6];
- char *model;
-
- /*
- * Get a byte array property
- */
- if (OF_getprop(node, &quot;eth,hwaddr&quot;, mac, sizeof(mac)) != sizeof(mac))
- return;
-
- /*
- * Get internal node reference and device associated with it
- */
- if (OF_getencprop(node, &quot;hdmi&quot;, &amp;hdmixref) &lt;= 0)
- return;
- hdmi = OF_device_from_xref(hdmixref);
-
- /*
- * Get string value of model property of HDMI framer node
- */
- hdminode = OF_node_from_xref(hdmixref);
- if (OF_getprop_alloc(hdminode, &quot;model&quot;, (void **)&amp;model) &lt;= 0)
- return;</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_device_from_xref(9)</a>,
- <a class="Xr">OF_node_from_xref(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 16, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_node_from_xref.9 3.html b/static/freebsd/man9/OF_node_from_xref.9 3.html
deleted file mode 100644
index 853a528e..00000000
--- a/static/freebsd/man9/OF_node_from_xref.9 3.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_NODE_FROM_XREF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_NODE_FROM_XREF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_node_from_xref</code>,
- <code class="Nm">OF_xref_from_node</code> &#x2014; <span class="Nd">convert
- between kernel phandle and effective phandle</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_node_from_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- xref</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">OF_xref_from_node</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Some OpenFirmware implementations (FDT, IBM) have a concept of
- effective phandle or xrefs. They are used to cross-reference device tree
- nodes. For instance, a framebuffer controller may refer to a GPIO controller
- and pin that controls the backlight. In this example, the GPIO node would
- have a cell (32-bit integer) property with a reserved name like
- &quot;phandle&quot; or &quot;linux,phandle&quot; whose value uniquely
- identifies the node. The actual name depends on the implementation. The
- framebuffer node would have a property with the name described by device
- bindings (device-specific set of properties). It can be a cell property or a
- combined property with one part of it being a cell. The value of the
- framebuffer node's property would be the same as the value of the GPIO
- &quot;phandle&quot; property so it can be said that the framebuffer node
- refers to the GPIO node. The kernel uses internal logic to assign unique
- identifiers to the device tree nodes, and these values do not match the
- values of &quot;phandle&quot; properties.
- <a class="permalink" href="#OF_node_from_xref"><code class="Fn" id="OF_node_from_xref">OF_node_from_xref</code></a>()
- and <code class="Fn">OF_xref_from_node</code>() are used to perform
- conversion between these two kinds of node identifiers.</p>
-<p class="Pp" id="OF_node_from_xref~2"><a class="permalink" href="#OF_node_from_xref~2"><code class="Fn">OF_node_from_xref</code></a>()
- returns the kernel phandle for the effective phandle
- <var class="Fa">xref</var>. If one cannot be found or the OpenFirmware
- implementation does not support effective phandles, the function returns the
- input value.</p>
-<p class="Pp" id="OF_xref_from_node"><a class="permalink" href="#OF_xref_from_node"><code class="Fn">OF_xref_from_node</code></a>()
- returns the effective phandle for the kernel phandle
- <var class="Fa">node</var>. If one cannot be found or the OpenFirmware
- implementation does not support effective phandles, the function returns the
- input value.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre> phandle_t panelnode, panelxref;
- char *model;
-
- if (OF_getencprop(node, &quot;lcd-panel&quot;, &amp;panelxref) &lt;= 0)
- return;
-
- panelnode = OF_node_from_xref(panelxref);
- if (OF_getprop_alloc(hdminode, &quot;model&quot;, (void **)&amp;model) &lt;= 0)
- return;</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_device_from_xref(9)</a>,
- <a class="Xr">OF_device_register_xref(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 9, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/OF_package_to_path.9 4.html b/static/freebsd/man9/OF_package_to_path.9 4.html
deleted file mode 100644
index b4f4f900..00000000
--- a/static/freebsd/man9/OF_package_to_path.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OF_PACKAGE_TO_PATH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OF_PACKAGE_TO_PATH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">OF_package_to_path</code> &#x2014;
- <span class="Nd">get fully qualified path to a device tree node</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">OF_package_to_path</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">char *buf</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#OF_package_to_path"><code class="Fn" id="OF_package_to_path">OF_package_to_path</code></a>()
- copies at most <var class="Fa">len</var> bytes of the fully qualified path
- to the device tree node <var class="Fa">node</var> into the memory specified
- by <var class="Fa">buf</var>. The function returns the number of bytes
- copied or -1 in case of the error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">OF_finddevice(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>
- &lt;<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 9, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html b/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html
deleted file mode 100644
index b12d73ed..00000000
--- a/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PCI_IOV_ADD_VF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PCI_IOV_ADD_VF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">PCI_IOV_ADD_VF</code> &#x2014;
- <span class="Nd">inform a PF driver that a VF is being created</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/stdarg.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/nv.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/pci/pci_iov.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PCI_IOV_ADD_VF</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- vfnum</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t
- *vf_config</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#PCI_IOV_ADD_VF"><code class="Fn" id="PCI_IOV_ADD_VF">PCI_IOV_ADD_VF</code></a>()
- method is called by the PCI Single-Root I/O Virtualization (SR-IOV)
- infrastructure when it is initializing a new Virtual Function (VF) as a
- child of the given Physical Function (PF) device. This method will not be
- called until a successful call to <a class="Xr">PCI_IOV_INIT(9)</a> has been
- made. It is not guaranteed that this method will be called following a
- successful call to <a class="Xr">PCI_IOV_INIT(9)</a>. If the infrastructure
- encounters a failure to allocate resources following the call to
- <a class="Xr">PCI_IOV_INIT(9)</a>, the VF creation will be aborted and
- <a class="Xr">PCI_IOV_UNINIT(9)</a> will be called immediately without any
- preceding calls to <code class="Nm">PCI_IOV_ADD_VF</code>.</p>
-<p class="Pp">The index of the VF being initialized is passed in the
- <var class="Fa">vfnum</var> argument. VFs are always numbered sequentially
- starting at 0.</p>
-<p class="Pp">If the driver requested device-specific configuration parameters
- via a VF schema in its call to <a class="Xr">pci_iov_attach(9)</a>, those
- parameters will be contained in the <span class="Pa">vf_config</span>
- argument. All configuration parameters that were either set as required
- parameters or that had a default value set in the VF schema are guaranteed
- to be present in <var class="Fa">vf_config</var>. Configuration parameters
- that were neither set as required nor were given a default value are
- optional and may or may not be present in <var class="Fa">vf_config</var>.
- <var class="Fa">vf_config</var> will not contain any configuration
- parameters that were not specified in the VF schema. All configuration
- parameters will have the correct type and will be in the range of valid
- values specified in the schema.</p>
-<p class="Pp" id="PCI_IOV_ADD_VF~2">Note that it is possible for the user to set
- different configuration values on different VF devices that are children of
- the same PF. The PF driver must not cache configuration parameters passed in
- previous calls to
- <a class="permalink" href="#PCI_IOV_ADD_VF~2"><code class="Fn">PCI_IOV_ADD_VF</code></a>()
- for other VFs and apply those parameters to the current VF.</p>
-<p class="Pp">This function will not be called twice for the same
- <var class="Fa">vf_num</var> on the same PF device without
- <a class="Xr">PCI_IOV_UNINIT(9)</a> and <a class="Xr">PCI_IOV_INIT(9)</a>
- first being called, in that order.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">This method returns 0 on success, otherwise an appropriate error
- is returned. If this method returns an error then the current VF device will
- be destroyed but the rest of the VF devices will be created and SR-IOV will
- be enabled on the PF.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">nv(9)</a>, <a class="Xr">pci(9)</a>,
- <a class="Xr">PCI_IOV_INIT(9)</a>, <a class="Xr">pci_iov_schema(9)</a>,
- <a class="Xr">PCI_IOV_UNINIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span>
- &lt;<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 28, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/PCI_IOV_INIT.9 4.html b/static/freebsd/man9/PCI_IOV_INIT.9 4.html
deleted file mode 100644
index 843fb125..00000000
--- a/static/freebsd/man9/PCI_IOV_INIT.9 4.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PCI_IOV_INIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PCI_IOV_INIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">PCI_IOV_INIT</code> &#x2014;
- <span class="Nd">enable SR-IOV on a PF device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/stdarg.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/nv.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/pci/pci_iov.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PCI_IOV_INIT</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- num_vfs</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t
- *pf_config</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#PCI_IOV_INIT"><code class="Fn" id="PCI_IOV_INIT">PCI_IOV_INIT</code></a>()
- method is called by the PCI Single-Root I/O Virtualization (SR-IOV)
- infrastructure when the user requests that SR-IOV be enabled on a Physical
- Function (PF). The number of Virtual Functions (VFs) that will be created is
- passed to this method in the <var class="Fa">num_vfs</var> argument.</p>
-<p class="Pp">If the driver requested device-specific PF configuration
- parameters via a PF schema in its call to
- <a class="Xr">pci_iov_attach(9)</a>, those parameters will be available in
- the <var class="Fa">pf_config</var> argument. All configuration parameters
- that were either set as required parameters or that had a default value set
- in the PF schema are guaranteed to be present in
- <var class="Fa">pf_config</var>. Configuration parameters that were neither
- set as required nor were given a default value are optional and may or may
- not be present in <var class="Fa">pf_config</var>.
- <var class="Fa">pf_config</var> will not contain any configuration
- parameters that were not specified in the PF schema. All configuration
- parameters will have the correct type and are in the range of valid values
- specified in the schema.</p>
-<p class="Pp">If this method returns successfully, then this method will not be
- called again on the same device until after a call to
- <a class="Xr">PCI_IOV_UNINIT(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Returns 0 on success, otherwise an appropriate error is returned.
- If this method returns an error then the SR-IOV configuration will be
- aborted and no VFs will be created.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">nv(9)</a>, <a class="Xr">pci(9)</a>,
- <a class="Xr">PCI_IOV_ADD_VF(9)</a>, <a class="Xr">pci_iov_schema(9)</a>,
- <a class="Xr">PCI_IOV_UNINIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span>
- &lt;<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 28, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html b/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html
deleted file mode 100644
index fbbfea09..00000000
--- a/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PCI_IOV_UNINIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PCI_IOV_UNINIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">PCI_IOV_UNINIT</code> &#x2014;
- <span class="Nd">disable SR-IOV on a PF device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/pci/pci_iov.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">PCI_IOV_UNINIT</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#PCI_IOV_UNINIT"><code class="Fn" id="PCI_IOV_UNINIT">PCI_IOV_UNINIT</code></a>()
- method is called by the PCI Single-Root I/O Virtualization (SR-IOV)
- infrastructure when the user requests that SR-IOV be disabled on a Physical
- Function (PF). When this method is called, the PF driver must release any
- SR-IOV-related resources that it has allocated and disable any
- device-specific SR-IOV configuration in the device.</p>
-<p class="Pp">This method will only be called following a successful call to
- <a class="Xr">PCI_IOV_INIT(9)</a>. It is not guaranteed that
- <a class="Xr">PCI_IOV_ADD_VF(9)</a> will have been called for any Virtual
- Function (VF) after the call to <a class="Xr">PCI_IOV_INIT(9)</a> and before
- the call to <code class="Nm">PCI_IOV_UNINIT</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pci(9)</a>, <a class="Xr">PCI_IOV_ADD_VF(9)</a>,
- <a class="Xr">PCI_IOV_INIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span>
- &lt;<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 28, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/PHOLD.9 4.html b/static/freebsd/man9/PHOLD.9 4.html
deleted file mode 100644
index 1a3a6496..00000000
--- a/static/freebsd/man9/PHOLD.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PHOLD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PHOLD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">PHOLD</code> &#x2014; <span class="Nd">hold a
- process</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">PHOLD</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><code class="Fn">_PHOLD</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><code class="Fn">PRELE</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><code class="Fn">_PRELE</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><code class="Fn">PROC_ASSERT_HELD</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><code class="Fn">PROC_ASSERT_NOT_HELD</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#PHOLD"><code class="Fn" id="PHOLD">PHOLD</code></a>()
- macro increments the hold count of a process, and the
- <a class="permalink" href="#PRELE"><code class="Fn" id="PRELE">PRELE</code></a>()
- macro decrements the hold count of a process.</p>
-<p class="Pp">If a process with a non-zero hold count attempts to exit, it will
- sleep until its hold count has reached zero before the kernel begins
- releasing resources associated with the process. Once a process has started
- exiting, it is invalid to increase its hold count. Thus, callers must not
- attempt to hold a process that has the <code class="Dv">P_WEXIT</code> flag
- set. The VM daemon will not swap out the kernel stack of a thread belonging
- to a process with a non-zero hold count.</p>
-<p class="Pp" id="_PHOLD">The
- <a class="permalink" href="#_PHOLD"><code class="Fn">_PHOLD</code></a>() and
- <a class="permalink" href="#_PRELE"><code class="Fn" id="_PRELE">_PRELE</code></a>()
- macros are identical to <code class="Fn">PHOLD</code>() and
- <code class="Fn">PRELE</code>(), except that they must be called with the
- process lock held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Mark
- Johnston</span>
- &lt;<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 7, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/SDT.9 4.html b/static/freebsd/man9/SDT.9 4.html
deleted file mode 100644
index 0136d64e..00000000
--- a/static/freebsd/man9/SDT.9 4.html
+++ /dev/null
@@ -1,460 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SDT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SDT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">SDT</code> &#x2014; <span class="Nd">a DTrace
- framework for adding statically-defined tracing probes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/queue.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sdt.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SDT_PROVIDER_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROVIDER_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE0</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE1</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE2</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE3</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE4</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE5</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE6</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE7</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>,
- <var class="Fa" style="white-space: nowrap;">arg6</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE0_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE1_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE2_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE3_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">xarg2</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE4_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">xarg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">xarg3</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE5_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">xarg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">xarg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">xarg4</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE6_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">xarg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">xarg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">xarg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>,
- <var class="Fa" style="white-space: nowrap;">xarg5</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE7_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">xarg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">xarg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">xarg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">xarg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">xarg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>,
- <var class="Fa" style="white-space: nowrap;">xarg5</var>,
- <var class="Fa" style="white-space: nowrap;">arg6</var>,
- <var class="Fa" style="white-space: nowrap;">xarg6</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE0</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE1</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE2</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE3</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE4</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE5</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE6</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>);</p>
-<p class="Pp"><code class="Fn">SDT_PROBE7</code>(<var class="Fa" style="white-space: nowrap;">prov</var>,
- <var class="Fa" style="white-space: nowrap;">mod</var>,
- <var class="Fa" style="white-space: nowrap;">func</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">arg0</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>,
- <var class="Fa" style="white-space: nowrap;">arg6</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">SDT</code> macros allow programmers to define
- static trace points in kernel code. These trace points are used by the
- <code class="Nm">SDT</code> framework to create DTrace probes, allowing the
- code to be instrumented using <a class="Xr">dtrace(1)</a>. By default,
- <code class="Nm">SDT</code> trace points are disabled and have no effect on
- the surrounding code. When a DTrace probe corresponding to a given trace
- point is enabled, threads that execute the trace point will call a handler
- and cause the probe to fire. Moreover, trace points can take arguments,
- making it possible to pass data to the DTrace framework when an enabled
- probe fires.</p>
-<p class="Pp">Multiple trace points may correspond to a single DTrace probe,
- allowing programmers to create DTrace probes that correspond to logical
- system events rather than tying probes to specific code execution paths. For
- instance, a DTrace probe corresponding to the arrival of an IP packet into
- the network stack may be defined using two <code class="Nm">SDT</code> trace
- points: one for IPv4 packets and one for IPv6 packets.</p>
-<p class="Pp">In addition to defining DTrace probes, the
- <code class="Nm">SDT</code> macros allow programmers to define new DTrace
- providers, making it possible to namespace logically-related probes. An
- example is FreeBSD's sctp provider, which contains
- <code class="Nm">SDT</code> probes for FreeBSD's <a class="Xr">sctp(4)</a>
- implementation.</p>
-<p class="Pp" id="SDT_PROVIDER_DECLARE">The
- <a class="permalink" href="#SDT_PROVIDER_DECLARE"><code class="Fn">SDT_PROVIDER_DECLARE</code></a>()
- and
- <a class="permalink" href="#SDT_PROVIDER_DEFINE"><code class="Fn" id="SDT_PROVIDER_DEFINE">SDT_PROVIDER_DEFINE</code></a>()
- macros are used respectively to declare and define a DTrace provider named
- <var class="Ar">prov</var> with the <code class="Nm">SDT</code> framework. A
- provider need only be defined once; however, the provider must be declared
- before defining any <code class="Nm">SDT</code> probes belonging to that
- provider.</p>
-<p class="Pp" id="SDT_PROBE_DECLARE">Similarly, the
- <a class="permalink" href="#SDT_PROBE_DECLARE"><code class="Fn">SDT_PROBE_DECLARE</code></a>()
- and <code class="Fn">SDT_PROBE_DEFINE*</code>() macros are used to declare
- and define DTrace probes using the <code class="Nm">SDT</code> framework.
- Once a probe has been defined, trace points for that probe may be added to
- kernel code. DTrace probe identifiers consist of a provider, module,
- function and name, all of which may be specified in the
- <code class="Nm">SDT</code> probe definition. Note that probes should not
- specify a module name: the module name of a probe is used to determine
- whether or not it should be destroyed when a kernel module is unloaded. See
- the <a class="Sx" href="#BUGS">BUGS</a> section. Note in particular that
- probes must not be defined across multiple kernel modules.</p>
-<p class="Pp" id="SDT_*">If &#x2018;<code class="Li">-</code>&#x2019; character
- (dash) is wanted in a probe name, then it should be represented as
- &#x2018;<code class="Li">__</code>&#x2019; (double underscore) in the probe
- <var class="Ar">name</var> parameter passed to various
- <a class="permalink" href="#SDT_*"><code class="Fn">SDT_*</code></a>()
- macros, because of technical reasons (a dash is not valid in C
- identifiers).</p>
-<p class="Pp" id="SDT_PROBE_DEFINE*">The
- <a class="permalink" href="#SDT_PROBE_DEFINE*"><code class="Fn">SDT_PROBE_DEFINE*</code></a>()
- macros also allow programmers to declare the types of the arguments that are
- passed to probes. This is optional; if the argument types are omitted
- (through use of the
- <a class="permalink" href="#SDT_PROBE_DEFINE"><code class="Fn" id="SDT_PROBE_DEFINE">SDT_PROBE_DEFINE</code></a>()
- macro), users wishing to make use of the arguments will have to manually
- cast them to the correct types in their D scripts. It is strongly
- recommended that probe definitions include a declaration of their argument
- types.</p>
-<p class="Pp" id="SDT_PROBE_DEFINE*_XLATE">The
- <a class="permalink" href="#SDT_PROBE_DEFINE*_XLATE"><code class="Fn">SDT_PROBE_DEFINE*_XLATE</code></a>()
- macros are used for probes whose argument types are to be dynamically
- translated to the types specified by the corresponding
- <var class="Ar">xarg</var> arguments. This is mainly useful when porting
- probe definitions from other operating systems. As seen by
- <a class="Xr">dtrace(1)</a>, the arguments of a probe defined using these
- macros will have types which match the <var class="Ar">xarg</var> types in
- the probe definition. However, the arguments passed in at the trace point
- will have types matching the native argument types in the probe definition,
- and thus the native type is dynamically translated to the translated type.
- So long as an appropriate translator is defined in
- <span class="Pa">/usr/lib/dtrace</span>, scripts making use of the probe
- need not concern themselves with the underlying type of a given
- <code class="Nm">SDT</code> probe argument.</p>
-<p class="Pp" id="SDT_PROBE*">The
- <a class="permalink" href="#SDT_PROBE*"><code class="Fn">SDT_PROBE*</code></a>()
- macros are used to create <code class="Nm">SDT</code> trace points. They are
- meant to be added to executable code and can be used to instrument the code
- in which they are called.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PROVIDERS"><a class="permalink" href="#PROVIDERS">PROVIDERS</a></h1>
-<p class="Pp">A number of kernel DTrace providers are available. In general,
- these providers define stable interfaces and should be treated as such:
- existing D scripts may be broken if a probe is renamed or its arguments are
- modified. However, it is often useful to define ad-hoc
- <code class="Nm">SDT</code> probes for debugging a subsystem or driver.
- Similarly, a developer may wish to provide a group of
- <code class="Nm">SDT</code> probes without committing to their future
- stability. Such probes should be added to the
- &#x2018;<code class="Li">sdt</code>&#x2019; provider instead of defining a
- new provider.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The DTrace providers available on the current system can be listed
- with</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>dtrace -l | sed 1d | awk '{print $2}' | sort -u</pre>
-</div>
-<p class="Pp">A detailed list of the probes offered by a given provider can be
- obtained by specifying the provider using the <code class="Fl">-P</code>
- flag. For example, to view the probes and argument types for the
- &#x2018;<code class="Li">sched</code>&#x2019; provider, run</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>dtrace -lv -P sched</pre>
-</div>
-<p class="Pp">The following probe definition will create a DTrace probe called
- &#x2018;<code class="Li">icmp:::receive-unreachable</code>&#x2019;, which
- would hypothetically be triggered when the kernel receives an ICMP packet of
- type Destination Unreachable:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>SDT_PROVIDER_DECLARE(icmp);
-
-SDT_PROBE_DEFINE1(icmp, , , receive__unreachable,
- &quot;struct icmp *&quot;);
-
-</pre>
-</div>
-This particular probe would take a single argument: a pointer to the struct
- containing the ICMP header for the packet. Note that the module name of this
- probe is not specified.
-<p class="Pp">Consider a DTrace probe which fires when the network stack
- receives an IP packet. Such a probe would be defined by multiple
- tracepoints:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>SDT_PROBE_DEFINE3(ip, , , receive, &quot;struct ifnet *&quot;,
- &quot;struct ip *&quot;, &quot;struct ip6_hdr *&quot;);
-
-int
-ip_input(struct mbuf *m)
-{
- struct ip *ip;
- ...
- ip = mtod(m, struct ip *);
- SDT_PROBE3(ip, , , receive, m-&gt;m_pkthdr.rcvif, ip, NULL);
- ...
-}
-
-int
-ip6_input(struct mbuf *m)
-{
- struct ip6_hdr *ip6;
- ...
- ip6 = mtod(m, struct ip6_hdr *);
- SDT_PROBE3(ip, , , receive, m-&gt;m_pkthdr.rcvif, NULL, ip6);
- ...
-}
-
-</pre>
-</div>
-In particular, the probe should fire when the kernel receives either an IPv4
- packet or an IPv6 packet.
-<p class="Pp">Consider the ICMP probe discussed above. We note that its second
- argument is of type <var class="Ar">struct icmp</var>, which is a type
- defined in the FreeBSD kernel to represent the ICMP header of an ICMP
- packet, defined in RFC 792. Linux has a corresponding type,
- <var class="Ar">struct icmphdr</var>, for the same purpose, but its field
- names differ from FreeBSD's <var class="Ar">struct icmp</var>. Similarly,
- illumos defines the <var class="Ar">icmph_t</var> type, again with different
- field names. Even with the
- &#x2018;<code class="Li">icmp:::pkt-receive</code>&#x2019; probes defined in
- all three operating systems, one would still have to write OS-specific
- scripts to extract a given field out of the ICMP header argument.
- Dynamically-translated types solve this problem: one can define an
- OS-independent <a class="Xr">c(7)</a> struct to represent an ICMP header,
- say <var class="Ar">struct icmp_hdr_dt</var>, and define translators from
- each of the three OS-specific types to <var class="Ar">struct
- icmp_hdr_dt</var>, all in the <a class="Xr">dtrace(1)</a> library path. Then
- the FreeBSD probe above can be defined with:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>SDT_PROBE_DEFINE1_XLATE(ip, , , receive, &quot;struct icmp *&quot;,
- &quot;struct icmp_hdr_dt *&quot;);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">dtrace(1)</a>, <a class="Xr">dtrace_io(4)</a>,
- <a class="Xr">dtrace_ip(4)</a>, <a class="Xr">dtrace_proc(4)</a>,
- <a class="Xr">dtrace_sched(4)</a>, <a class="Xr">dtrace_tcp(4)</a>,
- <a class="Xr">dtrace_udp(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">DTrace and the <code class="Nm">SDT</code> framework were
- originally ported to FreeBSD from Solaris by <span class="An">John
- Birrell</span>
- &lt;<a class="Mt" href="mailto:jb@FreeBSD.org">jb@FreeBSD.org</a>&gt;. This
- manual page was written by <span class="An">Mark Johnston</span>
- &lt;<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The <code class="Nm">SDT</code> macros allow the module and
- function names of a probe to be specified as part of a probe definition. The
- DTrace framework uses the module name of probes to determine which probes
- should be destroyed when a kernel module is unloaded, so the module name of
- a probe should match the name of the module in which its defined.
- <code class="Nm">SDT</code> will set the module name properly if it is left
- unspecified in the probe definition; see the
- <a class="Sx" href="#EXAMPLES">EXAMPLES</a> section.</p>
-<p class="Pp">One of the goals of the original <code class="Nm">SDT</code>
- implementation (and by extension, of FreeBSD's port) is that inactive
- <code class="Nm">SDT</code> probes should have no performance impact. This
- is unfortunately not the case; <code class="Nm">SDT</code> trace points will
- add a small but non-zero amount of latency to the code in which they are
- defined. A more sophisticated implementation of the probes will help
- alleviate this problem.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 18, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/SYSCALL_MODULE.9 4.html b/static/freebsd/man9/SYSCALL_MODULE.9 4.html
deleted file mode 100644
index 5bdef86e..00000000
--- a/static/freebsd/man9/SYSCALL_MODULE.9 4.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSCALL_MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSCALL_MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">SYSCALL_MODULE</code> &#x2014;
- <span class="Nd">syscall kernel module declaration macro</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sysent.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SYSCALL_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">int *offset</var>,
- <var class="Fa" style="white-space: nowrap;">struct sysent
- *new_sysent</var>,
- <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#SYSCALL_MODULE"><code class="Fn" id="SYSCALL_MODULE">SYSCALL_MODULE</code></a>()
- macro declares a new syscall. <code class="Fn">SYSCALL_MODULE</code>()
- expands into a kernel module declaration with name
- &#x2018;<code class="Li">sys/<var class="Fa">name</var></code>&#x2019;.</p>
-<p class="Pp">The rest of the arguments expected by this macro are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">offset</var></dt>
- <dd>A pointer to an <var class="Vt">int</var> which saves the offset in
- <var class="Vt">struct sysent</var> where the syscall is allocated. If the
- location pointed to by <var class="Fa">offset</var> holds a non 0 number
- it will be used if possible. If it holds 0 then one will be assigned.</dd>
- <dt><var class="Fa">new_sysent</var></dt>
- <dd>is a pointer to a structure that specifies the function implementing the
- syscall and the number of arguments this function needs (see
- <code class="In">&lt;<a class="In">sys/sysent.h</a>&gt;</code>).</dd>
- <dt><var class="Fa">evh</var></dt>
- <dd>A pointer to the kernel module event handler function with the argument
- <var class="Fa">arg</var>. Please refer to <a class="Xr">module(9)</a> for
- more information.</dd>
- <dt><var class="Fa">arg</var></dt>
- <dd>The argument passed to the callback functions of the
- <var class="Fa">evh</var> event handler when it is called.</dd>
-</dl>
-<p class="Pp" id="SYSCALL_MODULE_HELPER">The syscall number assigned to the
- module can be retrieved using the <a class="Xr">modstat(2)</a> and
- <a class="Xr">modfind(2)</a> system calls. The MACRO
- <a class="permalink" href="#SYSCALL_MODULE_HELPER"><code class="Fn">SYSCALL_MODULE_HELPER</code></a>()
- includes <code class="Fn">SYSCALL_MODULE</code>() and much of its
- boilerplate code.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A minimal example for a syscall module can be found in
- <span class="Pa">/usr/share/examples/kld/syscall/module/syscall.c</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">module(9)</a></p>
-<p class="Pp"><span class="Pa">/usr/share/examples/kld/syscall/module/syscall.c</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 15, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/SYSINIT.9 3.html b/static/freebsd/man9/SYSINIT.9 3.html
deleted file mode 100644
index 11f20b24..00000000
--- a/static/freebsd/man9/SYSINIT.9 3.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSINIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSINIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">SYSINIT</code>, <code class="Nm">SYSUNINIT</code>
- &#x2014; <span class="Nd">a framework for dynamic kernel
- initialization</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">uniquifier</var>,
- <var class="Fa" style="white-space: nowrap;">enum sysinit_sub_id
- subsystem</var>, <var class="Fa" style="white-space: nowrap;">enum
- sysinit_elem_order order</var>,
- <var class="Fa" style="white-space: nowrap;">sysinit_cfunc_t func</var>,
- <var class="Fa" style="white-space: nowrap;">const void *ident</var>);</p>
-<p class="Pp"><code class="Fn">SYSUNINIT</code>(<var class="Fa" style="white-space: nowrap;">uniquifier</var>,
- <var class="Fa" style="white-space: nowrap;">enum sysinit_sub_id
- subsystem</var>, <var class="Fa" style="white-space: nowrap;">enum
- sysinit_elem_order order</var>,
- <var class="Fa" style="white-space: nowrap;">sysinit_cfunc_t func</var>,
- <var class="Fa" style="white-space: nowrap;">const void *ident</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">SYSINIT</code> is a mechanism for scheduling the
- execution of initialization and teardown routines. This is similar to init
- and fini routines with the addition of explicit ordering metadata. It allows
- runtime ordering of subsystem initialization in the kernel as well as kernel
- modules (KLDs).</p>
-<p class="Pp" id="SYSINIT">The
- <a class="permalink" href="#SYSINIT"><code class="Fn">SYSINIT</code></a>()
- macro creates a <var class="Vt">struct sysinit</var> and stores it in a
- startup linker set. The <var class="Vt">struct sysinit</var> type as well as
- the subsystem identifier constants (<code class="Dv">SI_SUB_*</code>) and
- initialization ordering constants (<code class="Dv">SI_ORDER_*</code>) are
- defined in
- <code class="In">&lt;<a class="In">sys/kernel.h</a>&gt;</code>:</p>
-<div class="Bd Pp Li">
-<pre>struct sysinit {
- enum sysinit_sub_id subsystem; /* subsystem identifier*/
- enum sysinit_elem_order order; /* init order within subsystem*/
- SLIST_ENTRY(sysinit) next; /* singly-linked list */
- sysinit_cfunc_t func; /* function */
- const void *udata; /* multiplexer/argument */
-};</pre>
-</div>
-<p class="Pp" id="SYSINIT~2">The
- <a class="permalink" href="#SYSINIT~2"><code class="Fn">SYSINIT</code></a>()
- macro takes a <var class="Fa">uniquifier</var> argument to identify the
- particular function dispatch data, the <var class="Fa">subsystem</var> type
- of startup interface, the subsystem element <var class="Fa">order</var> of
- initialization within the subsystem, the <var class="Fa">func</var> function
- to call, and the data specified in <var class="Fa">ident</var> argument to
- pass the function.</p>
-<p class="Pp" id="SYSUNINIT">The
- <a class="permalink" href="#SYSUNINIT"><code class="Fn">SYSUNINIT</code></a>()
- macro behaves similarly to the <code class="Fn">SYSINIT</code>() macro
- except that it adds the data to a shutdown linker set.</p>
-<p class="Pp">The startup linker set for the kernel is scanned during boot to
- build a sorted list of initialization routines. The initialization routines
- are then executed in the sorted order. The <var class="Fa">subsystem</var>
- is used as the primary key and is sorted in ascending order. The
- <var class="Fa">order</var> is used as the secondary key and is sorted in
- ascending order. The relative order of two routines that have the same
- <var class="Fa">subsystem</var> and <var class="Fa">order</var> is
- undefined.</p>
-<p class="Pp">The startup linker sets for modules that are loaded together with
- the kernel by the boot loader are scanned during the
- <code class="Dv">SI_SUB_KLD</code> subsystem initialization. These modules'
- initialization routines are sorted and merged into the kernel's list of
- startup routines and are executed during boot along with the kernel's
- initialization routines. Note that this has the effect that any
- initialization routines in a kernel module that are scheduled earlier than
- <code class="Dv">SI_SUB_KLD</code> are not executed until after
- <code class="Dv">SI_SUB_KLD</code> during boot.</p>
-<p class="Pp">The startup linker set for a kernel module loaded at runtime via
- <a class="Xr">kldload(2)</a> is scanned, sorted, and executed when the
- module is loaded.</p>
-<p class="Pp" id="not">The shutdown linker set for a kernel module is scanned,
- sorted, and executed when a kernel module is unloaded. The teardown routines
- are sorted in the reverse order of the initialization routines. The teardown
- routines of the kernel and any loaded modules are
- <a class="permalink" href="#not"><b class="Sy">not</b></a> executed during
- shutdown.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example shows the SYSINIT which displays the copyright notice
- during boot:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static void
-print_caddr_t(void *data)
-{
- printf(&quot;%s&quot;, (char *)data);
-}
-SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_caddr_t,
- copyright);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">kld(4)</a>, <a class="Xr">DECLARE_MODULE(9)</a>,
- <a class="Xr">DEV_MODULE(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a>,
- <a class="Xr">MTX_SYSINIT(9)</a>, <a class="Xr">SYSCALL_MODULE(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">SYSINIT</code> framework first appeared in
- <span class="Ux">FreeBSD 2.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">SYSINIT</code> framework was written by
- <span class="An">Terrence Lambert</span>
- &lt;<a class="Mt" href="mailto:terry@FreeBSD.org">terry@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">Hiten
- Pandya</span>
- &lt;<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 1, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS.9 4.html b/static/freebsd/man9/VFS.9 4.html
deleted file mode 100644
index 34e22d39..00000000
--- a/static/freebsd/man9/VFS.9 4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS</code> &#x2014; <span class="Nd">kernel
- interface to file systems</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Calls used to set or query file systems for settings or
- information.</p>
-<p class="Pp">File systems that do not implement a VFS operation should use the
- appropriate <var class="Fa">vfs_std</var> function from
- <span class="Pa">src/sys/kern/vfs_default.c</span> rather than implementing
- empty functions or casting to <var class="Fa">eopnotsupp</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">dtrace_vfs(4)</a>,
- <a class="Xr">VFS_CHECKEXP(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>,
- <a class="Xr">VFS_MOUNT(9)</a>, <a class="Xr">VFS_QUOTACTL(9)</a>,
- <a class="Xr">VFS_SET(9)</a>, <a class="Xr">VFS_STATFS(9)</a>,
- <a class="Xr">VFS_SYNC(9)</a>, <a class="Xr">VFS_UNMOUNT(9)</a>,
- <a class="Xr">VFS_VGET(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_VPTOFH(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_CHECKEXP.9 4.html b/static/freebsd/man9/VFS_CHECKEXP.9 4.html
deleted file mode 100644
index 7c2e87d1..00000000
--- a/static/freebsd/man9/VFS_CHECKEXP.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_CHECKEXP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_CHECKEXP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_CHECKEXP</code> &#x2014;
- <span class="Nd">check if a file system is exported to a client</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_CHECKEXP</code>(<var class="Fa">struct mount *mp</var>,
- <var class="Fa">struct sockaddr *nam</var>, <var class="Fa">uint64_t
- *exflagsp</var>, <var class="Fa">struct ucred **credanonp</var>,
- <var class="Fa">int *numsecflavor</var>, <var class="Fa">int
- *secflavors</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_CHECKEXP"><code class="Fn" id="VFS_CHECKEXP">VFS_CHECKEXP</code></a>()
- macro is used by the NFS server to check if a mount point is exported to a
- client.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point to be checked.</dd>
- <dt><var class="Fa">nam</var></dt>
- <dd>An mbuf containing the network address of the client.</dd>
- <dt><var class="Fa">exflagsp</var></dt>
- <dd>Return parameter for the export flags for this client.</dd>
- <dt><var class="Fa">credanonp</var></dt>
- <dd>Return parameter for the anonymous credentials for this client.</dd>
- <dt><var class="Fa">numsecflavors</var></dt>
- <dd>Return value for the number of security flavors for this client.</dd>
- <dt><var class="Fa">secflavors</var></dt>
- <dd>Must be an array of size MAXSECFLAVORS, in which the security flavors for
- this client are returned.</dd>
-</dl>
-<p class="Pp" id="VFS_CHECKEXP~2">The
- <a class="permalink" href="#VFS_CHECKEXP~2"><code class="Fn">VFS_CHECKEXP</code></a>()
- macro should be called on a file system's mount structure to determine if it
- is exported to a client whose address is contained in
- <var class="Fa">nam</var>.</p>
-<p class="Pp">It is called in the NFS server once a vnode for a file handle has
- been acquired, in order to determine what access the client is allowed on
- the file system the vnode resides in. For NFSv4, it is also called whenever
- the lookup operation crosses a server file system mount point, to update the
- access information.</p>
-<p class="Pp">The operation is file system specific, but is normally handled by
- the default ``vfs_stdcheckexp''.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The export flags, anonymous credentials and security flavors
- specific to the client will be returned in <var class="Fa">*exflagsp</var>,
- <var class="Fa">*credanonp</var>, <var class="Fa">*numsecflavors</var> and
- <var class="Fa">*secflavors</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>,
- <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_VPTOFH(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alfred
- Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 17, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_FHTOVP.9 3.html b/static/freebsd/man9/VFS_FHTOVP.9 3.html
deleted file mode 100644
index bfa3ef89..00000000
--- a/static/freebsd/man9/VFS_FHTOVP.9 3.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_FHTOVP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_FHTOVP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_FHTOVP</code> &#x2014; <span class="Nd">turn
- an NFS filehandle into a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_FHTOVP</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct fid
- *fhp</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_FHTOVP"><code class="Fn" id="VFS_FHTOVP">VFS_FHTOVP</code></a>()
- macro is used by the NFS server to turn an NFS filehandle into a vnode.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The file system.</dd>
- <dt><var class="Fa">fhp</var></dt>
- <dd>The filehandle to convert.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Additional locking flags to pass through to <a class="Xr">vget(9)</a>.
- File systems are allowed to ignore <var class="Ar">flags</var> and use
- <code class="Dv">LK_EXCLUSIVE</code> instead.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>Return parameter for the new locked vnode.</dd>
-</dl>
-<p class="Pp">The contents of the filehandle are defined by the file system and
- are not examined by any other part of the system. It should contain enough
- information to uniquely identify a file within the file system as well as
- noticing when a file has been removed and the file system resources have
- been reused for a new file. For instance, UFS file system stores the inode
- number and inode generation counter in its filehandle.</p>
-<p class="Pp" id="VFS_FHTOVP~2">A call to
- <a class="permalink" href="#VFS_FHTOVP~2"><code class="Fn">VFS_FHTOVP</code></a>()
- should generally be preceded by a call to <a class="Xr">VFS_CHECKEXP(9)</a>
- to check if the file is accessible to the client.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The locked vnode for the file will be returned in
- <var class="Fa">*vpp</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_CHECKEXP(9)</a>,
- <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_VPTOFH(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 19, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_MOUNT.9 4.html b/static/freebsd/man9/VFS_MOUNT.9 4.html
deleted file mode 100644
index 4c126b11..00000000
--- a/static/freebsd/man9/VFS_MOUNT.9 4.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_MOUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_MOUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_MOUNT</code> &#x2014; <span class="Nd">mount
- a file system</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_MOUNT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_MOUNT"><code class="Fn" id="VFS_MOUNT">VFS_MOUNT</code></a>()
- macro mounts a file system into the system's namespace or updates the
- attributes of an already mounted file system.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>Structure representing the file system.</dd>
-</dl>
-<p class="Pp" id="VFS_MOUNT~2">The
- <a class="permalink" href="#VFS_MOUNT~2"><code class="Fn">VFS_MOUNT</code></a>()
- macro is called both to mount new file systems and to change the attributes
- of an existing file system. If the <code class="Dv">MNT_UPDATE</code> flag
- is set in <var class="Fa">mp-&gt;mnt_flag</var> then the file system should
- update its internal state from the value of
- <var class="Fa">mp-&gt;mnt_flag</var>. This can be used, for instance, to
- convert a read-only file system to read-write. It is also used by
- <a class="Xr">mountd(8)</a> to update the NFS export information for the
- file system.</p>
-<p class="Pp">If the <code class="Dv">MNT_UPDATE</code> flag is not specified,
- then this is a newly mounted file system. The file system code should
- allocate and initialize any private data needed to represent the file system
- (it can use the <var class="Fa">mp-&gt;mnt_data</var> field to store this
- information).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_QUOTACTL.9 4.html b/static/freebsd/man9/VFS_QUOTACTL.9 4.html
deleted file mode 100644
index cc166046..00000000
--- a/static/freebsd/man9/VFS_QUOTACTL.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_QUOTACTL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_QUOTACTL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_QUOTACTL</code> &#x2014;
- <span class="Nd">manipulate file system quotas</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_QUOTACTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- cmds</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">bool *mp_busy</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Implement file system quotas.</p>
-<p class="Pp" id="VFS_QUOTACTL">The <var class="Fa">mp_busy</var> argument is an
- input/output parameter.
- <a class="permalink" href="#VFS_QUOTACTL"><code class="Fn">VFS_QUOTACTL</code></a>()
- must be called with <var class="Fa">mp</var> marked busy through
- <a class="Xr">vfs_busy(9)</a> and <var class="Fa">*mp_busy</var> set to
- true. The filesystem implementation of
- <code class="Fn">VFS_QUOTACTL</code>() may then unbusy
- <var class="Fa">mp</var> using <a class="Xr">vfs_unbusy(9)</a> prior to
- performing quota file I/O. In this case the implementation must set
- <var class="Fa">*mp_busy</var> to false to indicate that the caller must not
- unbusy <var class="Fa">mp</var> upon completion of
- <code class="Fn">VFS_QUOTACTL</code>().</p>
-<p class="Pp">See <a class="Xr">quotactl(2)</a> for a description of the
- remaining arguments.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">quotactl(2)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 29, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_ROOT.9 4.html b/static/freebsd/man9/VFS_ROOT.9 4.html
deleted file mode 100644
index a9abbf84..00000000
--- a/static/freebsd/man9/VFS_ROOT.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_ROOT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_ROOT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_ROOT</code> &#x2014; <span class="Nd">return
- the root vnode of a file system</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_ROOT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Return a locked vnode for the root directory of the file
- system.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The file system.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The lock type. Could be <code class="Dv">LK_EXCLUSIVE</code> or
- <code class="Dv">LK_SHARED</code>. File system is free to ignore the
- <var class="Fa">flags</var> argument and instead acquire an exclusive
- lock.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>Return parameter for the root vnode.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_SET.9 4.html b/static/freebsd/man9/VFS_SET.9 4.html
deleted file mode 100644
index 99b6181c..00000000
--- a/static/freebsd/man9/VFS_SET.9 4.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_SET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_SET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_SET</code> &#x2014; <span class="Nd">set up
- loadable file system <var class="Vt">vfsconf</var></span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">VFS_SET</code>(<var class="Fa" style="white-space: nowrap;">struct
- vfsops *vfsops</var>,
- <var class="Fa" style="white-space: nowrap;">fsname</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#VFS_SET"><code class="Fn" id="VFS_SET">VFS_SET</code></a>()
- creates a <var class="Vt">vfsconf</var> structure for the loadable module
- with the given <var class="Fa">vfsops</var>, <var class="Fa">fsname</var>
- and <var class="Fa">flags</var>, and declares it by calling
- <a class="Xr">DECLARE_MODULE(9)</a> using
- <a class="permalink" href="#vfs_modevent"><code class="Fn" id="vfs_modevent">vfs_modevent</code></a>()
- as the event handler.</p>
-<p class="Pp">Possible values for the <var class="Fa">flags</var> argument
- are:</p>
-<dl class="Bl-hang">
- <dt id="VFCF_STATIC"><a class="permalink" href="#VFCF_STATIC"><code class="Dv">VFCF_STATIC</code></a></dt>
- <dd>File system should be statically available in the kernel.</dd>
- <dt id="VFCF_NETWORK"><a class="permalink" href="#VFCF_NETWORK"><code class="Dv">VFCF_NETWORK</code></a></dt>
- <dd>Network exportable file system.</dd>
- <dt id="VFCF_READONLY"><a class="permalink" href="#VFCF_READONLY"><code class="Dv">VFCF_READONLY</code></a></dt>
- <dd>Does not support write operations.</dd>
- <dt id="VFCF_SYNTHETIC"><a class="permalink" href="#VFCF_SYNTHETIC"><code class="Dv">VFCF_SYNTHETIC</code></a></dt>
- <dd>Pseudo file system, data does not represent on-disk files.</dd>
- <dt id="VFCF_LOOPBACK"><a class="permalink" href="#VFCF_LOOPBACK"><code class="Dv">VFCF_LOOPBACK</code></a></dt>
- <dd>Loopback file system layer.</dd>
- <dt id="VFCF_UNICODE"><a class="permalink" href="#VFCF_UNICODE"><code class="Dv">VFCF_UNICODE</code></a></dt>
- <dd>File names are stored as Unicode.</dd>
- <dt id="VFCF_JAIL"><a class="permalink" href="#VFCF_JAIL"><code class="Dv">VFCF_JAIL</code></a></dt>
- <dd>Can be mounted from within a jail if <var class="Va">allow.mount</var> and
- <var class="Va">allow.mount.&lt;fsname&gt;</var> jail parameters are
- set.</dd>
- <dt id="VFCF_DELEGADMIN"><a class="permalink" href="#VFCF_DELEGADMIN"><code class="Dv">VFCF_DELEGADMIN</code></a></dt>
- <dd>Supports delegated administration if <var class="Va">vfs.usermount</var>
- sysctl is set to <code class="Dv">1</code>.</dd>
- <dt id="VFCF_SBDRY"><a class="permalink" href="#VFCF_SBDRY"><code class="Dv">VFCF_SBDRY</code></a></dt>
- <dd>When in VFS method, the thread suspension is deferred to the user boundary
- upon arrival of stop action.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1>
-<div class="Bd Li">
-<pre>/*
- * Fill in the fields for which we have special methods.
- * The others are initially null. This tells vfs to change them to
- * pointers to vfs_std* functions during file system registration.
- */
-static struct vfsops myfs_vfsops = {
- .vfs_mount = myfs_mount,
- .vfs_root = myfs_root,
- .vfs_statfs = myfs_statfs,
- .vfs_unmount = myfs_unmount,
-};
-
-VFS_SET(myfs_vfsops, myfs, 0);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">jail(8)</a>,
- <a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">vfs_modevent(9)</a>,
- <a class="Xr">vfsconf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 16, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_STATFS.9 4.html b/static/freebsd/man9/VFS_STATFS.9 4.html
deleted file mode 100644
index b83ae5fd..00000000
--- a/static/freebsd/man9/VFS_STATFS.9 4.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_STATFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_STATFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_STATFS</code> &#x2014;
- <span class="Nd">return file system status</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_STATFS</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct statfs
- *sbp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_STATFS"><code class="Fn" id="VFS_STATFS">VFS_STATFS</code></a>()
- macro returns various pieces of information about the file system, including
- recommended I/O sizes, free space, free inodes, etc.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The file system.</dd>
- <dt><var class="Fa">sbp</var></dt>
- <dd>A <var class="Vt">statfs</var> structure, as defined by
- <code class="In">&lt;<a class="In">sys/mount.h</a>&gt;</code>, into which
- information is placed about the file system.</dd>
-</dl>
-<p class="Pp">The fields of <var class="Vt">struct statfs</var> related to the
- file system are as follows:</p>
-<dl class="Bl-tag">
- <dt id="f_type"><var class="Va">f_type</var></dt>
- <dd>Type of file system.</dd>
- <dt id="f_flags"><var class="Va">f_flags</var></dt>
- <dd>A copy of mount exported flags.</dd>
- <dt id="f_bsize"><var class="Va">f_bsize</var></dt>
- <dd>Fragment size.</dd>
- <dt id="f_iosize"><var class="Va">f_iosize</var></dt>
- <dd>Optimal transfer block size.</dd>
- <dt id="f_blocks"><var class="Va">f_blocks</var></dt>
- <dd>The total number of data blocks in the file system.</dd>
- <dt id="f_bfree"><var class="Va">f_bfree</var></dt>
- <dd>The number of free blocks in the file system.</dd>
- <dt id="f_bavail"><var class="Va">f_bavail</var></dt>
- <dd>The number of free blocks available to non-superuser processes.</dd>
- <dt id="f_files"><var class="Va">f_files</var></dt>
- <dd>The total number of file nodes in the file system.</dd>
- <dt id="f_ffree"><var class="Va">f_ffree</var></dt>
- <dd>The number of free nodes available to non-superuser processes.</dd>
- <dt id="f_syncwrites"><var class="Va">f_syncwrites</var></dt>
- <dd>The number of synchronous writes since the file system was mounted.</dd>
- <dt id="f_asyncwrites"><var class="Va">f_asyncwrites</var></dt>
- <dd>The number of asynchronous writes since the file system was mounted.</dd>
- <dt id="f_syncreads"><var class="Va">f_syncreads</var></dt>
- <dd>The number of synchronous reads since the file system was mounted.</dd>
- <dt id="f_asyncreads"><var class="Va">f_asyncreads</var></dt>
- <dd>The number of asynchronous reads since the file system was mounted.</dd>
- <dt id="f_namemax"><var class="Va">f_namemax</var></dt>
- <dd>The maximum file name length for this file system.</dd>
- <dt id="f_owner"><var class="Va">f_owner</var></dt>
- <dd>The user ID of the user that mounted the file system.</dd>
- <dt id="f_fsid"><var class="Va">f_fsid</var></dt>
- <dd>Unique file system ID.</dd>
- <dt id="f_fstypename"><var class="Va">f_fstypename</var></dt>
- <dd>The file system type name; a string of at most
- <code class="Dv">MFSNAMELEN</code> bytes.</dd>
- <dt id="f_mntfromname"><var class="Va">f_mntfromname</var></dt>
- <dd>The device name the file system was mounted from; a string of at most
- <code class="Dv">MNAMELEN</code> bytes.</dd>
- <dt id="f_mntonname"><var class="Va">f_mntonname</var></dt>
- <dd>The name of the directory on which the file system is mounted; a string of
- at most <code class="Dv">MNAMELEN</code> bytes.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_SYNC.9 4.html b/static/freebsd/man9/VFS_SYNC.9 4.html
deleted file mode 100644
index 7d0c105d..00000000
--- a/static/freebsd/man9/VFS_SYNC.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_SYNC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_SYNC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_SYNC</code> &#x2014; <span class="Nd">flush
- unwritten data</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_SYNC</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- waitfor</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_SYNC"><code class="Fn" id="VFS_SYNC">VFS_SYNC</code></a>()
- macro writes out all unwritten data in the file system mounted as
- <var class="Fa">mp</var>.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The file system.</dd>
- <dt><var class="Fa">waitfor</var></dt>
- <dd>Whether the function should wait for I/O to complete. Possible values are:
- <dl class="Bl-tag">
- <dt id="MNT_WAIT"><a class="permalink" href="#MNT_WAIT"><code class="Dv">MNT_WAIT</code></a></dt>
- <dd>synchronously wait for I/O to complete</dd>
- <dt id="MNT_NOWAIT"><a class="permalink" href="#MNT_NOWAIT"><code class="Dv">MNT_NOWAIT</code></a></dt>
- <dd>start all I/O, but do not wait for it</dd>
- <dt id="MNT_LAZY"><a class="permalink" href="#MNT_LAZY"><code class="Dv">MNT_LAZY</code></a></dt>
- <dd>push data not written by file system syncer</dd>
- </dl>
- </dd>
-</dl>
-<p class="Pp" id="VFS_SYNC~2">The
- <a class="permalink" href="#VFS_SYNC~2"><code class="Fn">VFS_SYNC</code></a>()
- macro calls the <var class="Va">vfs_sync</var> method of the file system,
- which normally calls <a class="Xr">VOP_FSYNC(9)</a> for all the vnodes in
- the file system.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fsync(2)</a>, <a class="Xr">sync(2)</a>,
- <a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_FSYNC(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_UNMOUNT.9 4.html b/static/freebsd/man9/VFS_UNMOUNT.9 4.html
deleted file mode 100644
index da37399b..00000000
--- a/static/freebsd/man9/VFS_UNMOUNT.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_UNMOUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_UNMOUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_UNMOUNT</code> &#x2014;
- <span class="Nd">unmount a file system</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_UNMOUNT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- mntflags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_UNMOUNT"><code class="Fn" id="VFS_UNMOUNT">VFS_UNMOUNT</code></a>()
- macro unmounts a file system.</p>
-<p class="Pp">The arguments it expects are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The file system.</dd>
- <dt id="VFS_UNMOUNT~2"><var class="Fa">mntflags</var></dt>
- <dd>Bit-mask of flags for the unmount operation. The flags currently supported
- by
- <a class="permalink" href="#VFS_UNMOUNT~2"><code class="Fn">VFS_UNMOUNT</code></a>()
- are:
- <dl class="Bl-tag">
- <dt id="MNT_FORCE"><a class="permalink" href="#MNT_FORCE"><code class="Dv">MNT_FORCE</code></a></dt>
- <dd>Open files are forcibly closed before the file system is
- unmounted.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vflush(9)</a>, <a class="Xr">VFS(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 23, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VFS_VGET.9 4.html b/static/freebsd/man9/VFS_VGET.9 4.html
deleted file mode 100644
index 6126a50a..00000000
--- a/static/freebsd/man9/VFS_VGET.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_VGET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_VGET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VFS_VGET</code> &#x2014; <span class="Nd">convert
- an inode number to a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_VGET</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">ino_t
- ino</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VFS_VGET"><code class="Fn" id="VFS_VGET">VFS_VGET</code></a>()
- looks up or creates a vnode from a (mount, inode#) tuple.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point.</dd>
- <dt><var class="Fa">ino</var></dt>
- <dd>The inode representing the file. This is a unique number assigned by the
- file system when vnodes are first created.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Additional locking flags to pass through to
- <a class="Xr">vget(9)</a>.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>Return parameter for the vnode.</dd>
-</dl>
-<p class="Pp">This is an optional file system entry-point for file systems
- mainly intended for NFS server use, but many file systems use it internally
- in <a class="Xr">VOP_LOOKUP(9)</a> and similar.</p>
-<p class="Pp">If the file system does not support this call, then it should
- return <code class="Er">EOPNOTSUPP</code>.</p>
-<p class="Pp" id="ffs_vget">Please see
- <a class="permalink" href="#ffs_vget"><code class="Fn">ffs_vget</code></a>()
- in <span class="Pa">sys/ufs/ffs/ffs_vfsops.c</span> for the canonical
- example.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vget(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 7, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VNET.9 4.html b/static/freebsd/man9/VNET.9 4.html
deleted file mode 100644
index 2b131ae6..00000000
--- a/static/freebsd/man9/VNET.9 4.html
+++ /dev/null
@@ -1,353 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VNET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VNET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VNET</code> &#x2014; <span class="Nd">network
- subsystem virtualization infrastructure</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options VIMAGE</code>
- <br/>
- <code class="Cd">options VNET_DEBUG</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">net/vnet.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Constants_and_Global_Variables"><a class="permalink" href="#Constants_and_Global_Variables">Constants
- and Global Variables</a></h2>
-<p class="Pp"><code class="Dv">VNET_SETNAME</code>
- <code class="Dv">VNET_SYMPREFIX</code>
- <br/>
- <var class="Vt">extern struct vnet *vnet0;</var></p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Variable Declaration</h2>
-<p class="Pp"><code class="Fn">VNET</code>(<var class="Fa">name</var>);</p>
-<p class="Pp"><code class="Fn">VNET_NAME</code>(<var class="Fa">name</var>);</p>
-<p class="Pp"><code class="Fn">VNET_DECLARE</code>(<var class="Fa">type</var>,
- <var class="Fa">name</var>);</p>
-<p class="Pp"><code class="Fn">VNET_DEFINE</code>(<var class="Fa">type</var>,
- <var class="Fa">name</var>);</p>
-<p class="Pp"><code class="Fn">VNET_DEFINE_STATIC</code>(<var class="Fa">type</var>,
- <var class="Fa">name</var>);</p>
-<div class="Bd Pp Li">
-<pre>#define V_name VNET(name)</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Virtual Instance Selection</h2>
-<p class="Pp"><code class="Fn">CRED_TO_VNET</code>(<var class="Fa">struct ucred
- *</var>);</p>
-<p class="Pp"><code class="Fn">TD_TO_VNET</code>(<var class="Fa">struct thread
- *</var>);</p>
-<p class="Pp"><code class="Fn">P_TO_VNET</code>(<var class="Fa">struct proc
- *</var>);</p>
-<p class="Pp"><code class="Fn">IS_DEFAULT_VNET</code>(<var class="Fa">struct
- vnet *</var>);</p>
-<p class="Pp"><code class="Fn">VNET_ASSERT</code>(<var class="Fa">exp</var>,
- <var class="Fa">msg</var>);</p>
-<p class="Pp"><code class="Fn">CURVNET_SET</code>(<var class="Fa">struct vnet
- *</var>);</p>
-<p class="Pp"><code class="Fn">CURVNET_SET_QUIET</code>(<var class="Fa">struct
- vnet *</var>);</p>
-<p class="Pp"><code class="Fn">CURVNET_RESTORE</code>();</p>
-<p class="Pp"><code class="Fn">VNET_ITERATOR_DECL</code>(<var class="Fa">struct
- vnet *</var>);</p>
-<p class="Pp"><code class="Fn">VNET_FOREACH</code>(<var class="Fa">struct vnet
- *</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking"><a class="permalink" href="#Locking">Locking</a></h2>
-<p class="Pp"><code class="Fn">VNET_LIST_RLOCK</code>();</p>
-<p class="Pp"><code class="Fn">VNET_LIST_RUNLOCK</code>();</p>
-<p class="Pp"><code class="Fn">VNET_LIST_RLOCK_NOSLEEP</code>();</p>
-<p class="Pp"><code class="Fn">VNET_LIST_RUNLOCK_NOSLEEP</code>();</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Startup and Teardown Functions</h2>
-<p class="Pp"><var class="Ft">struct vnet *</var>
- <br/>
- <code class="Fn">vnet_alloc</code>(<var class="Fa">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vnet_destroy</code>(<var class="Fa">struct vnet *</var>);</p>
-<p class="Pp"><code class="Fn">VNET_SYSINIT</code>(<var class="Fa">ident</var>,
- <var class="Fa">enum sysinit_sub_id subsystem</var>, <var class="Fa">enum
- sysinit_elem_order order</var>, <var class="Fa">sysinit_cfunc_t func</var>,
- <var class="Fa">const void *arg</var>);</p>
-<p class="Pp"><code class="Fn">VNET_SYSUNINIT</code>(<var class="Fa">ident</var>,
- <var class="Fa">enum sysinit_sub_id subsystem</var>, <var class="Fa">enum
- sysinit_elem_order order</var>, <var class="Fa">sysinit_cfunc_t func</var>,
- <var class="Fa">const void *arg</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Eventhandlers"><a class="permalink" href="#Eventhandlers">Eventhandlers</a></h2>
-<p class="Pp"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER</code>(<var class="Fa">const
- char *name</var>, <var class="Fa">void *func</var>, <var class="Fa">void
- *arg</var>, <var class="Fa">int priority</var>);</p>
-<p class="Pp"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code>(<var class="Fa">eventhandler_tag
- tag</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int
- priority</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">VNET</code> is the name of a technique to
- virtualize the network stack. The basic idea is to change global resources
- most notably variables into per network stack resources and have functions,
- sysctls, eventhandlers, etc. access and handle them in the context of the
- correct instance. Each (virtual) network stack is attached to a
- <i class="Em">prison</i>, with <var class="Vt">vnet0</var> being the
- unrestricted default network stack of the base system.</p>
-<p class="Pp">The global defines for <code class="Dv">VNET_SETNAME</code> and
- <code class="Dv">VNET_SYMPREFIX</code> are shared with
- <a class="Xr">kvm(3)</a> to access internals for debugging reasons.</p>
-<section class="Ss">
-<h2 class="Ss">Variable Declaration</h2>
-<p class="Pp">Variables are virtualized by using the
- <a class="permalink" href="#VNET_DEFINE"><code class="Fn" id="VNET_DEFINE">VNET_DEFINE</code></a>()
- macro rather than writing them out as
- <a class="permalink" href="#type"><i class="Em" id="type">type name</i></a>.
- One can still use static initialization, e.g.,</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li"><code class="Li">VNET_DEFINE(int,
- foo) = 1;</code></code></div>
-<p class="Pp" id="VNET_DEFINE_STATIC">Variables declared with the static keyword
- can use the
- <a class="permalink" href="#VNET_DEFINE_STATIC"><code class="Fn">VNET_DEFINE_STATIC</code></a>()
- macro, e.g.,</p>
-<p class="Pp"></p>
-<div class="Bd
- Bd-indent"><code class="Li"><code class="Li">VNET_DEFINE_STATIC(SLIST_HEAD(,
- bar), bars);</code></code></div>
-<p class="Pp" id="VNET_SYSINIT">Static initialization is not possible when the
- virtualized variable would need to be referenced, e.g., with
- &#x201C;TAILQ_HEAD_INITIALIZER()&#x201D;. In that case a
- <a class="permalink" href="#VNET_SYSINIT"><code class="Fn">VNET_SYSINIT</code></a>()
- based initialization function must be used.</p>
-<p class="Pp" id="VNET_DECLARE">External variables have to be declared using the
- <a class="permalink" href="#VNET_DECLARE"><code class="Fn">VNET_DECLARE</code></a>()
- macro. In either case the convention is to define another macro, that is
- then used throughout the implementation to access that variable. The
- variable name is usually prefixed by
- <a class="permalink" href="#V_"><i class="Em" id="V_">V_</i></a> to express
- that it is virtualized. The
- <a class="permalink" href="#VNET"><code class="Fn" id="VNET">VNET</code></a>()
- macro will then translate accesses to that variable to the copy of the
- currently selected instance (see the
- <a class="Sx" href="#Virtual_instance_selection">Virtual instance
- selection</a> section):</p>
-<p class="Pp"></p>
-<div class="Bd
- Bd-indent"><code class="Li"><code class="Li">#define V_name VNET(name)</code></code></div>
-<p class="Pp"><i class="Em">NOTE:</i> Do not confuse this with the convention
- used by <a class="Xr">VFS(9)</a>.</p>
-<p class="Pp" id="VNET_NAME">The
- <a class="permalink" href="#VNET_NAME"><code class="Fn">VNET_NAME</code></a>()
- macro returns the offset within the memory region of the virtual network
- stack instance.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Virtual Instance Selection</h2>
-<p class="Pp">There are three different places where the current virtual network
- stack pointer is stored and can be taken from:</p>
-<ol class="Bl-enum Bd-indent">
- <li>a <i class="Em">prison</i>:
- <div class="Bd Bd-indent"><code class="Li">(struct prison
- *)-&gt;pr_vnet</code></div>
- <p class="Pp">For convenience the following macros are provided:</p>
- <div class="Bd Bd-indent Li">
- <pre><a class="permalink" href="#CRED_TO_VNET"><code class="Fn" id="CRED_TO_VNET">CRED_TO_VNET</code></a>(<var class="Fa">struct ucred *</var>)
-<a class="permalink" href="#TD_TO_VNET"><code class="Fn" id="TD_TO_VNET">TD_TO_VNET</code></a>(<var class="Fa">struct thread *</var>)
-<a class="permalink" href="#P_TO_VNET"><code class="Fn" id="P_TO_VNET">P_TO_VNET</code></a>(<var class="Fa">struct proc *</var>)</pre>
- </div>
- </li>
- <li id="socket">a
- <a class="permalink" href="#socket"><i class="Em">socket</i></a>:
- <div class="Bd Bd-indent"><code class="Li">(struct socket
- *)-&gt;so_vnet</code></div>
- </li>
- <li id="interface">an
- <a class="permalink" href="#interface"><i class="Em">interface</i></a>:
- <div class="Bd Bd-indent"><code class="Li">(struct ifnet
- *)-&gt;if_vnet</code></div>
- </li>
-</ol>
-<p class="Pp">In addition the currently active instance is cached in
- &#x201C;curthread-&gt;td_vnet&#x201D; which is usually only accessed through
- the <code class="Dv">curvnet</code> macro.</p>
-<p class="Pp" id="CURVNET_SET">To set the correct context of the current virtual
- network instance, use the
- <a class="permalink" href="#CURVNET_SET"><code class="Fn">CURVNET_SET</code></a>()
- or
- <a class="permalink" href="#CURVNET_SET_QUIET"><code class="Fn" id="CURVNET_SET_QUIET">CURVNET_SET_QUIET</code></a>()
- macros. The <code class="Fn">CURVNET_SET_QUIET</code>() version will not
- record vnet recursions in case the kernel was compiled with
- <code class="Cd">options VNET_DEBUG</code> and should thus only be used in
- well known cases, where recursion is unavoidable. Both macros will save the
- previous state on the stack and it must be restored with the
- <code class="Fn">CURVNET_RESTORE</code>() macro.</p>
-<p class="Pp" id="CURVNET_SET~2"><i class="Em">NOTE:</i> As the previous state
- is saved on the stack, you cannot have multiple
- <a class="permalink" href="#CURVNET_SET~2"><code class="Fn">CURVNET_SET</code></a>()
- calls in the same block.</p>
-<p class="Pp" id="CURVNET_RESTORE"><i class="Em">NOTE:</i> As the previous state
- is saved on the stack, a
- <a class="permalink" href="#CURVNET_RESTORE"><code class="Fn">CURVNET_RESTORE</code></a>()
- call has to be in the same block as the
- <code class="Fn">CURVNET_SET</code>() call or in a subblock with the same
- idea of the saved instances as the outer block.</p>
-<p class="Pp" id="not"><i class="Em">NOTE:</i> As each macro is a set of
- operations and, as previously explained, cannot be put into its own block
- when defined, one cannot conditionally set the current vnet context. The
- following will <a class="permalink" href="#not"><i class="Em">not</i></a>
- work:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>if (condition)
- CURVNET_SET(vnet);</pre>
-</div>
-<p class="Pp">nor would this work:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>if (condition) {
- CURVNET_SET(vnet);
-}
-CURVNET_RESTORE();</pre>
-</div>
-<p class="Pp" id="VNET_ITERATOR_DECL">Sometimes one needs to loop over all
- virtual instances, for example to update virtual from global state, to run a
- function from a <a class="Xr">callout(9)</a> for each instance, etc. For
- those cases the
- <a class="permalink" href="#VNET_ITERATOR_DECL"><code class="Fn">VNET_ITERATOR_DECL</code></a>()
- and
- <a class="permalink" href="#VNET_FOREACH"><code class="Fn" id="VNET_FOREACH">VNET_FOREACH</code></a>()
- macros are provided. The former macro defines the variable that iterates
- over the loop, and the latter loops over all of the virtual network stack
- instances. See <a class="Sx" href="#Locking">Locking</a> for how to savely
- traverse the list of all virtual instances.</p>
-<p class="Pp" id="IS_DEFAULT_VNET">The
- <a class="permalink" href="#IS_DEFAULT_VNET"><code class="Fn">IS_DEFAULT_VNET</code></a>()
- macro provides a safe way to check whether the currently active instance is
- the unrestricted default network stack of the base system
- (<var class="Vt">vnet0</var>).</p>
-<p class="Pp" id="VNET_ASSERT">The
- <a class="permalink" href="#VNET_ASSERT"><code class="Fn">VNET_ASSERT</code></a>()
- macro provides a way to conditionally add assertions that are only active
- with <code class="Cd">options VIMAGE</code> compiled in and either
- <code class="Cd">options VNET_DEBUG</code> or <code class="Cd">options
- INVARIANTS</code> enabled as well. It uses the same semantics as
- <a class="Xr">KASSERT(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking~2"><a class="permalink" href="#Locking~2">Locking</a></h2>
-<p class="Pp">For public access to the list of virtual network stack instances
- e.g., by the
- <a class="permalink" href="#VNET_FOREACH~2"><code class="Fn" id="VNET_FOREACH~2">VNET_FOREACH</code></a>()
- macro, read locks are provided. Macros are used to abstract from the actual
- type of the locks. If a caller may sleep while traversing the list, it must
- use the
- <a class="permalink" href="#VNET_LIST_RLOCK"><code class="Fn" id="VNET_LIST_RLOCK">VNET_LIST_RLOCK</code></a>()
- and
- <a class="permalink" href="#VNET_LIST_RUNLOCK"><code class="Fn" id="VNET_LIST_RUNLOCK">VNET_LIST_RUNLOCK</code></a>()
- macros. Otherwise, the caller can use
- <a class="permalink" href="#VNET_LIST_RLOCK_NOSLEEP"><code class="Fn" id="VNET_LIST_RLOCK_NOSLEEP">VNET_LIST_RLOCK_NOSLEEP</code></a>()
- and
- <a class="permalink" href="#VNET_LIST_RUNLOCK_NOSLEEP"><code class="Fn" id="VNET_LIST_RUNLOCK_NOSLEEP">VNET_LIST_RUNLOCK_NOSLEEP</code></a>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Startup and Teardown Functions</h2>
-<p class="Pp">To start or tear down a virtual network stack instance the
- internal functions
- <a class="permalink" href="#vnet_alloc"><code class="Fn" id="vnet_alloc">vnet_alloc</code></a>()
- and
- <a class="permalink" href="#vnet_destroy"><code class="Fn" id="vnet_destroy">vnet_destroy</code></a>()
- are provided and called from the jail framework. They run the publicly
- provided methods to handle network stack startup and teardown.</p>
-<p class="Pp" id="VNET_SYSINIT~2">For public control, the system startup
- interface has been enhanced to not only handle a system boot but to also
- handle a virtual network stack startup and teardown. To the base system the
- <a class="permalink" href="#VNET_SYSINIT~2"><code class="Fn">VNET_SYSINIT</code></a>()
- and
- <a class="permalink" href="#VNET_SYSUNINIT"><code class="Fn" id="VNET_SYSUNINIT">VNET_SYSUNINIT</code></a>()
- macros look exactly as if there were no virtual network stack. In fact, if
- <code class="Cd">options VIMAGE</code> is not compiled in they are compiled
- to the standard
- <a class="permalink" href="#SYSINIT"><code class="Fn" id="SYSINIT">SYSINIT</code></a>()
- macros. In addition to that they are run for each virtual network stack when
- starting or, in reverse order, when shutting down.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Eventhandlers~2"><a class="permalink" href="#Eventhandlers~2">Eventhandlers</a></h2>
-<p class="Pp">Eventhandlers can be handled in two ways:</p>
-<p class="Pp"></p>
-<ol class="Bl-enum Bd-indent Bl-compact">
- <li id="tags">save the
- <a class="permalink" href="#tags"><i class="Em">tags</i></a> returned in
- each virtual instance and properly free the eventhandlers on teardown
- using those, or</li>
- <li>use one eventhandler that will iterate over all virtual network stack
- instances.</li>
-</ol>
-<p class="Pp" id="VNET_GLOBAL_EVENTHANDLER_REGISTER">For the first case one can
- just use the normal <a class="Xr">EVENTHANDLER(9)</a> functions, while for
- the second case the
- <a class="permalink" href="#VNET_GLOBAL_EVENTHANDLER_REGISTER"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER</code></a>()
- and
- <a class="permalink" href="#VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG"><code class="Fn" id="VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code></a>()
- macros are provided. These differ in that
- <code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code>() takes an
- extra first argument that will carry the <var class="Fa">tag</var> upon
- return. Eventhandlers registered with either of these will not run
- <var class="Fa">func</var> directly but <var class="Fa">func</var> will be
- called from an internal iterator function for each vnet. Both macros can
- only be used for eventhandlers that do not take additional arguments, as the
- variadic arguments from an <a class="Xr">EVENTHANDLER_INVOKE(9)</a> call
- will be ignored.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Sysctl_Handling"><a class="permalink" href="#Sysctl_Handling">Sysctl
- Handling</a></h2>
-<p class="Pp">A <a class="Xr">sysctl(9)</a> can be virtualized by adding the
- <code class="Dv">CTLFLAG_VNET</code> control flag to the ctlflags bitmask of
- the macros.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">kvm(3)</a>,
- <a class="Xr">EVENTHANDLER(9)</a>, <a class="Xr">KASSERT(9)</a>,
- <a class="Xr">sysctl(9)</a></p>
-<p class="Pp">Marko Zec, Implementing a Clonable Network Stack in the FreeBSD
- Kernel, USENIX ATC'03, June 2003, Boston</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The virtual network stack implementation first appeared in
- <span class="Ux">FreeBSD 8.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">VNET</code> framework was designed and
- implemented at the University of Zagreb by <span class="An">Marko Zec</span>
- under sponsorship of the FreeBSD Foundation and NLnet Foundation, and later
- extended and refined by <span class="An">Bjoern A. Zeeb</span> (also under
- FreeBSD Foundation sponsorship), and <span class="An">Robert
- Watson</span>.</p>
-<p class="Pp">This manual page was written by <span class="An">Bjoern A. Zeeb,
- CK Software GmbH,</span> under sponsorship from the FreeBSD Foundation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 19, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ACCESS.9 4.html b/static/freebsd/man9/VOP_ACCESS.9 4.html
deleted file mode 100644
index 482b0ce6..00000000
--- a/static/freebsd/man9/VOP_ACCESS.9 4.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ACCESS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ACCESS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_ACCESS</code>,
- <code class="Nm">VOP_ACCESSX</code> &#x2014; <span class="Nd">check access
- permissions of a file or Unix domain socket</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ACCESS</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">accmode_t
- accmode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ACCESSX</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">accmode_t
- accmode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This entry point checks the access permissions of the file against
- the given credentials.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file to check.</dd>
- <dt><var class="Fa">accmode</var></dt>
- <dd>The type of access required.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to check.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread which is checking.</dd>
-</dl>
-<p class="Pp" id="VOP_ACCESS">The <var class="Fa">accmode</var> is a mask which
- can contain flags described in &lt;sys/vnode.h&gt;, e.g.
- <code class="Dv">VREAD</code>, <code class="Dv">VWRITE</code> or
- <code class="Dv">VEXEC</code>. For
- <a class="permalink" href="#VOP_ACCESS"><code class="Fn">VOP_ACCESS</code></a>(),
- the only flags that may be set in <var class="Fa">accmode</var> are
- <code class="Dv">VEXEC</code>, <code class="Dv">VWRITE</code>,
- <code class="Dv">VREAD</code>, <code class="Dv">VADMIN</code> and
- <code class="Dv">VAPPEND</code>. To check for other flags, one has to use
- <a class="permalink" href="#VOP_ACCESSX"><code class="Fn" id="VOP_ACCESSX">VOP_ACCESSX</code></a>()
- instead.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the file is accessible in the specified way, then zero is
- returned, otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>An attempt was made to change an immutable file.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The permission bits the file mode or the ACL do not permit the requested
- access.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vaccess(9)</a>,
- <a class="Xr">vaccess_acl_nfs4(9)</a>,
- <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 18, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ACLCHECK.9 4.html b/static/freebsd/man9/VOP_ACLCHECK.9 4.html
deleted file mode 100644
index e13f70f6..00000000
--- a/static/freebsd/man9/VOP_ACLCHECK.9 4.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ACLCHECK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ACLCHECK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_ACLCHECK</code> &#x2014;
- <span class="Nd">check an access control list for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ACLCHECK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t
- type</var>, <var class="Fa" style="white-space: nowrap;">struct acl
- *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to determine the validity of a
- particular access control list (ACL) for a particular file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of ACL to check.</dd>
- <dt><var class="Fa">aclp</var></dt>
- <dd>A pointer to an ACL structure from which to retrieve the ACL data.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread checking the ACL.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be NULL to indicate
- that access control checks are not to be performed, if possible. This cred
- setting might be used to allow the kernel to authorize ACL verification that
- the active process might not be permitted to do.</p>
-<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of
- file and directory ACL interfaces. More information about ACL management in
- kernel may be found in <a class="Xr">acl(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">No locks are required to call this vnode method, and any locks
- held on entry will be held on exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the <var class="Fa">aclp</var> pointer points to a valid ACL of
- type <var class="Fa">type</var> for the object <var class="Fa">vp</var>,
- then zero is returned. Otherwise, an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The ACL type passed is invalid for this vnode, or the ACL data is
- invalid.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The file or directory ACL does not permit access.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Sufficient memory is not available to fulfill the request.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_ACLCHECK</code>().</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_GETACL(9)</a>, <a class="Xr">VOP_SETACL(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 23, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ADVISE.9 4.html b/static/freebsd/man9/VOP_ADVISE.9 4.html
deleted file mode 100644
index bed12675..00000000
--- a/static/freebsd/man9/VOP_ADVISE.9 4.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ADVISE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ADVISE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_ADVISE</code> &#x2014; <span class="Nd">apply
- advice about use of file data</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ADVISE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">off_t
- start</var>, <var class="Fa" style="white-space: nowrap;">off_t end</var>,
- <var class="Fa" style="white-space: nowrap;">int advice</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This call applies advice for a range of a file's data. It is used
- to implement the <a class="Xr">posix_fadvise(2)</a> system call.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">start</var></dt>
- <dd>The start of the range of file data.</dd>
- <dt><var class="Fa">end</var></dt>
- <dd>The end of the range of file data. A value of
- <code class="Dv">OFF_MAX</code> indicates that the advice is to be applied
- up to the end of the file.</dd>
- <dt><var class="Fa">advice</var></dt>
- <dd>The type of operation to apply to the file data. Possible values are:
- <dl class="Bl-tag">
- <dt id="POSIX_FADV_WILLNEED"><a class="permalink" href="#POSIX_FADV_WILLNEED"><code class="Dv">POSIX_FADV_WILLNEED</code></a></dt>
- <dd>Initiate an asynchronous read of the file data if it is not already
- resident.</dd>
- <dt id="POSIX_FADV_DONTNEED"><a class="permalink" href="#POSIX_FADV_DONTNEED"><code class="Dv">POSIX_FADV_DONTNEED</code></a></dt>
- <dd>Decrease the in-memory priority of clean file data or discard clean
- file data.</dd>
- </dl>
- </dd>
-</dl>
-<p class="Pp">If the <var class="Fa">start</var> and <var class="Fa">end</var>
- offsets are both zero, then the operation should be applied to the entire
- file. Note that this call is advisory only and may perform the requested
- operation on a subset of the requested range (including not performing it at
- all) and still return success.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The file should be unlocked on entry.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned if the call is successful, otherwise an
- appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>An invalid value was given for <var class="Fa">advice</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 26, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ADVLOCK.9 4.html b/static/freebsd/man9/VOP_ADVLOCK.9 4.html
deleted file mode 100644
index 92329ee3..00000000
--- a/static/freebsd/man9/VOP_ADVLOCK.9 4.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ADVLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ADVLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_ADVLOCK</code> &#x2014;
- <span class="Nd">advisory record locking</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/fcntl.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lockf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ADVLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">caddr_t
- id</var>, <var class="Fa" style="white-space: nowrap;">int op</var>,
- <var class="Fa" style="white-space: nowrap;">struct flock *fl</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode being manipulated.</dd>
- <dt><var class="Fa">id</var></dt>
- <dd>The id token which is changing the lock.</dd>
- <dt><var class="Fa">op</var></dt>
- <dd>The operation to perform (see <a class="Xr">fcntl(2)</a>).</dd>
- <dt><var class="Fa">fl</var></dt>
- <dd>Description of the lock.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>One or more of the following:
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="F_WAIT"><a class="permalink" href="#F_WAIT"><code class="Dv">F_WAIT</code></a></dt>
- <dd>Wait until lock is granted.</dd>
- <dt id="F_FLOCK"><a class="permalink" href="#F_FLOCK"><code class="Dv">F_FLOCK</code></a></dt>
- <dd>Use <a class="Xr">flock(2)</a> semantics for lock.</dd>
- <dt id="F_POSIX"><a class="permalink" href="#F_POSIX"><code class="Dv">F_POSIX</code></a></dt>
- <dd>Use POSIX semantics for lock.</dd>
- <dt id="F_REMOTE"><a class="permalink" href="#F_REMOTE"><code class="Dv">F_REMOTE</code></a></dt>
- <dd>Lock owner is remote NFS client.</dd>
- <dt id="F_NOINTR"><a class="permalink" href="#F_NOINTR"><code class="Dv">F_NOINTR</code></a></dt>
- <dd>Mask signals while waiting for the lock.</dd>
- </dl>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="lf_advlock">This entry point manipulates advisory record locks
- on the file. Most file systems delegate the work for this call to
- <a class="permalink" href="#lf_advlock"><code class="Fn">lf_advlock</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fcntl(2)</a>, <a class="Xr">flock(2)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 10, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ALLOCATE.9 4.html b/static/freebsd/man9/VOP_ALLOCATE.9 4.html
deleted file mode 100644
index ce6e0bd8..00000000
--- a/static/freebsd/man9/VOP_ALLOCATE.9 4.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ALLOCATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ALLOCATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_ALLOCATE</code> &#x2014;
- <span class="Nd">allocate storage for a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ALLOCATE</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *len</var>,
- <var class="Fa">int ioflag</var>, <var class="Fa">struct ucred
- *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This call allocates storage for a range of offsets in a file. It
- is used to implement the <a class="Xr">posix_fallocate(2)</a> system
- call.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">offset</var></dt>
- <dd>The start of the range to allocate storage for in the file.</dd>
- <dt><var class="Fa">len</var></dt>
- <dd>The length of the range to allocate storage for in the file.</dd>
- <dt><var class="Fa">ioflag</var></dt>
- <dd>Directives and hints to be given to the file system.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The credentials of the caller.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">offset</var> and <var class="Fa">len</var>
- arguments are updated to reflect the portion of the range that still needs
- to be allocated on return. A partial allocation is considered a successful
- operation. The file's contents are not changed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The file should be exclusively locked on entry and will still be
- locked on exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned if the call is successful, otherwise an
- appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt>
- <dd>An attempt was made to write a file that exceeds the process's file size
- limit or the maximum file size.</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>An append-only flag is set on the file, but the caller is attempting to
- write before the current end of file.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_READ(9)</a>,
- <a class="Xr">VOP_WRITE(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 8, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_ATTRIB.9 4.html b/static/freebsd/man9/VOP_ATTRIB.9 4.html
deleted file mode 100644
index 9c813f1c..00000000
--- a/static/freebsd/man9/VOP_ATTRIB.9 4.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_ATTRIB(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_ATTRIB(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_GETATTR</code>,
- <code class="Nm">VOP_SETATTR</code> &#x2014; <span class="Nd">get and set
- attributes on a file or directory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETATTR</code>(<var class="Fa">struct</var>,
- <var class="Fa">vnode</var>, <var class="Fa">*vp</var>,
- <var class="Fa">flags</var>, <var class="Fa">struct</var>,
- <var class="Fa">vattr</var>, <var class="Fa">*vap</var>,
- <var class="Fa">struct</var>, <var class="Fa">ucred</var>,
- <var class="Fa">*cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETATTR</code>(<var class="Fa">struct</var>,
- <var class="Fa">vnode</var>, <var class="Fa">*vp</var>,
- <var class="Fa">struct</var>, <var class="Fa">vattr</var>,
- <var class="Fa">*vap</var>, <var class="Fa">struct</var>,
- <var class="Fa">ucred</var>, <var class="Fa">*cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_STAT</code>(<var class="Fa">struct</var>,
- <var class="Fa">vnode</var>, <var class="Fa">*vp</var>,
- <var class="Fa">struct</var>, <var class="Fa">stat</var>,
- <var class="Fa">*sb</var>, <var class="Fa">flags</var>,
- <var class="Fa">struct</var>, <var class="Fa">ucred</var>,
- <var class="Fa">*active_cred</var>, <var class="Fa">struct</var>,
- <var class="Fa">ucred</var>, <var class="Fa">*file_cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These entry points manipulate various attributes of a file or
- directory, including file permissions, owner, group, size, access time and
- modification time.</p>
-<p class="Pp" id="VOP_STAT"><a class="permalink" href="#VOP_STAT"><code class="Fn">VOP_STAT</code></a>()
- returns data in a format suitable for the <a class="Xr">stat(2)</a> system
- call and by default is implemented as a wrapper around
- <code class="Fn">VOP_GETATTR</code>(). Filesystems may want to implement
- their own variant for performance reasons.</p>
-<p class="Pp" id="VOP_GETATTR">For
- <a class="permalink" href="#VOP_GETATTR"><code class="Fn">VOP_GETATTR</code></a>()
- and <code class="Fn">VOP_SETATTR</code>() the arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">vap</var></dt>
- <dd>The attributes of the file.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials of the calling thread.</dd>
-</dl>
-<p class="Pp" id="VOP_STAT~2">For
- <a class="permalink" href="#VOP_STAT~2"><code class="Fn">VOP_STAT</code></a>()
- the arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">sb</var></dt>
- <dd>The attributes of the file.</dd>
- <dt><var class="Fa">active_cred</var></dt>
- <dd>The user credentials of the calling thread.</dd>
- <dt><var class="Fa">file_cred</var></dt>
- <dd>The credentials installed on the file description pointing to the vnode or
- NOCRED.</dd>
-</dl>
-<p class="Pp" id="VOP_SETATTR">Attributes which are not being modified by
- <a class="permalink" href="#VOP_SETATTR"><code class="Fn">VOP_SETATTR</code></a>()
- should be set to the value <code class="Dv">VNOVAL</code>;
- <a class="permalink" href="#VATTR_NULL"><code class="Fn" id="VATTR_NULL">VATTR_NULL</code></a>()
- may be used to clear all the values, and should generally be used to reset
- the contents of <var class="Fa">*vap</var> prior to setting specific
- values.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">Both <code class="Fn">VOP_GETATTR</code>() and
- <code class="Fn">VOP_STAT</code>() expect the vnode to be locked on entry
- and will leave the vnode locked on return. The lock type can be either
- shared or exclusive.</p>
-<p class="Pp" id="VOP_SETATTR~2"><a class="permalink" href="#VOP_SETATTR~2"><code class="Fn">VOP_SETATTR</code></a>()
- expects the vnode to be locked on entry and will leave the vnode locked on
- return. The lock type must be exclusive.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">VOP_GETATTR</code>() returns 0 if it was able to
- retrieve the attribute data via <var class="Fa">*vap</var>, otherwise an
- appropriate error is returned. <code class="Fn">VOP_SETATTR</code>() returns
- zero if the attributes were changed successfully, otherwise an appropriate
- error is returned. <code class="Fn">VOP_STAT</code>() returns 0 if it was
- able to retrieve the attribute data <var class="Fa">*sb</var>, otherwise an
- appropriate error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The file is immutable.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have permission to modify the file or directory
- attributes.</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>The file system is read-only.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACCESS(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 2, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_BMAP.9 4.html b/static/freebsd/man9/VOP_BMAP.9 4.html
deleted file mode 100644
index f1d7f50e..00000000
--- a/static/freebsd/man9/VOP_BMAP.9 4.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_BMAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_BMAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_BMAP</code> &#x2014; <span class="Nd">Logical
- to physical block number conversion</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_BMAP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">daddr_t
- bn</var>, <var class="Fa" style="white-space: nowrap;">struct bufobj
- **bop</var>, <var class="Fa" style="white-space: nowrap;">daddr_t
- *bnp</var>, <var class="Fa" style="white-space: nowrap;">int *runp</var>,
- <var class="Fa" style="white-space: nowrap;">int *runb</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call is used to lookup the physical block number of the
- file system's underlying device where a given logical block of a file is
- stored. Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">bn</var></dt>
- <dd>Logical block number within the file identified by
- <var class="Fa">vp</var>.</dd>
- <dt><var class="Fa">bop</var></dt>
- <dd>Return storage for the buffer object associated with the file system's
- underlying device.</dd>
- <dt><var class="Fa">bnp</var></dt>
- <dd>Return storage for the physical block number.</dd>
- <dt><var class="Fa">runp</var></dt>
- <dd>Return storage for the number of succeeding logical blocks that may be
- efficiently read at the same time as the requested block. This will
- usually be the number of logical blocks whose physical blocks are
- contiguously allocated. However a file system is free to define
- &quot;efficient&quot; as it sees fit.</dd>
- <dt><var class="Fa">runb</var></dt>
- <dd>Like <var class="Fa">runp</var> but for preceding rather than succeeding
- blocks.</dd>
-</dl>
-<p class="Pp">Any of the return arguments may be <code class="Dv">NULL</code> to
- indicate that the caller does not care about that information.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">A <code class="Fn">bmap</code>() function first appeared in
- <span class="Ux">4.2BSD</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alan
- Somers</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 19, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_BWRITE.9 4.html b/static/freebsd/man9/VOP_BWRITE.9 4.html
deleted file mode 100644
index da1fb6dd..00000000
--- a/static/freebsd/man9/VOP_BWRITE.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_BWRITE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_BWRITE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_BWRITE</code> &#x2014; <span class="Nd">write
- a file system buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_BWRITE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf
- *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file being written to.</dd>
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer to be written.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html b/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html
deleted file mode 100644
index 8daf6239..00000000
--- a/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_COPY_FILE_RANGE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_COPY_FILE_RANGE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_COPY_FILE_RANGE</code> &#x2014;
- <span class="Nd">copy a byte range within a file or from one file to another
- in a single file system or between multiple file systems</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_COPY_FILE_RANGE</code>(<var class="Fa">struct vnode
- *invp</var>, <var class="Fa">off_t *inoff</var>, <var class="Fa">struct
- vnode *outvp</var>, <var class="Fa">off_t *outoff</var>,
- <var class="Fa">size_t *len</var>, <var class="Fa">unsigned int flags</var>,
- <var class="Fa">struct ucred *incred</var>, <var class="Fa">struct ucred
- *outcred</var>, <var class="Fa">struct thread *fsize_td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This entry point copies a byte range from one regular file to
- another or within one file in a single file system.
- <var class="Fa">invp</var> and <var class="Fa">outvp</var> can refer to the
- same file. For this case, the byte ranges defined by
- <var class="Fa">*inoff</var>, <var class="Fa">*outoff and</var>
- <var class="Fa">*len</var> will not overlap.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">invp</var></dt>
- <dd>The vnode of the input file.</dd>
- <dt><var class="Fa">inoff</var></dt>
- <dd>A pointer to the file offset for the input file.</dd>
- <dt><var class="Fa">outvp</var></dt>
- <dd>The vnode of the output file.</dd>
- <dt><var class="Fa">outoff</var></dt>
- <dd>A pointer to the file offset for the output file.</dd>
- <dt><var class="Fa">len</var></dt>
- <dd>A pointer to the byte count for the copy.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Flags, should be set to 0 for now.</dd>
- <dt><var class="Fa">incred</var></dt>
- <dd>The credentials used to read <var class="Fa">invp</var>.</dd>
- <dt><var class="Fa">outcred</var></dt>
- <dd>The credentials used to write <var class="Fa">outvp</var>.</dd>
- <dt><var class="Fa">fsize_td</var></dt>
- <dd>The thread pointer to be passed to vn_rlimit_fsize(). This will be
- <code class="Dv">NULL</code> for a server thread without limits, such as
- for the NFS server or <code class="Dv">curthread</code> otherwise.</dd>
-</dl>
-<p class="Pp">On entry and on return, the <var class="Fa">inoff</var> and
- <var class="Fa">outoff</var> arguments point to the locations of the file
- offsets. These file offsets should be updated by the number of bytes copied.
- The <var class="Fa">len</var> argument points to the location that stores
- the number of bytes to be copied. Upon a successful return
- <var class="Fa">len</var> will be updated to the number of bytes actually
- copied. Normally, this will be the number of bytes requested to be copied,
- however a copy of fewer bytes than requested is permitted. This does not
- necessarily indicate that the copy reached EOF on the input file. However,
- if the value pointed to by the <var class="Fa">len</var> argument is zero
- upon a successful return, it indicates that the offset pointed to by
- <var class="Fa">inoff</var> is at or beyond EOF on the input file.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode are unlocked on entry and must be unlocked on return.
- The byte ranges for both <var class="Fa">invp</var> and
- <var class="Fa">outvp</var> should be range locked when this call is
- done.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt>
- <dd>If the copy exceeds the process's file size limit or the maximum file size
- for the file system <var class="Fa">invp</var> and
- <var class="Fa">outvp</var> reside on.</dd>
- <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt>
- <dd>A signal interrupted the VOP call before it could be completed.</dd>
- <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt>
- <dd>An I/O error occurred while reading/writing the files.</dd>
- <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt>
- <dd>Corrupted data was detected while reading/writing the files.</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vn_rdwr(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 30, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_CREATE.9 4.html b/static/freebsd/man9/VOP_CREATE.9 4.html
deleted file mode 100644
index c1f24343..00000000
--- a/static/freebsd/man9/VOP_CREATE.9 4.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_CREATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_CREATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_CREATE</code>,
- <code class="Nm">VOP_MKNOD</code>, <code class="Nm">VOP_MKDIR</code>,
- <code class="Nm">VOP_SYMLINK</code> &#x2014; <span class="Nd">create a file,
- socket, fifo, device, directory or symlink</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/namei.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_CREATE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_MKNOD</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_MKDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SYMLINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>,
- <var class="Fa" style="white-space: nowrap;">const char *target</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These entry points create a new file, socket, fifo, device,
- directory or symlink in a given directory.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dvp</var></dt>
- <dd>The locked vnode of the directory.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>The address of a variable where the resulting locked vnode should be
- stored.</dd>
- <dt><var class="Fa">cnp</var></dt>
- <dd>The pathname component created.</dd>
- <dt><var class="Fa">vap</var></dt>
- <dd>The attributes that the new object should be created with.</dd>
- <dt><var class="Fa">target</var></dt>
- <dd>The pathname of the target of the symlink.</dd>
-</dl>
-<p class="Pp">These entry points are called after
- <a class="Xr">VOP_LOOKUP(9)</a> when an object is being created.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The directory, <var class="Fa">dvp</var> will be locked on entry
- and must remain locked on return. If the call is successful, the new object
- will be returned locked.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, the vnode for the new object is placed in
- <var class="Fa">*vpp</var> and zero is returned. Otherwise, an appropriate
- error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt>
- <dd>The user's file system space or inode quota would be exceeded.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The function <code class="Nm">VOP_CREATE</code> appeared in
- <span class="Ux">4.3BSD</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 2, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_DEALLOCATE.9 4.html b/static/freebsd/man9/VOP_DEALLOCATE.9 4.html
deleted file mode 100644
index e4a4b73a..00000000
--- a/static/freebsd/man9/VOP_DEALLOCATE.9 4.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_DEALLOCATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_DEALLOCATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_DEALLOCATE</code> &#x2014;
- <span class="Nd">zero and/or deallocate storage from a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_DEALLOCATE</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *len</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int ioflag</var>,
- <var class="Fa">struct ucred *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This VOP call zeroes/deallocates storage for an offset range in a
- file. It is used to implement the <a class="Xr">fspacectl(2)</a> system
- call.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">offset</var></dt>
- <dd>The start of the range to deallocate storage in the file.</dd>
- <dt><var class="Fa">len</var></dt>
- <dd>The length of the range to deallocate storage in the file.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The flags of this call. This should be set to 0 for now.</dd>
- <dt><var class="Fa">ioflag</var></dt>
- <dd>Directives and hints to be given to the file system.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The credentials of the caller.</dd>
-</dl>
-<p class="Pp"><var class="Fa">*offset</var> and <var class="Fa">*len</var> are
- updated to reflect the portion of the range that still needs to be
- zeroed/deallocated on return. Partial result is considered a successful
- operation. For a non-partial successful completion,
- <var class="Fa">*len</var> is updated to be the value 0, and
- <var class="Fa">*offset</var> is incremented by the number of bytes zeroed
- before the end-of-file.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode should be locked on entry and will still be locked on
- exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned if the call is successful, otherwise an
- appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>Invalid <var class="Fa">offset</var>, <var class="Fa">len</var> or
- <var class="Fa">flags</var> parameters are passed into this VOP call.</dd>
- <dt id="ENODEV">[<a class="permalink" href="#ENODEV"><code class="Er">ENODEV</code></a>]</dt>
- <dd>The vnode type is not supported by this VOP call.</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>An append-only flag is set on the file, but the caller is attempting to
- zero before the current end of file.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><code class="Nm">VOP_DEALLOCATE</code> and this manual page was
- written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>&gt;
- under sponsorship from the FreeBSD Foundation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 25, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_FSYNC.9 4.html b/static/freebsd/man9/VOP_FSYNC.9 4.html
deleted file mode 100644
index ae6e846b..00000000
--- a/static/freebsd/man9/VOP_FSYNC.9 4.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_FSYNC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_FSYNC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_FDATASYNC</code>,
- <code class="Nm">VOP_FSYNC</code> &#x2014; <span class="Nd">flush file
- system buffers for a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FDATASYNC</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FSYNC</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- waitfor</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#VOP_FSYNC"><code class="Fn" id="VOP_FSYNC">VOP_FSYNC</code></a>()
- ensures that a file can be recovered to its current state following a crash.
- That typically requires flushing the file's dirty buffers, its inode, and
- possibly other filesystem metadata to persistent media.
- <code class="Fn">VOP_FSYNC</code>() is used to implement the
- <a class="Xr">sync(2)</a> and <a class="Xr">fsync(2)</a> system calls.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">waitfor</var></dt>
- <dd>Whether the function should wait for I/O to complete. Possible values are:
- <dl class="Bl-tag">
- <dt id="MNT_WAIT"><a class="permalink" href="#MNT_WAIT"><code class="Dv">MNT_WAIT</code></a></dt>
- <dd>Synchronously wait for I/O to complete.</dd>
- <dt id="MNT_NOWAIT"><a class="permalink" href="#MNT_NOWAIT"><code class="Dv">MNT_NOWAIT</code></a></dt>
- <dd>Start all I/O, but do not wait for it.</dd>
- <dt id="MNT_LAZY"><a class="permalink" href="#MNT_LAZY"><code class="Dv">MNT_LAZY</code></a></dt>
- <dd>Push data not written by file system syncer.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The calling thread.</dd>
-</dl>
-<p class="Pp" id="VOP_FDATASYNC"><a class="permalink" href="#VOP_FDATASYNC"><code class="Fn">VOP_FDATASYNC</code></a>()
- is similar, but it does not require that all of the file's metadata be
- flushed. It only requires that the file's data be recoverable after a crash.
- That implies that the data itself must be flushed to disk, as well as some
- metadata such as the file's size but not necessarily its attributes.
- <code class="Fn">VOP_FDATASYNC</code>() should always wait for I/O to
- complete, as if called with <code class="Dv">MNT_WAIT</code>.
- <code class="Fn">VOP_FDATASYNC</code>() is used to implement
- <a class="Xr">fdatasync(2)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode should be exclusively locked on entry, and stays locked
- on return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned if the call is successful, otherwise an
- appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt>
- <dd>Quota exceeded.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 22, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_GETACL.9 4.html b/static/freebsd/man9/VOP_GETACL.9 4.html
deleted file mode 100644
index 0174986a..00000000
--- a/static/freebsd/man9/VOP_GETACL.9 4.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_GETACL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_GETACL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_GETACL</code> &#x2014;
- <span class="Nd">retrieve access control list for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETACL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t
- type</var>, <var class="Fa" style="white-space: nowrap;">struct acl
- *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to retrieve the access control list
- (ACL) from a file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of ACL to retrieve.</dd>
- <dt><var class="Fa">aclp</var></dt>
- <dd>A pointer to an ACL structure to receive the ACL data.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread requesting the ACL.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be
- <code class="Dv">NULL</code> to indicate that access control checks are not
- to be performed, if possible. This cred setting might be used to allow the
- kernel to authorize ACL retrieval that the active process might not be
- permitted to do.</p>
-<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of
- file and directory ACL interfaces. More information about ACL management in
- kernel may be found in <a class="Xr">acl(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the <var class="Fa">aclp</var> pointer will point to a valid
- ACL, then zero is returned. Otherwise, an appropriate error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The ACL type passed is invalid for this vnode.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have the appropriate privilege.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Sufficient memory is not available to fulfill the request.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_GETACL</code>().</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_SETACL(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 23, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_GETEXTATTR.9 4.html b/static/freebsd/man9/VOP_GETEXTATTR.9 4.html
deleted file mode 100644
index 0598c752..00000000
--- a/static/freebsd/man9/VOP_GETEXTATTR.9 4.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_GETEXTATTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_GETEXTATTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_GETEXTATTR</code> &#x2014;
- <span class="Nd">retrieve named extended attribute from a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/extattr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETEXTATTR</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">int attrnamespace</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">struct uio *uio</var>, <var class="Fa">size_t
- *size</var>, <var class="Fa">struct ucred *cred</var>,
- <var class="Fa">struct thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to retrieve a specific named extended
- attribute from a file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">attrnamespace</var></dt>
- <dd>Integer constant indicating which extended attribute namespace the
- attribute name is present in.</dd>
- <dt><var class="Fa">name</var></dt>
- <dd>Pointer to a null-terminated character string containing the attribute
- name.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>If not <code class="Dv">NULL</code>, on return it will contain the number
- of bytes required to read all of the attribute data. In most cases
- <var class="Fa">uio</var> will be <code class="Dv">NULL</code> when
- <var class="Fa">size</var> is not, and vice versa.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread requesting the extended attribute.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be
- <code class="Dv">NULL</code> to indicate that access control checks are not
- to be performed, if possible. This <var class="Fa">cred</var> setting might
- be used to allow the kernel to authorize extended attribute retrieval that
- the active process might not be permitted to do.</p>
-<p class="Pp">Extended attribute semantics may vary by file system implementing
- the call. More information on extended attributes may be found in
- <a class="Xr">extattr(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">On success, zero will be returned, and the uio structure will be
- updated to reflect data read. Otherwise, an appropriate error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOATTR">[<a class="permalink" href="#ENOATTR"><code class="Er">ENOATTR</code></a>]</dt>
- <dd>The requested attribute was not defined for this vnode.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have the appropriate privilege.</dd>
- <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt>
- <dd>The request was not valid in this file system for the specified vnode and
- attribute name.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Sufficient memory is not available to fulfill the request.</dd>
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd>The uio structure refers to an invalid userspace address.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">name</var>, <var class="Fa">namespace</var>, or
- <var class="Fa">uio</var> argument is invalid.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_GETEXTATTR</code>().</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_LISTEXTATTR(9)</a>,
- <a class="Xr">VOP_SETEXTATTR(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">By passing in the empty string as the attribute name, some file
- systems will return a list of defined names on the target vnode for the
- requested namespace. This is a bad API, and will be replaced by an explicit
- VOP.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 23, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_GETPAGES.9 3.html b/static/freebsd/man9/VOP_GETPAGES.9 3.html
deleted file mode 100644
index 80204db4..00000000
--- a/static/freebsd/man9/VOP_GETPAGES.9 3.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_GETPAGES(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_GETPAGES(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_GETPAGES</code>,
- <code class="Nm">VOP_PUTPAGES</code> &#x2014; <span class="Nd">read or write
- VM pages from a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETPAGES</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">vm_page_t *ma</var>, <var class="Fa">int count</var>,
- <var class="Fa">int *rbehind</var>, <var class="Fa">int *rahead</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PUTPAGES</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">vm_page_t *ma</var>, <var class="Fa">int bytecount</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int *rtvals</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VOP_GETPAGES"><code class="Fn" id="VOP_GETPAGES">VOP_GETPAGES</code></a>()
- method is called to read in pages of virtual memory which are backed by
- ordinary files. If other adjacent pages are backed by adjacent regions of
- the same file, <code class="Fn">VOP_GETPAGES</code>() is requested to read
- those pages as well, although it is not required to do so. The
- <code class="Fn">VOP_PUTPAGES</code>() method does the converse; that is to
- say, it writes out adjacent dirty pages of virtual memory.</p>
-<p class="Pp">On entry, the vnode lock is held but neither the page queue nor VM
- object locks are held. Both methods return in the same state on both success
- and error returns.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The file to access.</dd>
- <dt><var class="Fa">ma</var></dt>
- <dd>Pointer to the first element of an array of pages representing a
- contiguous region of the file to be read or written.</dd>
- <dt><var class="Fa">count</var></dt>
- <dd>The length of the <var class="Fa">ma</var> array.</dd>
- <dt><var class="Fa">bytecount</var></dt>
- <dd>The number of bytes that should be written from the pages of the
- array.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>A bitfield of flags affecting the function operation. If
- <code class="Dv">VM_PAGER_PUT_SYNC</code> is set, the write should be
- synchronous; control must not be returned to the caller until after the
- write is finished. If <code class="Dv">VM_PAGER_PUT_INVAL</code> is set,
- the pages are to be invalidated after being written. If
- <code class="Dv">VM_PAGER_PUT_NOREUSE</code> is set, the I/O performed
- should set the IO_NOREUSE flag, to indicate to the filesystem that pages
- should be marked for fast reuse if needed. This could occur via a call to
- <a class="Xr">vm_page_deactivate_noreuse(9)</a>, which puts such pages
- onto the head of the inactive queue. If
- <code class="Dv">VM_PAGER_CLUSTER_OK</code> is set, writes may be delayed,
- so that related writes can be coalesced for efficiency, e.g., using the
- clustering mechanism of the buffer cache.</dd>
- <dt id="VOP_PUTPAGES"><var class="Fa">rtvals</var></dt>
- <dd>An array of VM system result codes indicating the status of each page
- written by
- <a class="permalink" href="#VOP_PUTPAGES"><code class="Fn">VOP_PUTPAGES</code></a>().</dd>
- <dt><var class="Fa">rbehind</var></dt>
- <dd>Optional pointer to integer specifying number of pages to be read behind,
- if possible. If the filesystem supports that feature, number of actually
- read pages is reported back, otherwise zero is returned.</dd>
- <dt><var class="Fa">rahead</var></dt>
- <dd>Optional pointer to integer specifying number of pages to be read ahead,
- if possible. If the filesystem supports that feature, number of actually
- read pages is reported back, otherwise zero is returned.</dd>
-</dl>
-<p class="Pp" id="VOP_PUTPAGES~2">The status of the
- <a class="permalink" href="#VOP_PUTPAGES~2"><code class="Fn">VOP_PUTPAGES</code></a>()
- method is returned on a page-by-page basis in the array
- <var class="Fa">rtvals[]</var>. The possible status values are as
- follows:</p>
-<dl class="Bl-tag">
- <dt id="VM_PAGER_OK"><a class="permalink" href="#VM_PAGER_OK"><code class="Dv">VM_PAGER_OK</code></a></dt>
- <dd>The page was successfully written. The implementation must call
- <a class="Xr">vm_page_undirty(9)</a> to mark the page as clean.</dd>
- <dt id="VM_PAGER_PEND"><a class="permalink" href="#VM_PAGER_PEND"><code class="Dv">VM_PAGER_PEND</code></a></dt>
- <dd>The page was scheduled to be written asynchronously. When the write
- completes, the completion callback should call
- <a class="Xr">vm_object_pip_wakeup(9)</a> and
- <a class="Xr">vm_page_sunbusy(9)</a> to clear the busy flag and awaken any
- other threads waiting for this page, in addition to calling
- <a class="Xr">vm_page_undirty(9)</a>.</dd>
- <dt id="VM_PAGER_BAD"><a class="permalink" href="#VM_PAGER_BAD"><code class="Dv">VM_PAGER_BAD</code></a></dt>
- <dd>The page was entirely beyond the end of the backing file. This condition
- should not be possible if the vnode's file system is correctly
- implemented.</dd>
- <dt id="VM_PAGER_ERROR"><a class="permalink" href="#VM_PAGER_ERROR"><code class="Dv">VM_PAGER_ERROR</code></a></dt>
- <dd>The page could not be written because of an error on the underlying
- storage medium or protocol.</dd>
- <dt id="VM_PAGER_FAIL"><a class="permalink" href="#VM_PAGER_FAIL"><code class="Dv">VM_PAGER_FAIL</code></a></dt>
- <dd>Treated identically to <code class="Dv">VM_PAGER_ERROR</code>.</dd>
- <dt id="VM_PAGER_AGAIN"><a class="permalink" href="#VM_PAGER_AGAIN"><code class="Dv">VM_PAGER_AGAIN</code></a></dt>
- <dd>The page was not handled by this request.</dd>
-</dl>
-<p class="Pp" id="VOP_GETPAGES~2">The
- <a class="permalink" href="#VOP_GETPAGES~2"><code class="Fn">VOP_GETPAGES</code></a>()
- method must populate and validate all requested pages in order to return
- success. It is expected to release any pages in <var class="Fa">ma</var>
- that it does not successfully handle, by calling
- <a class="Xr">vm_page_free(9)</a>. When it succeeds,
- <code class="Fn">VOP_GETPAGES</code>() must set the valid bits
- appropriately. Upon entry to <code class="Fn">VOP_GETPAGES</code>(), all
- pages in <var class="Fa">ma</var> are busied exclusively. Upon successful
- return, the pages must all be busied exclusively as well, but pages may be
- unbusied during processing. The filesystem is responsible for activating
- paged-out pages, but this does not necessarily need to be done within
- <code class="Fn">VOP_GETPAGES</code>() depending on the architecture of the
- particular filesystem.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If it successfully reads all pages in <var class="Fa">ma</var>,
- <code class="Fn">VOP_GETPAGES</code>() returns
- <code class="Dv">VM_PAGER_OK</code>; otherwise, it returns
- <code class="Dv">VM_PAGER_ERROR</code>. By convention, the return value of
- <code class="Fn">VOP_PUTPAGES</code>() is
- <var class="Fa">rtvals[0]</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_object_pip_wakeup(9)</a>,
- <a class="Xr">vm_page_free(9)</a>, <a class="Xr">vm_page_sunbusy(9)</a>,
- <a class="Xr">vm_page_undirty(9)</a>, <a class="Xr">vm_page_xunbusy(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span> and then substantially rewritten by
- <br/>
- <span class="An">Garrett Wollman</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 29, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_INACTIVE.9 4.html b/static/freebsd/man9/VOP_INACTIVE.9 4.html
deleted file mode 100644
index 033ea412..00000000
--- a/static/freebsd/man9/VOP_INACTIVE.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_INACTIVE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_INACTIVE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_INACTIVE</code>,
- <code class="Nm">VOP_RECLAIM</code> &#x2014; <span class="Nd">reclaim file
- system resources for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_INACTIVE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RECLAIM</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode being reclaimed.</dd>
-</dl>
-<p class="Pp" id="VOP_INACTIVE"><a class="permalink" href="#VOP_INACTIVE"><code class="Fn">VOP_INACTIVE</code></a>()
- is usually called when the kernel is no longer using the vnode. However,
- there is no guarantee that it will be called at all, for example if the last
- reference was dropped while the vnode lock could not be upgraded to
- exclusive without sleeping. This may be because the reference count reaches
- zero or it may be that the file system is being forcibly unmounted while
- there are open files. It can be used to reclaim space on the last close of
- an &#x2018;open but deleted&#x2019; file.</p>
-<p class="Pp" id="VOP_RECLAIM"><a class="permalink" href="#VOP_RECLAIM"><code class="Fn">VOP_RECLAIM</code></a>()
- is called when a vnode is being reused for a different file system. Any file
- system specific resources associated with the vnode should be freed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">For both <code class="Fn">VOP_INACTIVE</code>() and
- <code class="Fn">VOP_RECLAIM</code>(), the <var class="Fa">vp</var> will be
- exclusively locked on entry, and must be left exclusively locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 15, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_INOTIFY.9 4.html b/static/freebsd/man9/VOP_INOTIFY.9 4.html
deleted file mode 100644
index a7923e74..00000000
--- a/static/freebsd/man9/VOP_INOTIFY.9 4.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_INOTIFY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_INOTIFY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_INOTIFY</code> &#x2014;
- <span class="Nd">vnode inotify interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_INOTIFY</code>(<var class="Fa">struct</var>,
- <var class="Fa">vnode</var>, <var class="Fa">*vp</var>,
- <var class="Fa">struct</var>, <var class="Fa">vnode</var>,
- <var class="Fa">*dvp</var>, <var class="Fa">struct</var>,
- <var class="Fa">componentname</var>, <var class="Fa">*cnp</var>,
- <var class="Fa">int</var>, <var class="Fa">event</var>,
- <var class="Fa">uint32_t</var>, <var class="Fa">cookie</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_INOTIFY_ADD_WATCH</code>(<var class="Fa">struct</var>,
- <var class="Fa">vnode</var>, <var class="Fa">*vp</var>,
- <var class="Fa">struct</var>, <var class="Fa">inotify_softc</var>,
- <var class="Fa">*sc</var>, <var class="Fa">uint32_t</var>,
- <var class="Fa">mask</var>, <var class="Fa">uint32_t</var>,
- <var class="Fa">*wdp</var>, <var class="Fa">struct</var>,
- <var class="Fa">thread</var>, <var class="Fa">*td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VOP_INOTIFY"><code class="Fn" id="VOP_INOTIFY">VOP_INOTIFY</code></a>()
- operation notifies the <a class="Xr">inotify(2)</a> subsystem of a file
- system event on a vnode. The <var class="Fa">dvp</var> and
- <var class="Fa">cnp</var> arguments are optional and are only used to obtain
- a file name for the event. If they are omitted, the inotify subsystem will
- use the file name cache to find a name for the vnode, but this is more
- expensive.</p>
-<p class="Pp" id="VOP_INOTIFY_ADD_WATCH">The
- <a class="permalink" href="#VOP_INOTIFY_ADD_WATCH"><code class="Fn">VOP_INOTIFY_ADD_WATCH</code></a>()
- operation is for internal use by the inotify subsystem to add a watch to a
- vnode.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The <code class="Fn">VOP_INOTIFY</code>() operation does not
- assume any particular vnode lock state. The
- <code class="Fn">VOP_INOTIFY_ADD_WATCH</code>() operation should be called
- with the vnode locked.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">inotify(2)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 27, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_IOCTL.9 4.html b/static/freebsd/man9/VOP_IOCTL.9 4.html
deleted file mode 100644
index 9af742c8..00000000
--- a/static/freebsd/man9/VOP_IOCTL.9 4.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_IOCTL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_IOCTL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_IOCTL</code> &#x2014; <span class="Nd">device
- specific control</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_IOCTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">u_long
- command</var>, <var class="Fa" style="white-space: nowrap;">caddr_t
- data</var>, <var class="Fa" style="white-space: nowrap;">int fflag</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>,
- <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Manipulate a file in device dependent ways.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file (normally representing a device).</dd>
- <dt><var class="Fa">command</var></dt>
- <dd>The device specific operation to perform.</dd>
- <dt><var class="Fa">data</var></dt>
- <dd>Extra data for the specified operation.</dd>
- <dt><var class="Fa">fflag</var></dt>
- <dd>Some flags ???</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The caller's credentials.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The calling thread.</dd>
-</dl>
-<p class="Pp">Most file systems do not implement this entry point.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The file should not be locked on entry.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, zero is returned, otherwise an appropriate error
- code.</p>
-<p class="Pp">If the ioctl is not recognized or not handled,
- <code class="Er">ENOTTY</code> should be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_LINK.9 4.html b/static/freebsd/man9/VOP_LINK.9 4.html
deleted file mode 100644
index ed5ee46b..00000000
--- a/static/freebsd/man9/VOP_LINK.9 4.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_LINK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_LINK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_LINK</code> &#x2014; <span class="Nd">create
- a new name for a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This links a new name in the specified directory to an existing
- file.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dvp</var></dt>
- <dd>The vnode of the directory.</dd>
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file to be linked.</dd>
- <dt><var class="Fa">cnp</var></dt>
- <dd>Pathname information about the file.</dd>
-</dl>
-<p class="Pp">The pathname info should <i class="Em">not</i> be released on exit
- because it is done by the caller. The directory and file vnodes should
- <i class="Em">not</i> be released on exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp"><a class="permalink" href="#VOP_LINK"><code class="Fn" id="VOP_LINK">VOP_LINK</code></a>()
- expects the directory and file vnodes to be locked on entry and will leave
- the vnodes locked on return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned if the file was linked successfully, otherwise an
- error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EMLINK">[<a class="permalink" href="#EMLINK"><code class="Er">EMLINK</code></a>]</dt>
- <dd>The file has too many links.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The file is immutable.</dd>
- <dt id="EXDEV">[<a class="permalink" href="#EXDEV"><code class="Er">EXDEV</code></a>]</dt>
- <dd>A hard link is not possible between different file systems.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vn_lock(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was originally written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html b/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html
deleted file mode 100644
index 9f6bf786..00000000
--- a/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_LISTEXTATTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_LISTEXTATTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_LISTEXTATTR</code> &#x2014;
- <span class="Nd">retrieve a list of named extended attributes from a
- vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/extattr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LISTEXTATTR</code>(<var class="Fa">struct vnode
- *vp</var>, <var class="Fa">int attrnamespace</var>, <var class="Fa">struct
- uio *uio</var>, <var class="Fa">size_t *size</var>, <var class="Fa">struct
- ucred *cred</var>, <var class="Fa">struct thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to retrieve a list of named extended
- attributes from a specified namespace on a file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">attrnamespace</var></dt>
- <dd>Integer constant indicating which extended attribute namespace the
- attribute name is present in.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read. The resulting data will be a list of
- attribute names. Each list entry consists of a single byte containing the
- length of the attribute name, followed by the attribute name. The
- attribute name is not terminated by ASCII
- <code class="Dv">NUL</code>.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>If not <code class="Dv">NULL</code>, on return it will contain the number
- of bytes required to read the list. In most cases
- <var class="Fa">uio</var> will be <code class="Dv">NULL</code> when
- <var class="Fa">size</var> is not, and vice versa.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread requesting the extended attribute.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be
- <code class="Dv">NULL</code> to indicate that access control checks are not
- to be performed, if possible. This <var class="Fa">cred</var> setting might
- be used to allow the kernel to authorize extended attribute retrieval that
- the active process might not be permitted to do.</p>
-<p class="Pp">Extended attribute semantics may vary by file system implementing
- the call. More information on extended attributes may be found in
- <a class="Xr">extattr(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">On success, zero will be returned, and the
- <var class="Fa">uio</var> structure will be updated to reflect the list
- read. Otherwise, an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have the appropriate privilege.</dd>
- <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt>
- <dd>The request was not valid in this file system for the specified vnode and
- attribute name.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Sufficient memory is not available to fulfill the request.</dd>
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd>The <var class="Fa">uio</var> structure refers to an invalid userspace
- address.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">namespace</var> or <var class="Fa">uio</var> argument
- is invalid.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_LISTEXTATTR</code>().</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_SETEXTATTR(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 19, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_LOCK.9 4.html b/static/freebsd/man9/VOP_LOCK.9 4.html
deleted file mode 100644
index 1045d3fb..00000000
--- a/static/freebsd/man9/VOP_LOCK.9 4.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_LOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_LOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_LOCK</code>,
- <code class="Nm">VOP_UNLOCK</code>, <code class="Nm">VOP_ISLOCKED</code>,
- <code class="Nm">vn_lock</code> &#x2014; <span class="Nd">serialize access
- to a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_UNLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ISLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_lock</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These calls are used to serialize access to the file system, such
- as to prevent two writes to the same file from happening at the same
- time.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode being locked or unlocked.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>One of the lock request types:
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt>
- <dd>Shared lock.</dd>
- <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt>
- <dd>Exclusive lock.</dd>
- <dt id="LK_UPGRADE"><a class="permalink" href="#LK_UPGRADE"><code class="Dv">LK_UPGRADE</code></a></dt>
- <dd>Shared-to-exclusive upgrade.</dd>
- <dt id="LK_DOWNGRADE"><a class="permalink" href="#LK_DOWNGRADE"><code class="Dv">LK_DOWNGRADE</code></a></dt>
- <dd>Exclusive-to-shared downgrade.</dd>
- <dt id="LK_RELEASE"><a class="permalink" href="#LK_RELEASE"><code class="Dv">LK_RELEASE</code></a></dt>
- <dd>Release any type of lock.</dd>
- <dt id="LK_DRAIN"><a class="permalink" href="#LK_DRAIN"><code class="Dv">LK_DRAIN</code></a></dt>
- <dd>Wait for all lock activity to end.</dd>
- </dl>
- </div>
- <p class="Pp">The lock type may be <i class="Em">or</i>'ed with these lock
- flags:</p>
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="LK_NOWAIT"><a class="permalink" href="#LK_NOWAIT"><code class="Dv">LK_NOWAIT</code></a></dt>
- <dd>Do not sleep to wait for lock.</dd>
- <dt id="LK_SLEEPFAIL"><a class="permalink" href="#LK_SLEEPFAIL"><code class="Dv">LK_SLEEPFAIL</code></a></dt>
- <dd>Sleep, then return failure.</dd>
- <dt id="LK_CANRECURSE"><a class="permalink" href="#LK_CANRECURSE"><code class="Dv">LK_CANRECURSE</code></a></dt>
- <dd>Allow recursive exclusive lock.</dd>
- <dt id="LK_NOWITNESS"><a class="permalink" href="#LK_NOWITNESS"><code class="Dv">LK_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this instance.</dd>
- </dl>
- </div>
- <p class="Pp">The lock type may be <i class="Em">or</i>'ed with these
- control flags:</p>
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="LK_INTERLOCK"><a class="permalink" href="#LK_INTERLOCK"><code class="Dv">LK_INTERLOCK</code></a></dt>
- <dd>Specify when the caller already has a simple lock
- (<a class="permalink" href="#VOP_LOCK"><code class="Fn" id="VOP_LOCK">VOP_LOCK</code></a>()
- will unlock the simple lock after getting the lock).</dd>
- <dt id="LK_RETRY"><a class="permalink" href="#LK_RETRY"><code class="Dv">LK_RETRY</code></a></dt>
- <dd>Retry until locked.</dd>
- </dl>
- </div>
- <p class="Pp" id="vn_lock">Kernel code should use
- <a class="permalink" href="#vn_lock"><code class="Fn">vn_lock</code></a>()
- to lock a vnode rather than calling <code class="Fn">VOP_LOCK</code>()
- directly. <code class="Fn">vn_lock</code>() also does not want a thread
- specified as argument but it assumes curthread to be used.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 23, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_LOOKUP.9 4.html b/static/freebsd/man9/VOP_LOOKUP.9 4.html
deleted file mode 100644
index 2bc6165b..00000000
--- a/static/freebsd/man9/VOP_LOOKUP.9 4.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_LOOKUP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_LOOKUP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_LOOKUP</code> &#x2014;
- <span class="Nd">lookup a component of a pathname</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/namei.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LOOKUP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This entry point looks up a single pathname component in a given
- directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dvp</var></dt>
- <dd>The locked vnode of the directory to search.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>The address of a variable where the resulting locked vnode should be
- stored.</dd>
- <dt><var class="Fa">cnp</var></dt>
- <dd>The pathname component to be searched for. It is a pointer to a
- componentname structure defined as follows:
- <div class="Bd Pp Li">
- <pre>struct componentname {
- /*
- * Arguments to lookup.
- */
- u_long cn_nameiop; /* namei operation */
- u_long cn_flags; /* flags to namei */
- struct thread *cn_thread; /* thread requesting lookup */
- struct ucred *cn_cred; /* credentials */
- int cn_lkflags; /* Lock flags LK_EXCLUSIVE or LK_SHARED */
- /*
- * Shared between lookup and commit routines.
- */
- char *cn_pnbuf; /* pathname buffer */
- char *cn_nameptr; /* pointer to looked up name */
- long cn_namelen; /* length of looked up component */
-};</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp">Convert a component of a pathname into a pointer to a locked
- vnode. This is a very central and rather complicated routine. If the file
- system is not maintained in a strict tree hierarchy, this can result in a
- deadlock situation.</p>
-<p class="Pp">The <var class="Fa">cnp-&gt;cn_nameiop</var> argument is
- <code class="Dv">LOOKUP</code>, <code class="Dv">CREATE</code>,
- <code class="Dv">RENAME</code>, or <code class="Dv">DELETE</code> depending
- on the intended use of the object. When <code class="Dv">CREATE</code>,
- <code class="Dv">RENAME</code>, or <code class="Dv">DELETE</code> is
- specified, information usable in creating, renaming, or deleting a directory
- entry may be calculated.</p>
-<p class="Pp">Overall outline of VOP_LOOKUP:</p>
-<div class="Bd Pp Bd-indent">Check accessibility of directory. Look for name in
- cache, if found, then return name. Search for name in directory, goto to found
- or notfound as appropriate.</div>
-<p class="Pp">notfound:</p>
-<div class="Bd Pp Bd-indent">If creating or renaming and at end of pathname,
- return <code class="Er">EJUSTRETURN</code>, leaving info on available slots
- else return <code class="Er">ENOENT</code>.</div>
-<p class="Pp">found:</p>
-<div class="Bd Pp Bd-indent">If at end of path and deleting, return information
- to allow delete. If at end of path and renaming, lock target inode and return
- info to allow rename. If not at end, add name to cache; if at end and neither
- creating nor deleting, add name to cache.</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The directory <var class="Fa">dvp</var> should be locked on entry
- and exit, regardless of error condition. If an entry is found in the
- directory, it will be returned locked.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned with <var class="Fa">*vpp</var> set to the locked
- vnode of the file if the component is found. If the component being searched
- for is &quot;.&quot;, then the vnode just has an extra reference added to it
- with <a class="Xr">vref(9)</a>. The caller must take care to release the
- locks appropriately in this case.</p>
-<p class="Pp">If the component is not found and the operation is
- <code class="Dv">CREATE</code> or <code class="Dv">RENAME</code>, the flag
- <code class="Dv">ISLASTCN</code> is specified and the operation would
- succeed, the special return value <code class="Er">EJUSTRETURN</code> is
- returned. Otherwise, an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt>
- <dd>The vnode <var class="Fa">dvp</var> does not represent a directory.</dd>
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The component <var class="Fa">dvp</var> was not found in this
- directory.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>Access for the specified operation is denied.</dd>
- <dt id="EJUSTRETURN">[<a class="permalink" href="#EJUSTRETURN"><code class="Er">EJUSTRETURN</code></a>]</dt>
- <dd>A <code class="Dv">CREATE</code> or <code class="Dv">RENAME</code>
- operation would be successful.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_ACCESS(9)</a>,
- <a class="Xr">VOP_CREATE(9)</a>, <a class="Xr">VOP_MKDIR(9)</a>,
- <a class="Xr">VOP_MKNOD(9)</a>, <a class="Xr">VOP_RENAME(9)</a>,
- <a class="Xr">VOP_SYMLINK(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The function <code class="Nm">VOP_LOOKUP</code> appeared in
- <span class="Ux">4.3BSD</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>, with some text from comments in
- <span class="Pa">ufs_lookup.c</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 8, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_OPENCLOSE.9 4.html b/static/freebsd/man9/VOP_OPENCLOSE.9 4.html
deleted file mode 100644
index 14b421c1..00000000
--- a/static/freebsd/man9/VOP_OPENCLOSE.9 4.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_OPEN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_OPEN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_OPEN</code>,
- <code class="Nm">VOP_CLOSE</code> &#x2014; <span class="Nd">open or close a
- file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_OPEN</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>, <var class="Fa" style="white-space: nowrap;">struct file
- *fp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_CLOSE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#VOP_OPEN"><code class="Fn" id="VOP_OPEN">VOP_OPEN</code></a>()
- entry point is called before a file is accessed by a process and the
- <code class="Fn">VOP_CLOSE</code>() entry point is called after a file is
- finished with by the process.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">mode</var></dt>
- <dd>The access mode required by the calling process.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The caller's credentials.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread which is accessing the file.</dd>
- <dt><var class="Fa">fp</var></dt>
- <dd>The file being opened.</dd>
-</dl>
-<p class="Pp" id="VOP_OPEN~2">Pointer to the file <var class="Fa">fp</var> is
- useful for file systems which require such information, e.g.,
- <a class="Xr">fdescfs(5)</a>. Use
- &#x2018;<code class="Li">NULL</code>&#x2019; as <var class="Fa">fp</var>
- argument to
- <a class="permalink" href="#VOP_OPEN~2"><code class="Fn">VOP_OPEN</code></a>()
- for in-kernel opens.</p>
-<p class="Pp">The access mode is a set of flags, including
- <code class="Dv">FREAD</code>, <code class="Dv">FWRITE</code>,
- <code class="Dv">O_NONBLOCK</code>, <code class="Dv">O_APPEND</code>.</p>
-<p class="Pp" id="VOP_CLOSE">The thread <var class="Fa">td</var> passed to
- <a class="permalink" href="#VOP_CLOSE"><code class="Fn">VOP_CLOSE</code></a>()
- may be &#x2018;<code class="Li">NULL</code>&#x2019; if the last reference to
- the open file is released from a kernel context, e.g., the destruction of a
- socket buffer containing the file reference in a
- <code class="Dv">SCM_RIGHTS</code> message.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp"><code class="Fn">VOP_OPEN</code>() expects
- <var class="Fa">vp</var> to be locked on entry and will leave it locked on
- return.</p>
-<p class="Pp" id="VOP_CLOSE~2"><a class="permalink" href="#VOP_CLOSE~2"><code class="Fn">VOP_CLOSE</code></a>()
- expects at least a reference to be associated with the vnode and does not
- care whether the vnode is locked or not. The lock and reference state is
- left unchanged on return. Note that <var class="Fa">vn_close</var> expects
- an unlocked, referenced vnode and will dereference the vnode prior to
- returning.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 17, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_PATHCONF.9 4.html b/static/freebsd/man9/VOP_PATHCONF.9 4.html
deleted file mode 100644
index 7b56f1fb..00000000
--- a/static/freebsd/man9/VOP_PATHCONF.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_PATHCONF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_PATHCONF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_PATHCONF</code> &#x2014;
- <span class="Nd">return POSIX pathconf information</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/unistd.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PATHCONF</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- name</var>, <var class="Fa" style="white-space: nowrap;">long
- *retval</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to get information about.</dd>
- <dt><var class="Fa">name</var></dt>
- <dd>The type of information to return.</dd>
- <dt><var class="Fa">retval</var></dt>
- <dd>The place to return the information.</dd>
-</dl>
-<p class="Pp">The value of <var class="Fa">name</var> specifies what should be
- returned:</p>
-<dl class="Bl-tag">
- <dt id="_PC_LINK_MAX"><a class="permalink" href="#_PC_LINK_MAX"><code class="Dv">_PC_LINK_MAX</code></a></dt>
- <dd>The maximum number of links to a file.</dd>
- <dt id="_PC_NAME_MAX"><a class="permalink" href="#_PC_NAME_MAX"><code class="Dv">_PC_NAME_MAX</code></a></dt>
- <dd>The maximum number of bytes in a file name.</dd>
- <dt id="_PC_PATH_MAX"><a class="permalink" href="#_PC_PATH_MAX"><code class="Dv">_PC_PATH_MAX</code></a></dt>
- <dd>The maximum number of bytes in a pathname.</dd>
- <dt id="_PC_PIPE_BUF"><a class="permalink" href="#_PC_PIPE_BUF"><code class="Dv">_PC_PIPE_BUF</code></a></dt>
- <dd>The maximum number of bytes which will be written atomically to a
- pipe.</dd>
- <dt id="_PC_CHOWN_RESTRICTED"><a class="permalink" href="#_PC_CHOWN_RESTRICTED"><code class="Dv">_PC_CHOWN_RESTRICTED</code></a></dt>
- <dd>Return 1 if appropriate privileges are required for the
- <a class="Xr">chown(2)</a> system call, otherwise 0.</dd>
- <dt id="_PC_NO_TRUNC"><a class="permalink" href="#_PC_NO_TRUNC"><code class="Dv">_PC_NO_TRUNC</code></a></dt>
- <dd>Return 1 if file names longer than <code class="Dv">KERN_NAME_MAX</code>
- are truncated.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If <var class="Fa">name</var> is recognized,
- <var class="Fa">*retval</var> is set to the specified value and zero is
- returned, otherwise <code class="Er">EINVAL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pathconf(2)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 31, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_PRINT.9 4.html b/static/freebsd/man9/VOP_PRINT.9 4.html
deleted file mode 100644
index 5e66657d..00000000
--- a/static/freebsd/man9/VOP_PRINT.9 4.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_PRINT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_PRINT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_PRINT</code> &#x2014; <span class="Nd">print
- debugging information</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PRINT</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to print.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_RDWR.9 4.html b/static/freebsd/man9/VOP_RDWR.9 4.html
deleted file mode 100644
index 9010053b..00000000
--- a/static/freebsd/man9/VOP_RDWR.9 4.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_RDWR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_RDWR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_READ</code>,
- <code class="Nm">VOP_WRITE</code> &#x2014; <span class="Nd">read or write a
- file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READ</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_WRITE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These entry points read or write the contents of a file.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read or written.</dd>
- <dt><var class="Fa">ioflag</var></dt>
- <dd>Various flags.</dd>
- <dt><var class="Fa">cnp</var></dt>
- <dd>The credentials of the caller.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">ioflag</var> argument is used to give
- directives and hints to the file system. When attempting a read, the high 16
- bits are used to provide a read-ahead hint (in units of file system blocks)
- that the file system should attempt. The low 16 bits are a bit mask which
- can contain the following flags:</p>
-<dl class="Bl-tag">
- <dt id="IO_UNIT"><a class="permalink" href="#IO_UNIT"><code class="Dv">IO_UNIT</code></a></dt>
- <dd>Do I/O as atomic unit.</dd>
- <dt id="IO_APPEND"><a class="permalink" href="#IO_APPEND"><code class="Dv">IO_APPEND</code></a></dt>
- <dd>Append write to end.</dd>
- <dt id="IO_SYNC"><a class="permalink" href="#IO_SYNC"><code class="Dv">IO_SYNC</code></a></dt>
- <dd>Do I/O synchronously.</dd>
- <dt id="IO_NODELOCKED"><a class="permalink" href="#IO_NODELOCKED"><code class="Dv">IO_NODELOCKED</code></a></dt>
- <dd>Underlying node already locked.</dd>
- <dt id="IO_NDELAY"><a class="permalink" href="#IO_NDELAY"><code class="Dv">IO_NDELAY</code></a></dt>
- <dd><a class="permalink" href="#FNDELAY"><code class="Dv" id="FNDELAY">FNDELAY</code></a>
- flag set in file table.</dd>
- <dt id="IO_VMIO"><a class="permalink" href="#IO_VMIO"><code class="Dv">IO_VMIO</code></a></dt>
- <dd>Data already in VMIO space.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The file should be locked on entry and will still be locked on
- exit. Rangelock covering the whole i/o range should be owned around the
- call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt>
- <dd>An attempt was made to write a file that exceeds the process's file size
- limit or the maximum file size.</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>An append-only flag is set on the file, but the caller is attempting to
- write before the current end of file.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_READDIR.9 4.html b/static/freebsd/man9/VOP_READDIR.9 4.html
deleted file mode 100644
index 705579f4..00000000
--- a/static/freebsd/man9/VOP_READDIR.9 4.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_READDIR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_READDIR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_READDIR</code> &#x2014; <span class="Nd">read
- contents of a directory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/dirent.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">int
- *eofflag</var>, <var class="Fa" style="white-space: nowrap;">int
- *ncookies</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- **cookies</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Read directory entries.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the directory.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>Where to read the directory contents.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The caller's credentials.</dd>
- <dt><var class="Fa">eofflag</var></dt>
- <dd>Return end of file status (<code class="Dv">NULL</code> if not
- wanted).</dd>
- <dt><var class="Fa">ncookies</var></dt>
- <dd>Number of directory cookies generated for NFS
- (<code class="Dv">NULL</code> if not wanted).</dd>
- <dt><var class="Fa">cookies</var></dt>
- <dd>Directory seek cookies generated for NFS (<code class="Dv">NULL</code> if
- not wanted).</dd>
-</dl>
-The directory contents are read into <var class="Vt">struct dirent</var>
- structures. If the on-disc data structures differ from this then they should
- be translated.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The directory should be locked on entry and will still be locked
- on exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-<p class="Pp">If this is called from the NFS server, the extra arguments
- <var class="Fa">eofflag</var>, <var class="Fa">ncookies</var> and
- <var class="Fa">cookies</var> are given. The value of
- <var class="Fa">*eofflag</var> should be set to TRUE if the end of the
- directory is reached while reading. The directory seek cookies are returned
- to the NFS client and may be used later to restart a directory read part way
- through the directory. There should be one cookie returned per directory
- entry. The value of the cookie should be the offset within the directory
- where the on-disc version of the appropriate directory entry starts. Memory
- for the cookies should be allocated using:</p>
-<div class="Bd Pp Li">
-<pre> ...;
- *ncookies = number of entries read;
- *cookies = malloc(*ncookies * sizeof(**cookies), M_TEMP, M_WAITOK);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>An attempt was made to read from an illegal offset in the directory.</dd>
- <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt>
- <dd>A read error occurred while reading the directory.</dd>
- <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt>
- <dd>Corrupted data was detected while reading the directory.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 13, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_READLINK.9 4.html b/static/freebsd/man9/VOP_READLINK.9 4.html
deleted file mode 100644
index 7d1fe2ac..00000000
--- a/static/freebsd/man9/VOP_READLINK.9 4.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_READLINK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_READLINK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_READLINK</code> &#x2014;
- <span class="Nd">read the target of a symbolic link</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READLINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This reads the target pathname of a symbolic link</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the symlink.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read or written.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The credentials of the caller.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode should be locked on entry and will still be locked on
- exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt>
- <dd>A read error occurred while reading the contents of the symlink.</dd>
- <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt>
- <dd>Corrupted data was detected while reading the contents of the
- symlink.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 30, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html b/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html
deleted file mode 100644
index 75a1e3d4..00000000
--- a/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_READ_PGCACHE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_READ_PGCACHE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_READ_PGCACHE</code> &#x2014;
- <span class="Nd">read a file, fast</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READ_PGCACHE</code>(<var class="Fa">struct vnode
- *vp</var>, <var class="Fa">struct uio *uio</var>, <var class="Fa">int
- ioflag</var>, <var class="Fa">struct ucred *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This entry point reads the contents of a file. The intent is to
- provide the data from caches, which do not require expensive operations or
- any disk IO. For instance, if filesystem uses normal VM page cache and
- maintains <code class="Dv">v_object</code> lifetime, it can use
- <a class="Xr">vn_read_from_obj(9)</a> helper to return data from the
- resident <code class="Dv">vp-&gt;v_object</code> pages.</p>
-<p class="Pp">The filesystem indicates support for the
- <code class="Nm">VOP_READ_PGCACHE</code> on specific vnode by setting the
- <code class="Dv">VIRF_PGREAD</code> flag in
- <code class="Dv">vp-&gt;v_irflag</code>.</p>
-<p class="Pp">The function does not need to satisfy the whole request; it also
- might choose to not provide any data. In these cases, the
- <var class="Fa">uio</var> must be advanced by the amount of read data,
- <code class="Nm">VOP_READ_PGCACHE</code> should return
- <code class="Er">EJUSTRETURN</code>, and VFS would handle the rest of the
- read operation using the <a class="Xr">VOP_READ(9)</a>.</p>
-<p class="Pp">The VFS layer does the same deadlock avoidance for accessing
- userspace pages from <code class="Nm">VOP_READ_PGCACHE</code> as for
- <a class="Xr">VOP_READ(9)</a>.</p>
-<p class="Pp">Vnode is not locked on the call entry and should not be locked on
- return. For a filesystem that requires vnode lock to return any data, it
- does not make sense to implement <code class="Nm">VOP_READ_PGCACHE</code>
- (and set <code class="Dv">VIRF_PGREAD</code> flag) since VFS arranges the
- call to <a class="Xr">VOP_READ(9)</a> as needed.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read.</dd>
- <dt><var class="Fa">ioflag</var></dt>
- <dd>Various flags, see <a class="Xr">VOP_READ(9)</a> for the list.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The credentials of the caller.</dd>
-</dl>
-<p class="Pp"><code class="Nm">VOP_READ_PGCACHE</code> does not handle non-zero
- <var class="Fa">ioflag</var> argument.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The file should be referenced on entry on entry and will still be
- referenced on exit. Rangelock covering the whole read range should be owned
- around the call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, when the whole request is satisfied,
- and no more data cannot be provided for it by any means. If more data can be
- returned, but <code class="Nm">VOP_READ_PGCACHE</code> was unable to provide
- it, <code class="Er">EJUSTRETURN</code> must be returned. The
- <code class="Dv">uio</code> records should be updated according to the
- partial operation done.</p>
-<p class="Pp">Otherwise an error code is returned, same as from
- <a class="Xr">VOP_READ(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_READ(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 28, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html b/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html
deleted file mode 100644
index 0cedb9d5..00000000
--- a/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_REALLOCBLKS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_REALLOCBLKS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_REALLOCBLKS</code> &#x2014;
- <span class="Nd">rearrange blocks in a file to be contiguous</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_REALLOCBLKS</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct
- cluster_save *buflist</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The file to manipulate.</dd>
- <dt><var class="Fa">buflist</var></dt>
- <dd>A list of buffers to rearrange.</dd>
-</dl>
-<p class="Pp">This seems to be part of a work in progress.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_REMOVE.9 4.html b/static/freebsd/man9/VOP_REMOVE.9 4.html
deleted file mode 100644
index 2ed9ccb2..00000000
--- a/static/freebsd/man9/VOP_REMOVE.9 4.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_REMOVE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_REMOVE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_REMOVE</code>,
- <code class="Nm">VOP_RMDIR</code> &#x2014; <span class="Nd">remove a file or
- directory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RMDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These entry points remove files and directories respectively.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dvp</var></dt>
- <dd>The vnode of the directory.</dd>
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file to be removed.</dd>
- <dt><var class="Fa">cnp</var></dt>
- <dd>Pathname information about the file.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">Both <var class="Fa">dvp</var> and <var class="Fa">vp</var> should
- be locked on entry and remain locked on return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The file is immutable.</dd>
- <dt id="ENOTEMPTY">[<a class="permalink" href="#ENOTEMPTY"><code class="Er">ENOTEMPTY</code></a>]</dt>
- <dd>An attempt was made to remove a directory which is not empty.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_RENAME.9 4.html b/static/freebsd/man9/VOP_RENAME.9 4.html
deleted file mode 100644
index aa517908..00000000
--- a/static/freebsd/man9/VOP_RENAME.9 4.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_RENAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_RENAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_RENAME</code> &#x2014;
- <span class="Nd">rename a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RENAME</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *fdvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *fvp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *fcnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode *tdvp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode *tvp</var>,
- <var class="Fa" style="white-space: nowrap;">struct componentname
- *tcnp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This renames a file and possibly changes its parent directory. If
- the destination object exists, it will be removed first.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">fdvp</var></dt>
- <dd>The vnode of the old parent directory.</dd>
- <dt><var class="Fa">fvp</var></dt>
- <dd>The vnode of the file to be renamed.</dd>
- <dt><var class="Fa">fcnp</var></dt>
- <dd>Pathname information about the file's current name.</dd>
- <dt><var class="Fa">tdvp</var></dt>
- <dd>The vnode of the new parent directory.</dd>
- <dt><var class="Fa">tvp</var></dt>
- <dd>The vnode of the target file (if it exists).</dd>
- <dt><var class="Fa">tcnp</var></dt>
- <dd>Pathname information about the file's new name.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The source directory and file are unlocked but are expected to
- have their ref count bumped on entry. The VOP routine is expected to
- <a class="Xr">vrele(9)</a> both prior to returning.</p>
-<p class="Pp">The destination directory and file are locked as well as having
- their ref count bumped. The VOP routine is expected to
- <a class="Xr">vput(9)</a> both prior to returning.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The file is immutable.</dd>
- <dt id="EXDEV">[<a class="permalink" href="#EXDEV"><code class="Er">EXDEV</code></a>]</dt>
- <dd>It is not possible to rename a file between different file systems.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>An attempt was made to rename <span class="Pa">.</span> or
- <span class="Pa">..</span>, or to perform an operation which would break
- the directory tree structure.</dd>
- <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt>
- <dd>An attempt was made to rename a directory to a file or vice versa.</dd>
- <dt id="ENOTEMPTY">[<a class="permalink" href="#ENOTEMPTY"><code class="Er">ENOTEMPTY</code></a>]</dt>
- <dd>An attempt was made to remove a directory which is not empty.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_REVOKE.9 4.html b/static/freebsd/man9/VOP_REVOKE.9 4.html
deleted file mode 100644
index 5044f9af..00000000
--- a/static/freebsd/man9/VOP_REVOKE.9 4.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_REVOKE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_REVOKE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_REVOKE</code> &#x2014;
- <span class="Nd">revoke access to a device and its aliases</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_REVOKE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#VOP_REVOKE"><code class="Fn" id="VOP_REVOKE">VOP_REVOKE</code></a>()
- will administratively revoke access to the device specified by
- <var class="Fa">vp</var>, as well as any aliases created via
- <a class="Xr">make_dev_alias(9)</a>. Further file operations on any of these
- devices by processes which have them open will nominally fail. The
- <var class="Fa">flags</var> must be set to <code class="Dv">REVOKEALL</code>
- to signify that all access will be revoked; any other value is invalid.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The <var class="Fa">vp</var> must be exclusively locked on entry,
- and will remain locked upon return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">make_dev_alias(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Brian Fundakowski
- Feldman</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 20, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_SETACL.9 4.html b/static/freebsd/man9/VOP_SETACL.9 4.html
deleted file mode 100644
index 48255ca0..00000000
--- a/static/freebsd/man9/VOP_SETACL.9 4.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_SETACL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_SETACL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_SETACL</code> &#x2014; <span class="Nd">set
- the access control list for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETACL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t
- type</var>, <var class="Fa" style="white-space: nowrap;">struct acl
- *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to set the access control list (ACL)
- for a file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of ACL to set.</dd>
- <dt><var class="Fa">aclp</var></dt>
- <dd>A pointer to an ACL structure from which to retrieve the ACL data.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread setting the ACL.</dd>
-</dl>
-<p class="Pp">The <var class="Fa">aclp</var> pointer may be
- <code class="Dv">NULL</code> to indicate that the specified ACL should be
- deleted.</p>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be
- <code class="Dv">NULL</code> to indicate that access control checks are not
- to be performed, if possible. This cred setting might be used to allow the
- kernel to authorize ACL changes that the active process might not be
- permitted to make.</p>
-<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of
- file and directory ACL interfaces. More information about ACL management in
- kernel may be found in <a class="Xr">acl(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the ACL is successfully set, then zero is returned. Otherwise,
- an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The ACL type passed is invalid for this vnode, or the ACL data is
- invalid.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have the appropriate privilege.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Sufficient memory is not available to fulfill the request.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_SETACL</code>().</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is out of space.</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>The file system is read-only.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 23, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_SETEXTATTR.9 4.html b/static/freebsd/man9/VOP_SETEXTATTR.9 4.html
deleted file mode 100644
index db8e3b4a..00000000
--- a/static/freebsd/man9/VOP_SETEXTATTR.9 4.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_SETEXTATTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_SETEXTATTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_SETEXTATTR</code> &#x2014;
- <span class="Nd">set named extended attribute for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/extattr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call may be used to set specific named extended
- attribute for a file or directory.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file or directory.</dd>
- <dt><var class="Fa">attrnamespace</var></dt>
- <dd>Integer constant indicating which extended attribute namespace the
- attribute name is present in.</dd>
- <dt><var class="Fa">name</var></dt>
- <dd>Pointer to a null-terminated character string containing the attribute
- name.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The location of the data to be read or written.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials to use in authorizing the request.</dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The thread setting the extended attribute.</dd>
-</dl>
-<p class="Pp">The uio structure is used in a manner similar to the argument of
- the same name in <a class="Xr">VOP_WRITE(9)</a>. However, as extended
- attributes provide a strict &quot;name=value&quot; semantic, non-zero
- offsets will be rejected.</p>
-<p class="Pp">The <var class="Fa">uio</var> pointer may be
- <code class="Dv">NULL</code> to indicate that the specified extended
- attribute should be deleted.</p>
-<p class="Pp">The <var class="Fa">cred</var> pointer may be
- <code class="Dv">NULL</code> to indicate that access control checks are not
- to be performed, if possible. This <var class="Fa">cred</var> setting might
- be used to allow the kernel to authorize extended attribute changes that the
- active process might not be permitted to make.</p>
-<p class="Pp">Extended attribute semantics may vary by file system implementing
- the call. More information on extended attributes may be found in
- <a class="Xr">extattr(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the extended attribute is successfully set, then zero is
- returned. Otherwise, an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The caller does not have the appropriate privilege.</dd>
- <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt>
- <dd>The request was not valid in this file system for the specified vnode and
- attribute name.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Insufficient memory available to fulfill the request.</dd>
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd>The uio structure refers to an invalid userspace address.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The name, namespace, or uio argument is invalid.</dd>
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_SETEXTATTR</code>().</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is out of space.</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>The file system is read-only.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_GETEXTATTR(9)</a>,
- <a class="Xr">VOP_LISTEXTATTR(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 23, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_SETLABEL.9 3.html b/static/freebsd/man9/VOP_SETLABEL.9 3.html
deleted file mode 100644
index 83f28b88..00000000
--- a/static/freebsd/man9/VOP_SETLABEL.9 3.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_SETLABEL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_SETLABEL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_SETLABEL</code> &#x2014;
- <span class="Nd">persistently store an updated MAC label on a
- vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">security/mac.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETLABEL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">label
- *label</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This vnode call is made by <a class="Xr">mac(9)</a> file
- relabeling operation has been authorized, and the filesystem must now be
- updated.</p>
-<section class="Ss">
-<h2 class="Ss" id="Single-Label_vs._Multi-Label_Filesystems"><a class="permalink" href="#Single-Label_vs._Multi-Label_Filesystems">Single-Label
- vs. Multi-Label Filesystems</a></h2>
-<p class="Pp">Filesystems that do not implement per-file labels -- known as
- single-label filesystems -- can simply leave the <a class="Xr">vnode(9)</a>
- operation undefined. These filesystems must not set the
- <code class="Dv">MNT_MULTLABEL</code> flag in their <var class="Vt">struct
- mount</var>.</p>
-<p class="Pp">Filesystems that do implement per-vnode label storage -- known as
- multi-label filesystems -- will set the
- <code class="Dv">MNT_MULTILABEL</code> flag in their <var class="Vt">struct
- mount</var>. The UFS filesystem uses a superblock flag to persisently
- configure whether a specific filesystem implements a label for each
- <a class="Xr">vnode(9)</a>, and then keys various behaviors on whether that
- flag is set.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Extended_Attributes"><a class="permalink" href="#Extended_Attributes">Extended
- Attributes</a></h2>
-<p class="Pp">If the filesystem implements extended attributes, then the MAC
- Framework's
- <a class="permalink" href="#vop_stdsetlabel_ea"><code class="Fn" id="vop_stdsetlabel_ea">vop_stdsetlabel_ea</code></a>()
- function can be used, and maps operations into a series of
- <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_WRITEEXTATTR(9)</a>,
- and <a class="Xr">VOP_CLOSEEXTATTR(9)</a>.</p>
-<p class="Pp" id="mac_vnode_create_extattr">Filesystems will also need to call
- <a class="permalink" href="#mac_vnode_create_extattr"><code class="Fn">mac_vnode_create_extattr</code></a>()
- when a new filesystem object is created, so that suitable extended
- attributes can be written out, and
- <a class="permalink" href="#mac_vnode_associate_extattr"><code class="Fn" id="mac_vnode_associate_extattr">mac_vnode_associate_extattr</code></a>()
- when a <a class="Xr">vnode(9)</a> is associated with a filesystem object for
- the first time. These utility functions use
- <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_READEXTATTR(9)</a>,
- <a class="Xr">VOP_WRITEEXTATTR(9)</a>, and
- <a class="Xr">VOP_CLOSEEXTATTR(9)</a> as required.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking_and_Crash_Safety"><a class="permalink" href="#Locking_and_Crash_Safety">Locking
- and Crash Safety</a></h2>
-<p class="Pp">In all cases, it is important that exclusive
- <a class="Xr">vnode(9)</a> locks be held to prevent concurrent access when a
- MAC label may not yet be initialized. It is also important that operations
- are ordered so that a system crash does not leave a file improperly labeled.
- For example, the extended attribute for a newly created file must be written
- to disk before the file is linked by its parent directory, so that there is
- no opportunity for a crash to lead to an unlabeled file.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode will be locked on entry and should remain locked on
- return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the MAC label is successfully set, then zero is returned.
- Otherwise, an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt>
- <dd>The file system does not support
- <code class="Fn">VOP_SETLABEL</code>().</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is out of space.</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>The file system is read-only.</dd>
-</dl>
-<p class="Pp">Depending on the underlying implementation of
- <code class="Fn">VOP_SETLABEL</code>(), other errors may also be
- possible.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mac(9)</a>, <a class="Xr">mount(9)</a>,
- <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_CLOSEEXTATTR(9)</a>,
- <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_READEXTATTR(9)</a>,
- <a class="Xr">VOP_WRITEXTATTR(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 27, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_STRATEGY.9 4.html b/static/freebsd/man9/VOP_STRATEGY.9 4.html
deleted file mode 100644
index 9e3042e1..00000000
--- a/static/freebsd/man9/VOP_STRATEGY.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_STRATEGY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_STRATEGY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_STRATEGY</code> &#x2014;
- <span class="Nd">read or write a file system buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_STRATEGY</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf
- *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode that the buffer is for.</dd>
- <dt><var class="Fa">bp</var></dt>
- <dd>The buffer to be read or written.</dd>
-</dl>
-<p class="Pp">This call either reads or writes data from a file, depending on
- the value of <var class="Fa">bp-&gt;b_iocmd</var>.</p>
-<p class="Pp">The call may block.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Always zero. Errors should be signalled by setting the
- <code class="Dv">BIO_ERROR</code> bit in
- <var class="Fa">bp-&gt;b_ioflags</var> and setting
- <var class="Fa">bp-&gt;b_error</var> to the appropriate
- <var class="Va">errno</var> value.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">errno(2)</a>, <a class="Xr">buf(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 30, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_VPTOCNP.9 4.html b/static/freebsd/man9/VOP_VPTOCNP.9 4.html
deleted file mode 100644
index b67e5d3b..00000000
--- a/static/freebsd/man9/VOP_VPTOCNP.9 4.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_VPTOCNP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_VPTOCNP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_VPTOCNP</code> &#x2014;
- <span class="Nd">translate a vnode to its component name</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ucred.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_VPTOCNP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **dvp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">char *buf</var>,
- <var class="Fa" style="white-space: nowrap;">int *buflen</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This translates a vnode into its component name, and writes that
- name to the head of the buffer specified by <var class="Fa">buf</var>.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to translate.</dd>
- <dt><var class="Fa">dvp</var></dt>
- <dd>The vnode of the parent directory of <var class="Fa">vp</var>.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The caller credentials.</dd>
- <dt><var class="Fa">buf</var></dt>
- <dd>The buffer into which to prepend the component name.</dd>
- <dt><var class="Fa">buflen</var></dt>
- <dd>The remaining size of the buffer.</dd>
-</dl>
-<p class="Pp">The default implementation of <code class="Nm">VOP_VPTOCNP</code>
- scans through <var class="Fa">vp</var>'s parent directory looking for a
- dirent with a matching file number. If <var class="Fa">vp</var> is not a
- directory, then <code class="Nm">VOP_VPTOCNP</code> returns ENOENT.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode should be locked on entry and will still be locked on
- exit. The parent directory vnode will be unlocked on a successful exit.
- However, it will have its use count incremented.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The buffer was not large enough to hold the vnode's component name.</dd>
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The vnode was not found on the file system.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">This interface is a work in progress.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The function <code class="Nm">VOP_VPTOCNP</code> appeared in
- <span class="Ux">FreeBSD 8.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Joe Marcus
- Clarke</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 8, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/VOP_VPTOFH.9 4.html b/static/freebsd/man9/VOP_VPTOFH.9 4.html
deleted file mode 100644
index 64e45583..00000000
--- a/static/freebsd/man9/VOP_VPTOFH.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VOP_VPTOFH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VOP_VPTOFH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">VOP_VPTOFH</code> &#x2014; <span class="Nd">turn
- a vnode into an NFS filehandle</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_VPTOFH</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct fid
- *fhp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is used by the NFS server to create an opaque filehandle
- which uniquely identifies the file and which can be used by an NFS client to
- access the file in the future.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to make a filehandle for.</dd>
- <dt><var class="Fa">fhp</var></dt>
- <dd>Return parameter for the filehandle.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 16, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/accept_filter.9 3.html b/static/freebsd/man9/accept_filter.9 3.html
deleted file mode 100644
index cdfee16f..00000000
--- a/static/freebsd/man9/accept_filter.9 3.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACCEPT_FILTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACCEPT_FILTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">accept_filter</code>,
- <code class="Nm">accept_filt_add</code>,
- <code class="Nm">accept_filt_del</code>,
- <code class="Nm">accept_filt_generic_mod_event</code>,
- <code class="Nm">accept_filt_get</code> &#x2014; <span class="Nd">filter
- incoming connections</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/module.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socket.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fd">#define ACCEPT_FILTER_MOD</code></p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/socketvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">accept_filt_add</code>(<var class="Fa" style="white-space: nowrap;">struct
- accept_filter *filt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">accept_filt_del</code>(<var class="Fa" style="white-space: nowrap;">char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">accept_filt_generic_mod_event</code>(<var class="Fa" style="white-space: nowrap;">module_t
- mod</var>, <var class="Fa" style="white-space: nowrap;">int event</var>,
- <var class="Fa" style="white-space: nowrap;">void *data</var>);</p>
-<p class="Pp"><var class="Ft">struct accept_filter *</var>
- <br/>
- <code class="Fn">accept_filt_get</code>(<var class="Fa" style="white-space: nowrap;">char
- *name</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Accept filters allow an application to request that the kernel
- pre-process incoming connections. An accept filter is requested via the
- <a class="Xr">setsockopt(2)</a> system call, passing in an
- <var class="Fa">optname</var> of
- <code class="Dv">SO_ACCEPTFILTER</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">A module that wants to be an accept filter must provide a
- <var class="Vt">struct accept_filter</var> to the system:</p>
-<div class="Bd Pp Li">
-<pre>struct accept_filter {
- char accf_name[16];
- void (*accf_callback)(struct socket *so, void *arg, int waitflag);
- void * (*accf_create)(struct socket *so, char *arg);
- void (*accf_destroy)(struct socket *so);
- SLIST_ENTRY(accept_filter) accf_next; /* next on the list */
-};</pre>
-</div>
-<p class="Pp">The module should register it with the function
- <code class="Fn">accept_filt_add</code>(), passing a pointer to a
- <var class="Vt">struct accept_filter</var>, allocated with
- <a class="Xr">malloc(9)</a>.</p>
-<p class="Pp">The fields of <var class="Vt">struct accept_filter</var> are as
- follows:</p>
-<dl class="Bl-tag">
- <dt id="accf_name"><var class="Va">accf_name</var></dt>
- <dd>Name of the filter; this is how it will be accessed from userland.</dd>
- <dt id="accf_callback"><var class="Va">accf_callback</var></dt>
- <dd>The callback that the kernel will do once the connection is established.
- It is the same as a socket upcall and will be called when the connection
- is established and whenever new data arrives on the socket, unless the
- callback modifies the socket's flags.</dd>
- <dt id="accf_create"><var class="Va">accf_create</var></dt>
- <dd>Called whenever a <a class="Xr">setsockopt(2)</a> installs the filter onto
- a listening socket.</dd>
- <dt id="accf_destroy"><var class="Va">accf_destroy</var></dt>
- <dd>Called whenever the user removes the accept filter on the socket.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">accept_filt_del</code>() function passed the
- same string used in <var class="Va">accept_filter.accf_name</var> during
- registration with <code class="Fn">accept_filt_add</code>(), the kernel will
- then disallow and further userland use of the filter.</p>
-<p class="Pp">The <code class="Fn">accept_filt_get</code>() function is used
- internally to locate which accept filter to use via the
- <a class="Xr">setsockopt(2)</a> system call.</p>
-<p class="Pp">The <code class="Fn">accept_filt_generic_mod_event</code>()
- function provides a simple way to avoid duplication of code for accept
- filters which do not use the argument field to load and unload themselves.
- This function can be used in the <var class="Vt">moduledata_t</var> struct
- for the <a class="Xr">DECLARE_MODULE(9)</a> macro.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setsockopt(2)</a>, <a class="Xr">accf_data(9)</a>,
- <a class="Xr">accf_dns(9)</a>, <a class="Xr">accf_http(9)</a>,
- <a class="Xr">malloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The accept filter mechanism was introduced in
- <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alfred
- Perlstein</span>, <span class="An">Sheldon Hearn</span> and
- <span class="An">Jeroen Ruigrok van der Werven</span>.</p>
-<p class="Pp">The accept filter concept was pioneered by <span class="An">David
- Filo</span> at Yahoo! and refined to be a loadable module system by
- <span class="An">Alfred Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 25, 2000</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/accf_data.9 4.html b/static/freebsd/man9/accf_data.9 4.html
deleted file mode 100644
index 00b1ce1d..00000000
--- a/static/freebsd/man9/accf_data.9 4.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACCF_DATA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACCF_DATA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">accf_data</code> &#x2014; <span class="Nd">buffer
- incoming connections until data arrives</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options INET</code>
- <br/>
- <code class="Cd">options ACCEPT_FILTER_DATA</code></p>
-<p class="Pp">In <a class="Xr">rc.conf(5)</a>:
- <br/>
- <code class="Cd">kld_list=&quot;accf_data&quot;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is a filter to be placed on a socket that will be using
- <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>()
- to receive incoming connections.</p>
-<p class="Pp" id="accept~2">It prevents the application from receiving the
- connected descriptor via
- <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>()
- until data arrives on the connection.</p>
-<p class="Pp">The <var class="Fa">ACCEPT_FILTER_DATA</var> kernel option is also
- a module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if
- the INET option has been compiled into the kernel.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Assuming ACCEPT_FILTER_DATA has been included in the kernel config
- file or the <code class="Nm">accf_data</code> module has been loaded, this
- will enable the data accept filter on the socket
- <var class="Fa">sok</var>.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> struct accept_filter_arg afa;
-
- bzero(&amp;afa, sizeof(afa));
- strcpy(afa.af_name, &quot;dataready&quot;);
- setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &amp;afa, sizeof(afa));</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setsockopt(2)</a>,
- <a class="Xr">accept_filter(9)</a>, <a class="Xr">accf_dns(9)</a>,
- <a class="Xr">accf_http(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The accept filter mechanism and the accf_data filter were
- introduced in <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the filter were written by
- <span class="An">Alfred Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 15, 2000</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/accf_dns.9 3.html b/static/freebsd/man9/accf_dns.9 3.html
deleted file mode 100644
index 1bbb46fe..00000000
--- a/static/freebsd/man9/accf_dns.9 3.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACCF_DNS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACCF_DNS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">accf_dns</code> &#x2014; <span class="Nd">buffer
- incoming DNS requests until the whole first request is present</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options INET</code>
- <br/>
- <code class="Cd">options ACCEPT_FILTER_DNS</code></p>
-<p class="Pp">In <a class="Xr">rc.conf(5)</a>:
- <br/>
- <code class="Cd">kld_list=&quot;accf_dns&quot;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is a filter to be placed on a socket that will be using
- <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>()
- to receive incoming connections.</p>
-<p class="Pp" id="accept~2">It prevents the application from receiving the
- connected descriptor via
- <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>()
- until a whole DNS request is available on the socket. It does this by
- reading the first two bytes of the request, to determine its size, and
- waiting until the required amount of data is available to be read.</p>
-<p class="Pp">The <var class="Fa">ACCEPT_FILTER_DNS</var> kernel option is also
- a module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if
- the INET option has been compiled into the kernel.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">If the <code class="Nm">accf_dns</code> module is available in the
- kernel, the following code will enable the DNS accept filter on a socket
- <var class="Fa">sok</var>.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> struct accept_filter_arg afa;
-
- bzero(&amp;afa, sizeof(afa));
- strcpy(afa.af_name, &quot;dnsready&quot;);
- setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &amp;afa, sizeof(afa));</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setsockopt(2)</a>,
- <a class="Xr">accept_filter(9)</a>, <a class="Xr">accf_data(9)</a>,
- <a class="Xr">accf_http(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The accept filter mechanism was introduced in
- <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the filter were written by
- <span class="An">David Malone</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 16, 2008</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/accf_http.9 3.html b/static/freebsd/man9/accf_http.9 3.html
deleted file mode 100644
index f25c2c43..00000000
--- a/static/freebsd/man9/accf_http.9 3.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACCF_HTTP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACCF_HTTP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">accf_http</code> &#x2014; <span class="Nd">buffer
- incoming connections until a certain complete HTTP request
- arrives</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options INET</code>
- <br/>
- <code class="Cd">options ACCEPT_FILTER_HTTP</code></p>
-<p class="Pp">In <a class="Xr">rc.conf(5)</a>:
- <br/>
- <code class="Cd">kld_list=&quot;accf_http&quot;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is a filter to be placed on a socket that will be using
- <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>()
- to receive incoming HTTP connections.</p>
-<p class="Pp" id="accept~2">It prevents the application from receiving the
- connected descriptor via
- <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>()
- until either a full HTTP/1.0 or HTTP/1.1 HEAD or GET request has been
- buffered by the kernel.</p>
-<p class="Pp" id="accept~3">If something other than a HTTP/1.0 or HTTP/1.1 HEAD
- or GET request is received the kernel will allow the application to receive
- the connection descriptor via
- <a class="permalink" href="#accept~3"><code class="Fn">accept</code></a>().</p>
-<p class="Pp" id="select">The utility of <code class="Nm">accf_http</code> is
- such that a server will not have to context switch several times before
- performing the initial parsing of the request. This effectively reduces the
- amount of required CPU utilization to handle incoming requests by keeping
- active processes in preforking servers such as Apache low and reducing the
- size of the file descriptor set that needs to be managed by interfaces such
- as <a class="permalink" href="#select"><code class="Fn">select</code></a>(),
- <a class="permalink" href="#poll"><code class="Fn" id="poll">poll</code></a>()
- or
- <a class="permalink" href="#kevent"><code class="Fn" id="kevent">kevent</code></a>()
- based servers.</p>
-<p class="Pp">The <code class="Nm">accf_http</code> kernel option is also a
- module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if
- the INET option has been compiled into the kernel.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Assuming ACCEPT_FILTER_HTTP has been included in the kernel config
- file or the <code class="Nm">accf_http</code> module has been loaded, this
- will enable the http accept filter on the socket
- <var class="Fa">sok</var>.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> struct accept_filter_arg afa;
-
- bzero(&amp;afa, sizeof(afa));
- strcpy(afa.af_name, &quot;httpready&quot;);
- setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &amp;afa, sizeof(afa));</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setsockopt(2)</a>,
- <a class="Xr">accept_filter(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The accept filter mechanism and the accf_http filter were
- introduced in <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the filter were written by
- <span class="An">Alfred Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 15, 2000</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/accf_tls.9 3.html b/static/freebsd/man9/accf_tls.9 3.html
deleted file mode 100644
index 35adbf1e..00000000
--- a/static/freebsd/man9/accf_tls.9 3.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACCF_TLS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACCF_TLS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">accf_tls</code> &#x2014; <span class="Nd">buffer
- incoming connections until a TLS handshake like request arrives</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options INET</code>
- <br/>
- <code class="Cd">options ACCEPT_FILTER_TLS</code></p>
-<p class="Pp">In <a class="Xr">rc.conf(5)</a>:
- <br/>
- <code class="Cd">kld_list=&quot;accf_tls&quot;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is a filter to be placed on a socket that will be using
- <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>(<var class="Fa">2</var>)
- to receive incoming HTTPS connections. It prevents the application from
- receiving the connected descriptor via
- <code class="Fn">accept</code>(<var class="Fa">2</var>) until a full TLS
- handshake has been buffered by the kernel. The
- <code class="Nm">accf_tls</code> will first check that byte at offset 0 is
- <var class="Va">0x16</var>, which matches handshake type. Then it will read
- 2-byte request length value at offset 3 and will continue reading until
- reading the entire length of the handshake is buffered. If something other
- than <var class="Va">0x16</var> is at offset 0, the kernel will allow the
- application to receive the connection descriptor via
- <code class="Fn">accept</code>(<var class="Fa">2</var>).</p>
-<p class="Pp" id="select">The utility of <code class="Nm">accf_tls</code> is
- such that a server will not have to context switch several times before
- performing the initial parsing of the request. This effectively reduces the
- amount of required CPU utilization to handle incoming requests by keeping
- active processes in preforking servers such as Apache low and reducing the
- size of the file descriptor set that needs to be managed by interfaces such
- as <a class="permalink" href="#select"><code class="Fn">select</code></a>(),
- <a class="permalink" href="#poll"><code class="Fn" id="poll">poll</code></a>()
- or
- <a class="permalink" href="#kevent"><code class="Fn" id="kevent">kevent</code></a>()
- based servers.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Assuming ACCEPT_FILTER_TLS has been included in the kernel config
- file or the <code class="Nm">accf_tls</code> module has been loaded, this
- will enable the TLS accept filter on the socket
- <var class="Fa">sok</var>.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> struct accept_filter_arg afa;
-
- bzero(&amp;afa, sizeof(afa));
- strcpy(afa.af_name, &quot;tlsready&quot;);
- setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &amp;afa, sizeof(afa));</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setsockopt(2)</a>,
- <a class="Xr">accept_filter(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">accf_tls</code> accept filter was introduced
- in <span class="Ux">FreeBSD 15.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">accf_tls</code> filter was written by
- <span class="An">Maksim Yevmenkin</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 24, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/acl.9 3.html b/static/freebsd/man9/acl.9 3.html
deleted file mode 100644
index 4e630c5c..00000000
--- a/static/freebsd/man9/acl.9 3.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ACL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ACL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">acl</code> &#x2014; <span class="Nd">virtual file
- system access control lists</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp">In the kernel configuration file:
- <br/>
- <code class="Cd">options UFS_ACL</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Access control lists, or ACLs, allow fine-grained specification of
- rights for vnodes representing files and directories. However, as there are
- a plethora of file systems with differing ACL semantics, the vnode interface
- is aware only of the syntax of ACLs, relying on the underlying file system
- to implement the details. Depending on the underlying file system, each file
- or directory may have zero or more ACLs associated with it, named using the
- <var class="Fa">type</var> field of the appropriate vnode ACL calls:
- <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a>, and
- <a class="Xr">VOP_SETACL(9)</a>.</p>
-<p class="Pp">Currently, each ACL is represented in-kernel by a fixed-size
- <var class="Vt">acl</var> structure, defined as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct acl {
- unsigned int acl_maxcnt;
- unsigned int acl_cnt;
- int acl_spare[4];
- struct acl_entry acl_entry[ACL_MAX_ENTRIES];
-};</pre>
-</div>
-<p class="Pp">An ACL is constructed from a fixed size array of ACL entries, each
- of which consists of a set of permissions, principal namespace, and
- principal identifier. In this implementation, the
- <var class="Vt">acl_maxcnt</var> field is always set to
- <code class="Dv">ACL_MAX_ENTRIES</code>.</p>
-<p class="Pp">Each individual ACL entry is of the type
- <var class="Vt">acl_entry_t</var>, which is a structure with the following
- members:</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">acl_tag_t</var> <var class="Va">ae_tag</var></dt>
- <dd>The following is a list of definitions of ACL types to be set in
- <var class="Va">ae_tag</var>:
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="ACL_UNDEFINED_FIELD"><a class="permalink" href="#ACL_UNDEFINED_FIELD"><code class="Dv">ACL_UNDEFINED_FIELD</code></a></dt>
- <dd>Undefined ACL type.</dd>
- <dt id="ACL_USER_OBJ"><a class="permalink" href="#ACL_USER_OBJ"><code class="Dv">ACL_USER_OBJ</code></a></dt>
- <dd>Discretionary access rights for processes whose effective user ID
- matches the user ID of the file's owner.</dd>
- <dt id="ACL_USER"><a class="permalink" href="#ACL_USER"><code class="Dv">ACL_USER</code></a></dt>
- <dd>Discretionary access rights for processes whose effective user ID
- matches the ACL entry qualifier.</dd>
- <dt id="ACL_GROUP_OBJ"><a class="permalink" href="#ACL_GROUP_OBJ"><code class="Dv">ACL_GROUP_OBJ</code></a></dt>
- <dd>Discretionary access rights for processes whose effective group ID or
- any supplemental groups match the group ID of the file's owner.</dd>
- <dt id="ACL_GROUP"><a class="permalink" href="#ACL_GROUP"><code class="Dv">ACL_GROUP</code></a></dt>
- <dd>Discretionary access rights for processes whose effective group ID or
- any supplemental groups match the ACL entry qualifier.</dd>
- <dt id="ACL_MASK"><a class="permalink" href="#ACL_MASK"><code class="Dv">ACL_MASK</code></a></dt>
- <dd>The maximum discretionary access rights that can be granted to a
- process in the file group class. This is only valid for POSIX.1e
- ACLs.</dd>
- <dt id="ACL_OTHER"><a class="permalink" href="#ACL_OTHER"><code class="Dv">ACL_OTHER</code></a></dt>
- <dd>Discretionary access rights for processes not covered by any other ACL
- entry. This is only valid for POSIX.1e ACLs.</dd>
- <dt id="ACL_OTHER_OBJ"><a class="permalink" href="#ACL_OTHER_OBJ"><code class="Dv">ACL_OTHER_OBJ</code></a></dt>
- <dd>Same as <code class="Dv">ACL_OTHER</code>.</dd>
- <dt id="ACL_EVERYONE"><a class="permalink" href="#ACL_EVERYONE"><code class="Dv">ACL_EVERYONE</code></a></dt>
- <dd>Discretionary access rights for all users. This is only valid for
- NFSv4 ACLs.</dd>
- </dl>
- </div>
- <p class="Pp">Each POSIX.1e ACL must contain exactly one
- <code class="Dv">ACL_USER_OBJ</code>, one
- <code class="Dv">ACL_GROUP_OBJ</code>, and one
- <code class="Dv">ACL_OTHER</code>. If any of
- <code class="Dv">ACL_USER</code>, <code class="Dv">ACL_GROUP</code>, or
- <code class="Dv">ACL_OTHER</code> are present, then exactly one
- <code class="Dv">ACL_MASK</code> entry should be present.</p>
- </dd>
- <dt><var class="Vt">uid_t</var> <var class="Va">ae_id</var></dt>
- <dd>The ID of user for whom this ACL describes access permissions. For entries
- other than <code class="Dv">ACL_USER</code> and
- <code class="Dv">ACL_GROUP</code>, this field should be set to
- <code class="Dv">ACL_UNDEFINED_ID</code>.</dd>
- <dt><var class="Vt">acl_perm_t</var> <var class="Va">ae_perm</var></dt>
- <dd>This field defines what kind of access the process matching this ACL has
- for accessing the associated file. For POSIX.1e ACLs, the following are
- valid:
- <dl class="Bl-tag">
- <dt id="ACL_EXECUTE"><a class="permalink" href="#ACL_EXECUTE"><code class="Dv">ACL_EXECUTE</code></a></dt>
- <dd>The process may execute the associated file.</dd>
- <dt id="ACL_WRITE"><a class="permalink" href="#ACL_WRITE"><code class="Dv">ACL_WRITE</code></a></dt>
- <dd>The process may write to the associated file.</dd>
- <dt id="ACL_READ"><a class="permalink" href="#ACL_READ"><code class="Dv">ACL_READ</code></a></dt>
- <dd>The process may read from the associated file.</dd>
- <dt id="ACL_PERM_NONE"><a class="permalink" href="#ACL_PERM_NONE"><code class="Dv">ACL_PERM_NONE</code></a></dt>
- <dd>The process has no read, write or execute permissions to the
- associated file.</dd>
- </dl>
- <p class="Pp">For NFSv4 ACLs, the following are valid:</p>
- <dl class="Bl-tag">
- <dt id="ACL_READ_DATA"><a class="permalink" href="#ACL_READ_DATA"><code class="Dv">ACL_READ_DATA</code></a></dt>
- <dd>The process may read from the associated file.</dd>
- <dt id="ACL_LIST_DIRECTORY"><a class="permalink" href="#ACL_LIST_DIRECTORY"><code class="Dv">ACL_LIST_DIRECTORY</code></a></dt>
- <dd>Same as <code class="Dv">ACL_READ_DATA</code>.</dd>
- <dt id="ACL_WRITE_DATA"><a class="permalink" href="#ACL_WRITE_DATA"><code class="Dv">ACL_WRITE_DATA</code></a></dt>
- <dd>The process may write to the associated file.</dd>
- <dt id="ACL_ADD_FILE"><a class="permalink" href="#ACL_ADD_FILE"><code class="Dv">ACL_ADD_FILE</code></a></dt>
- <dd>Same as <code class="Dv">ACL_ACL_WRITE_DATA</code>.</dd>
- <dt id="ACL_APPEND_DATA"><a class="permalink" href="#ACL_APPEND_DATA"><code class="Dv">ACL_APPEND_DATA</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ADD_SUBDIRECTORY"><a class="permalink" href="#ACL_ADD_SUBDIRECTORY"><code class="Dv">ACL_ADD_SUBDIRECTORY</code></a></dt>
- <dd>Same as <code class="Dv">ACL_APPEND_DATA</code>.</dd>
- <dt id="ACL_READ_NAMED_ATTRS"><a class="permalink" href="#ACL_READ_NAMED_ATTRS"><code class="Dv">ACL_READ_NAMED_ATTRS</code></a></dt>
- <dd>Ignored.</dd>
- <dt id="ACL_WRITE_NAMED_ATTRS"><a class="permalink" href="#ACL_WRITE_NAMED_ATTRS"><code class="Dv">ACL_WRITE_NAMED_ATTRS</code></a></dt>
- <dd>Ignored.</dd>
- <dt id="ACL_EXECUTE~2"><a class="permalink" href="#ACL_EXECUTE~2"><code class="Dv">ACL_EXECUTE</code></a></dt>
- <dd>The process may execute the associated file.</dd>
- <dt id="ACL_DELETE_CHILD"><a class="permalink" href="#ACL_DELETE_CHILD"><code class="Dv">ACL_DELETE_CHILD</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_READ_ATTRIBUTES"><a class="permalink" href="#ACL_READ_ATTRIBUTES"><code class="Dv">ACL_READ_ATTRIBUTES</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_WRITE_ATTRIBUTES"><a class="permalink" href="#ACL_WRITE_ATTRIBUTES"><code class="Dv">ACL_WRITE_ATTRIBUTES</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_DELETE"><a class="permalink" href="#ACL_DELETE"><code class="Dv">ACL_DELETE</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_READ_ACL"><a class="permalink" href="#ACL_READ_ACL"><code class="Dv">ACL_READ_ACL</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_WRITE_ACL"><a class="permalink" href="#ACL_WRITE_ACL"><code class="Dv">ACL_WRITE_ACL</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_WRITE_OWNER"><a class="permalink" href="#ACL_WRITE_OWNER"><code class="Dv">ACL_WRITE_OWNER</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_SYNCHRONIZE"><a class="permalink" href="#ACL_SYNCHRONIZE"><code class="Dv">ACL_SYNCHRONIZE</code></a></dt>
- <dd>Ignored.</dd>
- </dl>
- </dd>
- <dt><var class="Vt">acl_entry_type_t</var>
- <var class="Va">ae_entry_type</var></dt>
- <dd>This field defines the type of NFSv4 ACL entry. It is not used with
- POSIX.1e ACLs. The following values are valid:
- <dl class="Bl-tag">
- <dt id="ACL_ENTRY_TYPE_ALLOW"><a class="permalink" href="#ACL_ENTRY_TYPE_ALLOW"><code class="Dv">ACL_ENTRY_TYPE_ALLOW</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ENTRY_TYPE_DENY"><a class="permalink" href="#ACL_ENTRY_TYPE_DENY"><code class="Dv">ACL_ENTRY_TYPE_DENY</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- </dl>
- </dd>
- <dt><var class="Vt">acl_flag_t</var> <var class="Va">ae_flags</var></dt>
- <dd>This field defines the inheritance flags of NFSv4 ACL entry. It is not
- used with POSIX.1e ACLs. The following values are valid:
- <dl class="Bl-tag">
- <dt id="ACL_ENTRY_FILE_INHERIT"><a class="permalink" href="#ACL_ENTRY_FILE_INHERIT"><code class="Dv">ACL_ENTRY_FILE_INHERIT</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ENTRY_DIRECTORY_INHERIT"><a class="permalink" href="#ACL_ENTRY_DIRECTORY_INHERIT"><code class="Dv">ACL_ENTRY_DIRECTORY_INHERIT</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ENTRY_NO_PROPAGATE_INHERIT"><a class="permalink" href="#ACL_ENTRY_NO_PROPAGATE_INHERIT"><code class="Dv">ACL_ENTRY_NO_PROPAGATE_INHERIT</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ENTRY_INHERIT_ONLY"><a class="permalink" href="#ACL_ENTRY_INHERIT_ONLY"><code class="Dv">ACL_ENTRY_INHERIT_ONLY</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ACL_ENTRY_INHERITED"><a class="permalink" href="#ACL_ENTRY_INHERITED"><code class="Dv">ACL_ENTRY_INHERITED</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- </dl>
- The <code class="Dv">ACL_ENTRY_INHERITED</code> flag is set on an ACE that
- has been inherited from its parent. It may also be set programmatically,
- and is valid on both files and directories.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acl(3)</a>, <a class="Xr">vaccess(9)</a>,
- <a class="Xr">vaccess_acl_nfs4(9)</a>,
- <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">VFS(9)</a>,
- <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a>,
- <a class="Xr">VOP_SETACL(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 4, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/alq.9 3.html b/static/freebsd/man9/alq.9 3.html
deleted file mode 100644
index 5f249196..00000000
--- a/static/freebsd/man9/alq.9 3.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ALQ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ALQ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">alq</code>,
- <code class="Nm">alq_open_flags</code>, <code class="Nm">alq_open</code>,
- <code class="Nm">alq_writen</code>, <code class="Nm">alq_write</code>,
- <code class="Nm">alq_flush</code>, <code class="Nm">alq_close</code>,
- <code class="Nm">alq_getn</code>, <code class="Nm">alq_get</code>,
- <code class="Nm">alq_post_flags</code>, <code class="Nm">alq_post</code>
- &#x2014; <span class="Nd">Asynchronous Logging Queues</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/alq.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alq_open_flags</code>(<var class="Fa">struct alq **app</var>,
- <var class="Fa">const char *file</var>, <var class="Fa">struct ucred
- *cred</var>, <var class="Fa">int cmode</var>, <var class="Fa">int
- size</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alq_open</code>(<var class="Fa">struct alq **app</var>,
- <var class="Fa">const char *file</var>, <var class="Fa">struct ucred
- *cred</var>, <var class="Fa">int cmode</var>, <var class="Fa">int
- size</var>, <var class="Fa">int count</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alq_writen</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alq_write</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">alq_flush</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">alq_close</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>);</p>
-<p class="Pp"><var class="Ft">struct ale *</var>
- <br/>
- <code class="Fn">alq_getn</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct ale *</var>
- <br/>
- <code class="Fn">alq_get</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">alq_post_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">struct ale
- *ale</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">alq_post</code>(<var class="Fa" style="white-space: nowrap;">struct
- alq *alq</var>, <var class="Fa" style="white-space: nowrap;">struct ale
- *ale</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">alq</code> facility provides an asynchronous
- fixed or variable length recording mechanism, known as Asynchronous Logging
- Queues. It can record to any <a class="Xr">vnode(9)</a>, thus providing the
- ability to journal logs to character devices as well as regular files. All
- functions accept a <var class="Vt">struct alq</var> argument, which is an
- opaque type that maintains state information for an Asynchronous Logging
- Queue. The logging facility runs in a separate kernel thread, which services
- all log entry requests.</p>
-<p class="Pp">An &#x201C;asynchronous log entry&#x201D; is defined as
- <var class="Vt">struct ale</var>, which has the following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct ale {
- intptr_t ae_bytesused; /* # bytes written to ALE. */
- char *ae_data; /* Write ptr. */
- int ae_pad; /* Unused, compat. */
-};</pre>
-</div>
-<p class="Pp" id="alq_writen">An <code class="Nm">alq</code> can be created in
- either fixed or variable length mode. A variable length
- <code class="Nm">alq</code> accommodates writes of varying length using
- <a class="permalink" href="#alq_writen"><code class="Fn">alq_writen</code></a>()
- and <code class="Fn">alq_getn</code>(). A fixed length
- <code class="Nm">alq</code> accommodates a fixed number of writes using
- <code class="Fn">alq_write</code>() and <code class="Fn">alq_get</code>(),
- each of fixed size (set at queue creation time). Fixed length mode is
- deprecated in favour of variable length mode.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">The <code class="Fn">alq_open_flags</code>() function creates a
- new variable length asynchronous logging queue. The
- <var class="Fa">file</var> argument is the name of the file to open for
- logging. If the file does not yet exist, <code class="Fn">alq_open</code>()
- will attempt to create it. The <var class="Fa">cmode</var> argument will be
- passed to
- <a class="permalink" href="#vn_open"><code class="Fn" id="vn_open">vn_open</code></a>()
- as the requested creation mode, to be used if the file will be created by
- <code class="Fn">alq_open</code>(). Consumers of this API may wish to pass
- <code class="Dv">ALQ_DEFAULT_CMODE</code>, a default creation mode suitable
- for most applications. The <var class="Fa">cred</var> argument specifies the
- credentials to use when opening and performing I/O on the file. The
- <var class="Fa">size</var> argument sets the size (in bytes) of the
- underlying queue. The ALQ_ORDERED flag may be passed in via
- <var class="Fa">flags</var> to indicate that the ordering of writer threads
- waiting for a busy <code class="Nm">alq</code> to free up resources should
- be preserved.</p>
-<p class="Pp" id="alq_open">The deprecated
- <a class="permalink" href="#alq_open"><code class="Fn">alq_open</code></a>()
- function is implemented as a wrapper around
- <a class="permalink" href="#alq_open_flags"><code class="Fn" id="alq_open_flags">alq_open_flags</code></a>()
- to provide backwards compatibility to consumers that have not been updated
- to utilise the newer <code class="Fn">alq_open_flags</code>() function. It
- passes all arguments through to <code class="Fn">alq_open_flags</code>()
- untouched except for <var class="Fa">size</var> and
- <var class="Fa">count</var>, and sets <var class="Fa">flags</var> to 0. To
- create a variable length mode <code class="Nm">alq</code>, the
- <var class="Fa">size</var> argument should be set to the size (in bytes) of
- the underlying queue and the <var class="Fa">count</var> argument should be
- set to 0. To create a fixed length mode <code class="Nm">alq</code>, the
- <var class="Fa">size</var> argument should be set to the size (in bytes) of
- each write and the <var class="Fa">count</var> argument should be set to the
- number of <var class="Fa">size</var> byte chunks to reserve capacity
- for.</p>
-<p class="Pp" id="alq_writen~2">The
- <a class="permalink" href="#alq_writen~2"><code class="Fn">alq_writen</code></a>()
- function writes <var class="Fa">len</var> bytes from
- <var class="Fa">data</var> to the designated variable length mode queue
- <var class="Fa">alq</var>. If <code class="Fn">alq_writen</code>() could not
- write the entry immediately and <code class="Dv">ALQ_WAITOK</code> is set in
- <var class="Fa">flags</var>, the function will be allowed to
- <a class="Xr">msleep_spin(9)</a> with the
- &#x201C;<code class="Li">alqwnord</code>&#x201D; or
- &#x201C;<code class="Li">alqwnres</code>&#x201D; wait message. A write will
- automatically schedule the queue <var class="Fa">alq</var> to be flushed to
- disk. This behaviour can be controlled by passing ALQ_NOACTIVATE via
- <var class="Fa">flags</var> to indicate that the write should not schedule
- <var class="Fa">alq</var> to be flushed to disk.</p>
-<p class="Pp" id="alq_write">The deprecated
- <a class="permalink" href="#alq_write"><code class="Fn">alq_write</code></a>()
- function is implemented as a wrapper around
- <code class="Fn">alq_writen</code>() to provide backwards compatibility to
- consumers that have not been updated to utilise variable length mode queues.
- The function will write <var class="Fa">size</var> bytes of data (where
- <var class="Fa">size</var> was specified at queue creation time) from the
- <var class="Fa">data</var> buffer to the <var class="Fa">alq</var>. Note
- that it is an error to call <code class="Fn">alq_write</code>() on a
- variable length mode queue.</p>
-<p class="Pp" id="alq_flush">The
- <a class="permalink" href="#alq_flush"><code class="Fn">alq_flush</code></a>()
- function is used for flushing <var class="Fa">alq</var> to the log medium
- that was passed to <code class="Fn">alq_open</code>(). If
- <var class="Fa">alq</var> has data to flush and is not already in the
- process of being flushed, the function will block doing IO. Otherwise, the
- function will return immediately.</p>
-<p class="Pp" id="alq_close">The
- <a class="permalink" href="#alq_close"><code class="Fn">alq_close</code></a>()
- function will close the asynchronous logging queue <var class="Fa">alq</var>
- and flush all pending write requests to the log medium. It will free all
- resources that were previously allocated.</p>
-<p class="Pp" id="alq_getn">The
- <a class="permalink" href="#alq_getn"><code class="Fn">alq_getn</code></a>()
- function returns an asynchronous log entry from <var class="Fa">alq</var>,
- initialised to point at a buffer capable of receiving
- <var class="Fa">len</var> bytes of data. This function leaves
- <var class="Fa">alq</var> in a locked state, until a subsequent
- <code class="Fn">alq_post</code>() or
- <code class="Fn">alq_post_flags</code>() call is made. If
- <code class="Fn">alq_getn</code>() could not obtain
- <var class="Fa">len</var> bytes of buffer immediately and
- <code class="Dv">ALQ_WAITOK</code> is set in <var class="Fa">flags</var>,
- the function will be allowed to <a class="Xr">msleep_spin(9)</a> with the
- &#x201C;<code class="Li">alqgnord</code>&#x201D; or
- &#x201C;<code class="Li">alqgnres</code>&#x201D; wait message. The caller
- can choose to write less than <var class="Fa">len</var> bytes of data to the
- returned asynchronous log entry by setting the entry's ae_bytesused field to
- the number of bytes actually written. This must be done prior to calling
- <code class="Fn">alq_post</code>().</p>
-<p class="Pp" id="alq_get">The deprecated
- <a class="permalink" href="#alq_get"><code class="Fn">alq_get</code></a>()
- function is implemented as a wrapper around
- <code class="Fn">alq_getn</code>() to provide backwards compatibility to
- consumers that have not been updated to utilise variable length mode queues.
- The asynchronous log entry returned will be initialised to point at a buffer
- capable of receiving <var class="Fa">size</var> bytes of data (where
- <var class="Fa">size</var> was specified at queue creation time). Note that
- it is an error to call <code class="Fn">alq_get</code>() on a variable
- length mode queue.</p>
-<p class="Pp" id="alq_post_flags">The
- <a class="permalink" href="#alq_post_flags"><code class="Fn">alq_post_flags</code></a>()
- function schedules the asynchronous log entry <var class="Fa">ale</var>
- (obtained from <code class="Fn">alq_getn</code>() or
- <code class="Fn">alq_get</code>()) for writing to <var class="Fa">alq</var>.
- The ALQ_NOACTIVATE flag may be passed in via <var class="Fa">flags</var> to
- indicate that the queue should not be immediately scheduled to be flushed to
- disk. This function leaves <var class="Fa">alq</var> in an unlocked
- state.</p>
-<p class="Pp" id="alq_post">The
- <a class="permalink" href="#alq_post"><code class="Fn">alq_post</code></a>()
- function is implemented as a wrapper around
- <code class="Fn">alq_post_flags</code>() to provide backwards compatibility
- to consumers that have not been updated to utilise the newer
- <code class="Fn">alq_post_flags</code>() function. It simply passes all
- arguments through to <code class="Fn">alq_post_flags</code>() untouched, and
- sets <var class="Fa">flags</var> to 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">alq_writen</code>() and
- <code class="Fn">alq_write</code>() functions both perform a
- <a class="Xr">bcopy(3)</a> from the supplied <var class="Fa">data</var>
- buffer into the underlying <code class="Nm">alq</code> buffer. Performance
- critical code paths may wish to consider using
- <code class="Fn">alq_getn</code>() (variable length queues) or
- <code class="Fn">alq_get</code>() (fixed length queues) to avoid the extra
- memory copy. Note that a queue remains locked between calls to
- <code class="Fn">alq_getn</code>() or <code class="Fn">alq_get</code>() and
- <code class="Fn">alq_post</code>() or
- <code class="Fn">alq_post_flags</code>(), so this method of writing to a
- queue is unsuitable for situations where the time between calls may be
- substantial.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKING"><a class="permalink" href="#LOCKING">LOCKING</a></h1>
-<p class="Pp">Each asynchronous logging queue is protected by a spin mutex.</p>
-<p class="Pp" id="alq_flush~2">Functions
- <a class="permalink" href="#alq_flush~2"><code class="Fn">alq_flush</code></a>()
- and <code class="Fn">alq_open</code>() may attempt to acquire an internal
- sleep mutex, and should consequently not be used in contexts where sleeping
- is not allowed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">alq_open</code>() function returns one of the
- error codes listed in <a class="Xr">open(2)</a>, if it fails to open
- <var class="Fa">file</var>, or else it returns 0.</p>
-<p class="Pp">The <code class="Fn">alq_writen</code>() and
- <code class="Fn">alq_write</code>() functions return
- <code class="Er">EWOULDBLOCK</code> if <code class="Dv">ALQ_NOWAIT</code>
- was set in <var class="Fa">flags</var> and either the queue is full or the
- system is shutting down.</p>
-<p class="Pp">The <code class="Fn">alq_getn</code>() and
- <code class="Fn">alq_get</code>() functions return
- <code class="Dv">NULL</code> if <code class="Dv">ALQ_NOWAIT</code> was set
- in <var class="Fa">flags</var> and either the queue is full or the system is
- shutting down.</p>
-<p class="Pp">NOTE: invalid arguments to non-void functions will result in
- undefined behaviour.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">syslog(3)</a>, <a class="Xr">kproc(9)</a>,
- <a class="Xr">ktr(9)</a>, <a class="Xr">msleep_spin(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The Asynchronous Logging Queues (ALQ) facility first appeared in
- <span class="Ux">FreeBSD 5.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">alq</code> facility was written by
- <span class="An">Jeffrey Roberson</span>
- &lt;<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>&gt;
- and extended by <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@freebsd.org">lstewart@freebsd.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">Hiten
- Pandya</span>
- &lt;<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>&gt; and
- revised by <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@freebsd.org">lstewart@freebsd.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 26, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/altq.9 3.html b/static/freebsd/man9/altq.9 3.html
deleted file mode 100644
index bc95d846..00000000
--- a/static/freebsd/man9/altq.9 3.html
+++ /dev/null
@@ -1,510 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ALTQ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ALTQ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ALTQ</code> &#x2014; <span class="Nd">kernel
- interfaces for manipulating output queues on network interfaces</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socket.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if_var.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Enqueue_macros"><a class="permalink" href="#Enqueue_macros">Enqueue
- macros</a></h2>
-<p class="Pp"><code class="Fn">IFQ_ENQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>, <var class="Fa" style="white-space: nowrap;">int error</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_HANDOFF</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>, <var class="Fa" style="white-space: nowrap;">int error</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_HANDOFF_ADJ</code>(<var class="Fa">struct
- ifnet *ifp</var>, <var class="Fa">struct mbuf *m</var>, <var class="Fa">int
- adjust</var>, <var class="Fa">int error</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Dequeue_macros"><a class="permalink" href="#Dequeue_macros">Dequeue
- macros</a></h2>
-<p class="Pp"><code class="Fn">IFQ_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_POLL_NOLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_PURGE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_IS_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Driver_managed_dequeue_macros"><a class="permalink" href="#Driver_managed_dequeue_macros">Driver
- managed dequeue macros</a></h2>
-<p class="Pp"><code class="Fn">IFQ_DRV_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_DRV_PREPEND</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_DRV_PURGE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_DRV_IS_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="General_setup_macros"><a class="permalink" href="#General_setup_macros">General
- setup macros</a></h2>
-<p class="Pp"><code class="Fn">IFQ_SET_MAXLEN</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_INC_LEN</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_DEC_LEN</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_INC_DROPS</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-<p class="Pp"><code class="Fn">IFQ_SET_READY</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaltq *ifq</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">ALTQ</code> system is a framework to manage
- queuing disciplines on network interfaces. <code class="Nm">ALTQ</code>
- introduces new macros to manipulate output queues. The output queue macros
- are used to abstract queue operations and not to touch the internal fields
- of the output queue structure. The macros are independent from the
- <code class="Nm">ALTQ</code> implementation, and compatible with the
- traditional <var class="Vt">ifqueue</var> macros for ease of transition.</p>
-<p class="Pp" id="IFQ_ENQUEUE"><a class="permalink" href="#IFQ_ENQUEUE"><code class="Fn">IFQ_ENQUEUE</code></a>(),
- <a class="permalink" href="#IFQ_HANDOFF"><code class="Fn" id="IFQ_HANDOFF">IFQ_HANDOFF</code></a>()
- and
- <a class="permalink" href="#IFQ_HANDOFF_ADJ"><code class="Fn" id="IFQ_HANDOFF_ADJ">IFQ_HANDOFF_ADJ</code></a>()
- enqueue a packet <var class="Fa">m</var> to the queue
- <var class="Fa">ifq</var>. The underlying queuing discipline may discard the
- packet. The <var class="Fa">error</var> argument is set to 0 on success, or
- <code class="Er">ENOBUFS</code> if the packet is discarded. The packet
- pointed to by <var class="Fa">m</var> will be freed by the device driver on
- success, or by the queuing discipline on failure, so the caller should not
- touch <var class="Fa">m</var> after enqueuing.
- <code class="Fn">IFQ_HANDOFF</code>() and
- <code class="Fn">IFQ_HANDOFF_ADJ</code>() combine the enqueue operation with
- statistic generation and call
- <a class="permalink" href="#if_start"><code class="Fn" id="if_start">if_start</code></a>()
- upon successful enqueue to initiate the actual send.</p>
-<p class="Pp" id="IFQ_DEQUEUE"><a class="permalink" href="#IFQ_DEQUEUE"><code class="Fn">IFQ_DEQUEUE</code></a>()
- dequeues a packet from the queue. The dequeued packet is returned in
- <var class="Fa">m</var>, or <var class="Fa">m</var> is set to
- <code class="Dv">NULL</code> if no packet is dequeued. The caller must
- always check <var class="Fa">m</var> since a non-empty queue could return
- <code class="Dv">NULL</code> under rate-limiting.</p>
-<p class="Pp" id="IFQ_POLL_NOLOCK"><a class="permalink" href="#IFQ_POLL_NOLOCK"><code class="Fn">IFQ_POLL_NOLOCK</code></a>()
- returns the next packet without removing it from the queue. The caller must
- hold the queue mutex when calling <code class="Fn">IFQ_POLL_NOLOCK</code>()
- in order to guarantee that a subsequent call to
- <a class="permalink" href="#IFQ_DEQUEUE_NOLOCK"><code class="Fn" id="IFQ_DEQUEUE_NOLOCK">IFQ_DEQUEUE_NOLOCK</code></a>()
- dequeues the same packet.</p>
-<p class="Pp" id="IFQ_*_NOLOCK"><a class="permalink" href="#IFQ_*_NOLOCK"><code class="Fn">IFQ_*_NOLOCK</code></a>()
- variants (if available) always assume that the caller holds the queue mutex.
- They can be grabbed with
- <a class="permalink" href="#IFQ_LOCK"><code class="Fn" id="IFQ_LOCK">IFQ_LOCK</code></a>()
- and released with
- <a class="permalink" href="#IFQ_UNLOCK"><code class="Fn" id="IFQ_UNLOCK">IFQ_UNLOCK</code></a>().</p>
-<p class="Pp" id="IFQ_PURGE"><a class="permalink" href="#IFQ_PURGE"><code class="Fn">IFQ_PURGE</code></a>()
- discards all the packets in the queue. The purge operation is needed since a
- non-work conserving queue cannot be emptied by a dequeue loop.</p>
-<p class="Pp" id="IFQ_IS_EMPTY"><a class="permalink" href="#IFQ_IS_EMPTY"><code class="Fn">IFQ_IS_EMPTY</code></a>()
- can be used to check if the queue is empty. Note that
- <code class="Fn">IFQ_DEQUEUE</code>() could still return
- <code class="Dv">NULL</code> if the queuing discipline is non-work
- conserving.</p>
-<p class="Pp" id="IFQ_DRV_DEQUEUE"><a class="permalink" href="#IFQ_DRV_DEQUEUE"><code class="Fn">IFQ_DRV_DEQUEUE</code></a>()
- moves up to <var class="Fa">ifq-&gt;ifq_drv_maxlen</var> packets from the
- queue to the &#x201C;driver managed&#x201D; queue and returns the first one
- via <var class="Fa">m</var>. As for <code class="Fn">IFQ_DEQUEUE</code>(),
- <var class="Fa">m</var> can be <code class="Dv">NULL</code> even for a
- non-empty queue. Subsequent calls to
- <code class="Fn">IFQ_DRV_DEQUEUE</code>() pass the packets from the
- &#x201C;driver managed&#x201D; queue without obtaining the queue mutex. It
- is the responsibility of the caller to protect against concurrent access.
- Enabling <code class="Nm">ALTQ</code> for a given queue sets
- <var class="Va">ifq_drv_maxlen</var> to 0 as the &#x201C;bulk
- dequeue&#x201D; performed by <code class="Fn">IFQ_DRV_DEQUEUE</code>() for
- higher values of <var class="Va">ifq_drv_maxlen</var> is adverse to
- <code class="Nm">ALTQ</code>'s internal timing. Note that a driver must not
- mix
- <a class="permalink" href="#IFQ_DRV_*"><code class="Fn" id="IFQ_DRV_*">IFQ_DRV_*</code></a>()
- macros with the default dequeue macros as the default macros do not look at
- the &#x201C;driver managed&#x201D; queue which might lead to an mbuf
- leak.</p>
-<p class="Pp" id="IFQ_DRV_PREPEND"><a class="permalink" href="#IFQ_DRV_PREPEND"><code class="Fn">IFQ_DRV_PREPEND</code></a>()
- prepends <var class="Fa">m</var> to the &#x201C;driver managed&#x201D; queue
- from where it will be obtained with the next call to
- <code class="Fn">IFQ_DRV_DEQUEUE</code>().</p>
-<p class="Pp" id="IFQ_DRV_PURGE"><a class="permalink" href="#IFQ_DRV_PURGE"><code class="Fn">IFQ_DRV_PURGE</code></a>()
- flushes all packets in the &#x201C;driver managed&#x201D; queue and calls to
- <code class="Fn">IFQ_PURGE</code>() afterwards.</p>
-<p class="Pp" id="IFQ_DRV_IS_EMPTY"><a class="permalink" href="#IFQ_DRV_IS_EMPTY"><code class="Fn">IFQ_DRV_IS_EMPTY</code></a>()
- checks for packets in the &#x201C;driver managed&#x201D; part of the queue.
- If it is empty, it forwards to <code class="Fn">IFQ_IS_EMPTY</code>().</p>
-<p class="Pp" id="IFQ_SET_MAXLEN"><a class="permalink" href="#IFQ_SET_MAXLEN"><code class="Fn">IFQ_SET_MAXLEN</code></a>()
- sets the queue length limit to the default FIFO queue. The
- <var class="Va">ifq_drv_maxlen</var> member of the
- <var class="Vt">ifaltq</var> structure controls the length limit of the
- &#x201C;driver managed&#x201D; queue.</p>
-<p class="Pp" id="IFQ_INC_LEN"><a class="permalink" href="#IFQ_INC_LEN"><code class="Fn">IFQ_INC_LEN</code></a>()
- and
- <a class="permalink" href="#IFQ_DEC_LEN"><code class="Fn" id="IFQ_DEC_LEN">IFQ_DEC_LEN</code></a>()
- increment or decrement the current queue length in packets. This is mostly
- for internal purposes.</p>
-<p class="Pp" id="IFQ_INC_DROPS"><a class="permalink" href="#IFQ_INC_DROPS"><code class="Fn">IFQ_INC_DROPS</code></a>()
- increments the drop counter and is identical to
- <a class="permalink" href="#IF_DROP"><code class="Fn" id="IF_DROP">IF_DROP</code></a>().
- It is defined for naming consistency only.</p>
-<p class="Pp" id="IFQ_SET_READY"><a class="permalink" href="#IFQ_SET_READY"><code class="Fn">IFQ_SET_READY</code></a>()
- sets a flag to indicate that a driver was converted to use the new macros.
- <code class="Nm">ALTQ</code> can be enabled only on interfaces with this
- flag.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="ifaltq_structure"><a class="permalink" href="#ifaltq_structure"><var class="Vt">ifaltq
- structure</var></a></h2>
-<p class="Pp">In order to keep compatibility with the existing code, the new
- output queue structure <var class="Vt">ifaltq</var> has the same fields. The
- traditional <code class="Fn">IF_*</code>() macros and the code directly
- referencing the fields within <var class="Va">if_snd</var> still work with
- <var class="Vt">ifaltq</var>.</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- struct ifqueue { | struct ifaltq {
- struct mbuf *ifq_head; | struct mbuf *ifq_head;
- struct mbuf *ifq_tail; | struct mbuf *ifq_tail;
- int ifq_len; | int ifq_len;
- int ifq_maxlen; | int ifq_maxlen;
- }; | /* driver queue fields */
- | ......
- | /* altq related fields */
- | ......
- | };
- |</pre>
-</div>
-The new structure replaces <var class="Vt">struct ifqueue</var> in
- <var class="Vt">struct ifnet</var>.
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- struct ifnet { | struct ifnet {
- .... | ....
- |
- struct ifqueue if_snd; | struct ifaltq if_snd;
- |
- .... | ....
- }; | };
- |</pre>
-</div>
-The (simplified) new <code class="Fn">IFQ_*</code>() macros look like:
-<div class="Bd Pp Li">
-<pre> #define IFQ_DEQUEUE(ifq, m) \
- if (ALTQ_IS_ENABLED((ifq)) \
- ALTQ_DEQUEUE((ifq), (m)); \
- else \
- IF_DEQUEUE((ifq), (m));</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Enqueue_operation"><a class="permalink" href="#Enqueue_operation">Enqueue
- operation</a></h2>
-<p class="Pp">The semantics of the enqueue operation is changed. In the new
- style, enqueue and packet drop are combined since they cannot be easily
- separated in many queuing disciplines. The new enqueue operation corresponds
- to the following macro that is written with the old macros.</p>
-<div class="Bd Pp Li">
-<pre>#define IFQ_ENQUEUE(ifq, m, error) \
-do { \
- if (IF_QFULL((ifq))) { \
- m_freem((m)); \
- (error) = ENOBUFS; \
- IF_DROP(ifq); \
- } else { \
- IF_ENQUEUE((ifq), (m)); \
- (error) = 0; \
- } \
-} while (0)</pre>
-</div>
-<p class="Pp"><code class="Fn">IFQ_ENQUEUE</code>() does the following:</p>
-<p class="Pp"></p>
-<ul class="Bl-dash Bl-compact">
- <li>queue a packet,</li>
- <li>drop (and free) a packet if the enqueue operation fails.</li>
-</ul>
-<p class="Pp">If the enqueue operation fails, <var class="Fa">error</var> is set
- to <code class="Er">ENOBUFS</code>. The <var class="Fa">m</var> mbuf is
- freed by the queuing discipline. The caller should not touch mbuf after
- calling <code class="Fn">IFQ_ENQUEUE</code>() so that the caller may need to
- copy <var class="Va">m_pkthdr.len</var> or <var class="Va">m_flags</var>
- field beforehand for statistics. <code class="Fn">IFQ_HANDOFF</code>() and
- <code class="Fn">IFQ_HANDOFF_ADJ</code>() can be used if only default
- interface statistics and an immediate call to
- <code class="Fn">if_start</code>() are desired. The caller should not use
- <code class="Fn">senderr</code>() since mbuf was already freed.</p>
-<p class="Pp">The new style <code class="Fn">if_output</code>() looks as
- follows:</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- int | int
- ether_output(ifp, m0, dst, rt0) | ether_output(ifp, m0, dst, rt0)
- { | {
- ...... | ......
- |
- | mflags = m-&gt;m_flags;
- | len = m-&gt;m_pkthdr.len;
- s = splimp(); | s = splimp();
- if (IF_QFULL(&amp;ifp-&gt;if_snd)) { | IFQ_ENQUEUE(&amp;ifp-&gt;if_snd, m,
- | error);
- IF_DROP(&amp;ifp-&gt;if_snd); | if (error != 0) {
- splx(s); | splx(s);
- senderr(ENOBUFS); | return (error);
- } | }
- IF_ENQUEUE(&amp;ifp-&gt;if_snd, m); |
- ifp-&gt;if_obytes += | ifp-&gt;if_obytes += len;
- m-&gt;m_pkthdr.len; |
- if (m-&gt;m_flags &amp; M_MCAST) | if (mflags &amp; M_MCAST)
- ifp-&gt;if_omcasts++; | ifp-&gt;if_omcasts++;
- |
- if ((ifp-&gt;if_flags &amp; IFF_OACTIVE) | if ((ifp-&gt;if_flags &amp; IFF_OACTIVE)
- == 0) | == 0)
- (*ifp-&gt;if_start)(ifp); | (*ifp-&gt;if_start)(ifp);
- splx(s); | splx(s);
- return (error); | return (error);
- |
- bad: | bad:
- if (m) | if (m)
- m_freem(m); | m_freem(m);
- return (error); | return (error);
- } | }
- |</pre>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HOW_TO_CONVERT_THE_EXISTING_DRIVERS"><a class="permalink" href="#HOW_TO_CONVERT_THE_EXISTING_DRIVERS">HOW
- TO CONVERT THE EXISTING DRIVERS</a></h1>
-<p class="Pp">First, make sure the corresponding
- <a class="permalink" href="#if_output"><code class="Fn" id="if_output">if_output</code></a>()
- is already converted to the new style.</p>
-<p class="Pp">Look for <var class="Va">if_snd</var> in the driver. Probably, you
- need to make changes to the lines that include
- <var class="Va">if_snd</var>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Empty_check_operation"><a class="permalink" href="#Empty_check_operation">Empty
- check operation</a></h2>
-<p class="Pp">If the code checks <var class="Va">ifq_head</var> to see whether
- the queue is empty or not, use
- <a class="permalink" href="#IFQ_IS_EMPTY~2"><code class="Fn" id="IFQ_IS_EMPTY~2">IFQ_IS_EMPTY</code></a>().</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- if (ifp-&gt;if_snd.ifq_head != NULL) | if (!IFQ_IS_EMPTY(&amp;ifp-&gt;if_snd))
- |</pre>
-</div>
-<code class="Fn">IFQ_IS_EMPTY</code>() only checks if there is any packet stored
- in the queue. Note that even when <code class="Fn">IFQ_IS_EMPTY</code>() is
- <code class="Dv">FALSE</code>, <code class="Fn">IFQ_DEQUEUE</code>() could
- still return <code class="Dv">NULL</code> if the queue is under rate-limiting.
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Dequeue_operation"><a class="permalink" href="#Dequeue_operation">Dequeue
- operation</a></h2>
-<p class="Pp">Replace
- <a class="permalink" href="#IF_DEQUEUE"><code class="Fn" id="IF_DEQUEUE">IF_DEQUEUE</code></a>()
- by <code class="Fn">IFQ_DEQUEUE</code>(). Always check whether the dequeued
- mbuf is <code class="Dv">NULL</code> or not. Note that even when
- <code class="Fn">IFQ_IS_EMPTY</code>() is <code class="Dv">FALSE</code>,
- <code class="Fn">IFQ_DEQUEUE</code>() could return
- <code class="Dv">NULL</code> due to rate-limiting.</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- IF_DEQUEUE(&amp;ifp-&gt;if_snd, m); | IFQ_DEQUEUE(&amp;ifp-&gt;if_snd, m);
- | if (m == NULL)
- | return;
- |</pre>
-</div>
-A driver is supposed to call <code class="Fn">if_start</code>() from
- transmission complete interrupts in order to trigger the next dequeue.
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Poll-and-dequeue_operation"><a class="permalink" href="#Poll-and-dequeue_operation">Poll-and-dequeue
- operation</a></h2>
-<p class="Pp">If the code polls the packet at the head of the queue and actually
- uses the packet before dequeuing it, use
- <code class="Fn">IFQ_POLL_NOLOCK</code>() and
- <code class="Fn">IFQ_DEQUEUE_NOLOCK</code>().</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- | IFQ_LOCK(&amp;ifp-&gt;if_snd);
- m = ifp-&gt;if_snd.ifq_head; | IFQ_POLL_NOLOCK(&amp;ifp-&gt;if_snd, m);
- if (m != NULL) { | if (m != NULL) {
- |
- /* use m to get resources */ | /* use m to get resources */
- if (something goes wrong) | if (something goes wrong)
- | IFQ_UNLOCK(&amp;ifp-&gt;if_snd);
- return; | return;
- |
- IF_DEQUEUE(&amp;ifp-&gt;if_snd, m); | IFQ_DEQUEUE_NOLOCK(&amp;ifp-&gt;if_snd, m);
- | IFQ_UNLOCK(&amp;ifp-&gt;if_snd);
- |
- /* kick the hardware */ | /* kick the hardware */
- } | }
- |</pre>
-</div>
-It is guaranteed that <code class="Fn">IFQ_DEQUEUE_NOLOCK</code>() under the
- same lock as a previous <code class="Fn">IFQ_POLL_NOLOCK</code>() returns the
- same packet. Note that they need to be guarded by
- <code class="Fn">IFQ_LOCK</code>().
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Eliminating_IF_PREPEND"><a class="permalink" href="#Eliminating_IF_PREPEND">Eliminating
- <a class="permalink" href="#IF_PREPEND"><code class="Fn" id="IF_PREPEND">IF_PREPEND</code></a>()</a></h2>
-<p class="Pp">If the code uses <code class="Fn">IF_PREPEND</code>(), you have to
- eliminate it unless you can use a &#x201C;driver managed&#x201D; queue which
- allows the use of <code class="Fn">IFQ_DRV_PREPEND</code>() as a substitute.
- A common usage of <code class="Fn">IF_PREPEND</code>() is to cancel the
- previous dequeue operation. You have to convert the logic into
- poll-and-dequeue.</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- | IFQ_LOCK(&amp;ifp-&gt;if_snd);
- IF_DEQUEUE(&amp;ifp-&gt;if_snd, m); | IFQ_POLL_NOLOCK(&amp;ifp-&gt;if_snd, m);
- if (m != NULL) { | if (m != NULL) {
- |
- if (something_goes_wrong) { | if (something_goes_wrong) {
- IF_PREPEND(&amp;ifp-&gt;if_snd, m); | IFQ_UNLOCK(&amp;ifp-&gt;if_snd);
- return; | return;
- } | }
- |
- | /* at this point, the driver
- | * is committed to send this
- | * packet.
- | */
- | IFQ_DEQUEUE_NOLOCK(&amp;ifp-&gt;if_snd, m);
- | IFQ_UNLOCK(&amp;ifp-&gt;if_snd);
- |
- /* kick the hardware */ | /* kick the hardware */
- } | }
- |</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Purge_operation"><a class="permalink" href="#Purge_operation">Purge
- operation</a></h2>
-<p class="Pp">Use <code class="Fn">IFQ_PURGE</code>() to empty the queue. Note
- that a non-work conserving queue cannot be emptied by a dequeue loop.</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- while (ifp-&gt;if_snd.ifq_head != NULL) {| IFQ_PURGE(&amp;ifp-&gt;if_snd);
- IF_DEQUEUE(&amp;ifp-&gt;if_snd, m); |
- m_freem(m); |
- } |
- |</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Conversion_using_a_driver_managed_queue"><a class="permalink" href="#Conversion_using_a_driver_managed_queue">Conversion
- using a driver managed queue</a></h2>
-<p class="Pp">Convert
- <a class="permalink" href="#IF_*"><code class="Fn" id="IF_*">IF_*</code></a>()
- macros to their equivalent <code class="Fn">IFQ_DRV_*</code>() and employ
- <code class="Fn">IFQ_DRV_IS_EMPTY</code>() where appropriate.</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- if (ifp-&gt;if_snd.ifq_head != NULL) | if (!IFQ_DRV_IS_EMPTY(&amp;ifp-&gt;if_snd))
- |</pre>
-</div>
-Make sure that calls to <code class="Fn">IFQ_DRV_DEQUEUE</code>(),
- <code class="Fn">IFQ_DRV_PREPEND</code>() and
- <code class="Fn">IFQ_DRV_PURGE</code>() are protected with a mutex of some
- kind.
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Attach_routine"><a class="permalink" href="#Attach_routine">Attach
- routine</a></h2>
-<p class="Pp">Use <code class="Fn">IFQ_SET_MAXLEN</code>() to set
- <var class="Va">ifq_maxlen</var> to <var class="Fa">len</var>. Initialize
- <var class="Va">ifq_drv_maxlen</var> with a sensible value if you plan to
- use the <code class="Fn">IFQ_DRV_*</code>() macros. Add
- <code class="Fn">IFQ_SET_READY</code>() to show this driver is converted to
- the new style. (This is used to distinguish new-style drivers.)</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- ifp-&gt;if_snd.ifq_maxlen = qsize; | IFQ_SET_MAXLEN(&amp;ifp-&gt;if_snd, qsize);
- | ifp-&gt;if_snd.ifq_drv_maxlen = qsize;
- | IFQ_SET_READY(&amp;ifp-&gt;if_snd);
- if_attach(ifp); | if_attach(ifp);
- |</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Other_issues"><a class="permalink" href="#Other_issues">Other
- issues</a></h2>
-<p class="Pp">The new macros for statistics:</p>
-<div class="Bd Pp Li">
-<pre> ##old-style## ##new-style##
- |
- IF_DROP(&amp;ifp-&gt;if_snd); | IFQ_INC_DROPS(&amp;ifp-&gt;if_snd);
- |
- ifp-&gt;if_snd.ifq_len++; | IFQ_INC_LEN(&amp;ifp-&gt;if_snd);
- |
- ifp-&gt;if_snd.ifq_len--; | IFQ_DEC_LEN(&amp;ifp-&gt;if_snd);
- |</pre>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="QUEUING_DISCIPLINES"><a class="permalink" href="#QUEUING_DISCIPLINES">QUEUING
- DISCIPLINES</a></h1>
-<p class="Pp">Queuing disciplines need to maintain <var class="Fa">ifq_len</var>
- (used by <code class="Fn">IFQ_IS_EMPTY</code>()). Queuing disciplines also
- need to guarantee that the same mbuf is returned if
- <code class="Fn">IFQ_DEQUEUE</code>() is called immediately after
- <a class="permalink" href="#IFQ_POLL"><code class="Fn" id="IFQ_POLL">IFQ_POLL</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pf(4)</a>, <a class="Xr">pf.conf(5)</a>,
- <a class="Xr">pfctl(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">ALTQ</code> system first appeared in March
- 1997 and found home in the KAME project (https://www.kame.net). It was
- imported to <span class="Ux">FreeBSD</span> in 5.3 .</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 20, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/atomic.9 3.html b/static/freebsd/man9/atomic.9 3.html
deleted file mode 100644
index fc10c6fe..00000000
--- a/static/freebsd/man9/atomic.9 3.html
+++ /dev/null
@@ -1,613 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ATOMIC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ATOMIC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">atomic_add</code>,
- <code class="Nm">atomic_clear</code>, <code class="Nm">atomic_cmpset</code>,
- <code class="Nm">atomic_fcmpset</code>,
- <code class="Nm">atomic_fetchadd</code>,
- <code class="Nm">atomic_interrupt_fence</code>,
- <code class="Nm">atomic_load</code>,
- <code class="Nm">atomic_readandclear</code>,
- <code class="Nm">atomic_set</code>, <code class="Nm">atomic_subtract</code>,
- <code class="Nm">atomic_store</code>,
- <code class="Nm">atomic_thread_fence</code> &#x2014; <span class="Nd">atomic
- operations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/atomic.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_add_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_clear_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">atomic_cmpset_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa">volatile
- &lt;type&gt; *dst</var>, <var class="Fa">&lt;type&gt; old</var>,
- <var class="Fa">&lt;type&gt; new</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">atomic_fcmpset_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa">volatile
- &lt;type&gt; *dst</var>, <var class="Fa">&lt;type&gt; *old</var>,
- <var class="Fa">&lt;type&gt; new</var>);</p>
-<p class="Pp"><var class="Ft">&lt;type&gt;</var>
- <br/>
- <code class="Fn">atomic_fetchadd_&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_interrupt_fence</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">&lt;type&gt;</var>
- <br/>
- <code class="Fn">atomic_load_[acq_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">const
- volatile &lt;type&gt; *p</var>);</p>
-<p class="Pp"><var class="Ft">&lt;type&gt;</var>
- <br/>
- <code class="Fn">atomic_readandclear_&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_set_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_subtract_[acq_|rel_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_store_[rel_]&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">&lt;type&gt;</var>
- <br/>
- <code class="Fn">atomic_swap_&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>,
- <var class="Fa" style="white-space: nowrap;">&lt;type&gt; v</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">atomic_testandclear_&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>, <var class="Fa" style="white-space: nowrap;">u_int
- v</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">atomic_testandset_&lt;type&gt;</code>(<var class="Fa" style="white-space: nowrap;">volatile
- &lt;type&gt; *p</var>, <var class="Fa" style="white-space: nowrap;">u_int
- v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">atomic_thread_fence_[acq|acq_rel|rel|seq_cst]</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Atomic operations are commonly used to implement reference counts
- and as building blocks for synchronization primitives, such as mutexes.</p>
-<p class="Pp" id="atomically">All of these operations are performed
- <a class="permalink" href="#atomically"><i class="Em">atomically</i></a>
- across multiple threads and in the presence of interrupts, meaning that they
- are performed in an indivisible manner from the perspective of concurrently
- running threads and interrupt handlers.</p>
-<p class="Pp">On all architectures supported by <span class="Ux">FreeBSD</span>,
- ordinary loads and stores of integers in cache-coherent memory are
- inherently atomic if the integer is naturally aligned and its size does not
- exceed the processor's word size. However, such loads and stores may be
- elided from the program by the compiler, whereas atomic operations are
- always performed.</p>
-<p class="Pp">When atomic operations are performed on cache-coherent memory, all
- operations on the same location are totally ordered.</p>
-<p class="Pp" id="torn">When an atomic load is performed on a location in
- cache-coherent memory, it reads the entire value that was defined by the
- last atomic store to each byte of the location. An atomic load will never
- return a value out of thin air. When an atomic store is performed on a
- location, no other thread or interrupt handler will observe a
- <a class="permalink" href="#torn"><i class="Em">torn write</i></a>, or
- partial modification of the location.</p>
-<p class="Pp">Except as noted below, the semantics of these operations are
- almost identical to the semantics of similarly named C11 atomic
- operations.</p>
-<section class="Ss">
-<h2 class="Ss" id="Types"><a class="permalink" href="#Types">Types</a></h2>
-<p class="Pp">Most atomic operations act upon a specific
- <var class="Fa">type</var>. That type is indicated in the function name. In
- contrast to C11 atomic operations, <span class="Ux">FreeBSD</span>'s atomic
- operations are performed on ordinary integer types. The available types
- are:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="int"><a class="permalink" href="#int"><code class="Li">int</code></a></dt>
- <dd>unsigned integer</dd>
- <dt id="long"><a class="permalink" href="#long"><code class="Li">long</code></a></dt>
- <dd>unsigned long integer</dd>
- <dt id="ptr"><a class="permalink" href="#ptr"><code class="Li">ptr</code></a></dt>
- <dd>unsigned integer the size of a pointer</dd>
- <dt id="32"><a class="permalink" href="#32"><code class="Li">32</code></a></dt>
- <dd>unsigned 32-bit integer</dd>
- <dt id="64"><a class="permalink" href="#64"><code class="Li">64</code></a></dt>
- <dd>unsigned 64-bit integer</dd>
-</dl>
-</div>
-<p class="Pp" id="atomic_add_int">For example, the function to atomically add
- two integers is called
- <a class="permalink" href="#atomic_add_int"><code class="Fn">atomic_add_int</code></a>().</p>
-<p class="Pp">Certain architectures also provide operations for types smaller
- than &#x201C;<code class="Li">int</code>&#x201D;.</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="char"><a class="permalink" href="#char"><code class="Li">char</code></a></dt>
- <dd>unsigned character</dd>
- <dt id="short"><a class="permalink" href="#short"><code class="Li">short</code></a></dt>
- <dd>unsigned short integer</dd>
- <dt id="8"><a class="permalink" href="#8"><code class="Li">8</code></a></dt>
- <dd>unsigned 8-bit integer</dd>
- <dt id="16"><a class="permalink" href="#16"><code class="Li">16</code></a></dt>
- <dd>unsigned 16-bit integer</dd>
-</dl>
-</div>
-<p class="Pp">These types must not be used in machine-independent code.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Acquire_and_Release_Operations"><a class="permalink" href="#Acquire_and_Release_Operations">Acquire
- and Release Operations</a></h2>
-<p class="Pp">By default, a thread's accesses to different memory locations
- might not be performed in
- <a class="permalink" href="#program"><i class="Em" id="program">program
- order</i></a>, that is, the order in which the accesses appear in the source
- code. To optimize the program's execution, both the compiler and processor
- might reorder the thread's accesses. However, both ensure that their
- reordering of the accesses is not visible to the thread. Otherwise, the
- traditional memory model that is expected by single-threaded programs would
- be violated. Nonetheless, other threads in a multithreaded program, such as
- the <span class="Ux">FreeBSD</span> kernel, might observe the reordering.
- Moreover, in some cases, such as the implementation of synchronization
- between threads, arbitrary reordering might result in the incorrect
- execution of the program. To constrain the reordering that both the compiler
- and processor might perform on a thread's accesses, a programmer can use
- atomic operations with <i class="Em">acquire</i> and
- <i class="Em">release</i> semantics.</p>
-<p class="Pp" id="relaxed">Atomic operations on memory have up to three
- variants. The first, or
- <a class="permalink" href="#relaxed"><i class="Em">relaxed</i></a> variant,
- performs the operation without imposing any ordering constraints on accesses
- to other memory locations. This variant is the default. The second variant
- has acquire semantics, and the third variant has release semantics.</p>
-<p class="Pp" id="atomic_subtract_acq_int">An atomic operation can only have
- <i class="Em">acquire</i> semantics if it performs a load from memory. When
- an atomic operation has acquire semantics, a load performed as part of the
- operation must have completed before any subsequent load or store (by
- program order) is performed. Conversely, acquire semantics do not require
- that prior loads or stores have completed before a load from the atomic
- operation is performed. To denote acquire semantics, the suffix
- &#x201C;<code class="Li">_acq</code>&#x201D; is inserted into the function
- name immediately prior to the
- &#x201C;<code class="Li">_</code>&#x27E8;<var class="Fa">type</var>&#x27E9;&#x201D;
- suffix. For example, to subtract two integers ensuring that the load of the
- value from memory is completed before any subsequent loads and stores are
- performed, use
- <a class="permalink" href="#atomic_subtract_acq_int"><code class="Fn">atomic_subtract_acq_int</code></a>().</p>
-<p class="Pp" id="atomic_add_rel_long">An atomic operation can only have
- <i class="Em">release</i> semantics if it performs a store to memory. When
- an atomic operation has release semantics, all prior loads or stores (by
- program order) must have completed before a store executed as part of the
- operation that is performed. Conversely, release semantics do not require
- that a store from the atomic operation must have completed before any
- subsequent load or store is performed. To denote release semantics, the
- suffix &#x201C;<code class="Li">_rel</code>&#x201D; is inserted into the
- function name immediately prior to the
- &#x201C;<code class="Li">_</code>&#x27E8;<var class="Fa">type</var>&#x27E9;&#x201D;
- suffix. For example, to add two long integers ensuring that all prior loads
- and stores are completed before the store of the result is performed, use
- <a class="permalink" href="#atomic_add_rel_long"><code class="Fn">atomic_add_rel_long</code></a>().</p>
-<p class="Pp" id="synchronizes">When a release operation by one thread
- <a class="permalink" href="#synchronizes"><i class="Em">synchronizes
- with</i></a> an acquire operation by another thread, usually meaning that
- the acquire operation reads the value written by the release operation, then
- the effects of all prior stores by the releasing thread must become visible
- to subsequent loads by the acquiring thread. Moreover, the effects of all
- stores (by other threads) that were visible to the releasing thread must
- also become visible to the acquiring thread. These rules only apply to the
- synchronizing threads. Other threads might observe these stores in a
- different order.</p>
-<p class="Pp">In effect, atomic operations with acquire and release semantics
- establish one-way barriers to reordering that enable the implementations of
- synchronization primitives to express their ordering requirements without
- also imposing unnecessary ordering. For example, for a critical section
- guarded by a mutex, an acquire operation when the mutex is locked and a
- release operation when the mutex is unlocked will prevent any loads or
- stores from moving outside of the critical section. However, they will not
- prevent the compiler or processor from moving loads or stores into the
- critical section, which does not violate the semantics of a mutex.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Architecture-dependent_caveats_for_compare-and-swap"><a class="permalink" href="#Architecture-dependent_caveats_for_compare-and-swap">Architecture-dependent
- caveats for compare-and-swap</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#atomic__f_cmpset__type_"><code class="Fn" id="atomic__f_cmpset__type_">atomic_[f]cmpset_&lt;type&gt;</code></a>()
- operations, specifically those without explicitly specified memory ordering,
- are defined as relaxed. Consequently, a thread's accesses to memory
- locations different from that of the atomic operation can be reordered in
- relation to the atomic operation.</p>
-<p class="Pp" id="amd64">However, the implementation on the
- <a class="permalink" href="#amd64"><b class="Sy">amd64</b></a> and
- <a class="permalink" href="#i386"><b class="Sy" id="i386">i386</b></a>
- architectures provide sequentially consistent semantics. In particular, the
- reordering mentioned above cannot occur.</p>
-<p class="Pp" id="arm64/aarch64">On the
- <a class="permalink" href="#arm64/aarch64"><b class="Sy">arm64/aarch64</b></a>
- architecture, the operation may include either acquire semantics on the
- constituent load or release semantics on the constituent store. This means
- that accesses to other locations in program order before the atomic, might
- be observed as executed after the load that is the part of the atomic
- operation (but not after the store from the operation due to release).
- Similarly, accesses after the atomic might be observed as executed before
- the store.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Thread_Fence_Operations"><a class="permalink" href="#Thread_Fence_Operations">Thread
- Fence Operations</a></h2>
-<p class="Pp">Alternatively, a programmer can use atomic thread fence operations
- to constrain the reordering of accesses. In contrast to other atomic
- operations, fences do not, themselves, access memory.</p>
-<p class="Pp" id="atomic_thread_fence_acq">When a fence has acquire semantics,
- all prior loads (by program order) must have completed before any subsequent
- load or store is performed. Thus, an acquire fence is a two-way barrier for
- load operations. To denote acquire semantics, the suffix
- &#x201C;<code class="Li">_acq</code>&#x201D; is appended to the function
- name, for example,
- <a class="permalink" href="#atomic_thread_fence_acq"><code class="Fn">atomic_thread_fence_acq</code></a>().</p>
-<p class="Pp" id="atomic_thread_fence_rel">When a fence has release semantics,
- all prior loads or stores (by program order) must have completed before any
- subsequent store operation is performed. Thus, a release fence is a two-way
- barrier for store operations. To denote release semantics, the suffix
- &#x201C;<code class="Li">_rel</code>&#x201D; is appended to the function
- name, for example,
- <a class="permalink" href="#atomic_thread_fence_rel"><code class="Fn">atomic_thread_fence_rel</code></a>().</p>
-<p class="Pp" id="atomic_thread_fence_acq_rel">Although
- <a class="permalink" href="#atomic_thread_fence_acq_rel"><code class="Fn">atomic_thread_fence_acq_rel</code></a>()
- implements both acquire and release semantics, it is not a full barrier. For
- example, a store prior to the fence (in program order) may be completed
- after a load subsequent to the fence. In contrast,
- <a class="permalink" href="#atomic_thread_fence_seq_cst"><code class="Fn" id="atomic_thread_fence_seq_cst">atomic_thread_fence_seq_cst</code></a>()
- implements a full barrier. Neither loads nor stores may cross this barrier
- in either direction.</p>
-<p class="Pp">In C11, a release fence by one thread synchronizes with an acquire
- fence by another thread when an atomic load that is prior to the acquire
- fence (by program order) reads the value written by an atomic store that is
- subsequent to the release fence. In contrast, in
- <span class="Ux">FreeBSD</span>, because of the atomicity of ordinary,
- naturally aligned loads and stores, fences can also be synchronized by
- ordinary loads and stores. This simplifies the implementation and use of
- some synchronization primitives in <span class="Ux">FreeBSD</span>.</p>
-<p class="Pp">Since neither a compiler nor a processor can foresee which
- (atomic) load will read the value written by an (atomic) store, the ordering
- constraints imposed by fences must be more restrictive than acquire loads
- and release stores. Essentially, this is why fences are two-way
- barriers.</p>
-<p class="Pp">Although fences impose more restrictive ordering than acquire
- loads and release stores, by separating access from ordering, they can
- sometimes facilitate more efficient implementations of synchronization
- primitives. For example, they can be used to avoid executing a memory
- barrier until a memory access shows that some condition is satisfied.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interrupt_Fence_Operations"><a class="permalink" href="#Interrupt_Fence_Operations">Interrupt
- Fence Operations</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#atomic_interrupt_fence"><code class="Fn" id="atomic_interrupt_fence">atomic_interrupt_fence</code></a>()
- function establishes ordering between its call location and any interrupt
- handler executing on the same CPU. It is modeled after the similar C11
- function
- <a class="permalink" href="#atomic_signal_fence"><code class="Fn" id="atomic_signal_fence">atomic_signal_fence</code></a>(),
- and adapted for the kernel environment.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Multiple_Processors"><a class="permalink" href="#Multiple_Processors">Multiple
- Processors</a></h2>
-<p class="Pp">In multiprocessor systems, the atomicity of the atomic operations
- on memory depends on support for cache coherence in the underlying
- architecture. In general, cache coherence on the default memory type,
- <code class="Dv">VM_MEMATTR_DEFAULT</code>, is guaranteed by all
- architectures that are supported by <span class="Ux">FreeBSD</span>. For
- example, cache coherence is guaranteed on write-back memory by the amd64 and
- i386 architectures. However, on some architectures, cache coherence might
- not be enabled on all memory types. To determine if cache coherence is
- enabled for a non-default memory type, consult the architecture's
- documentation.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Semantics"><a class="permalink" href="#Semantics">Semantics</a></h2>
-<p class="Pp">This section describes the semantics of each operation using a C
- like notation.</p>
-<dl class="Bl-hang">
- <dt id="atomic_add"><a class="permalink" href="#atomic_add"><code class="Fn">atomic_add</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>*p += v;</pre>
- </div>
- </dd>
- <dt id="atomic_clear"><a class="permalink" href="#atomic_clear"><code class="Fn">atomic_clear</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>*p &amp;= ~v;</pre>
- </div>
- </dd>
- <dt><code class="Fn">atomic_cmpset</code>(<var class="Fa">dst</var>,
- <var class="Fa">old</var>, <var class="Fa">new</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>if (*dst == old) {
- *dst = new;
- return (1);
-} else
- return (0);</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="atomic_cmpset">Some architectures do not implement the
- <a class="permalink" href="#atomic_cmpset"><code class="Fn">atomic_cmpset</code></a>()
- functions for the types &#x201C;<code class="Li">char</code>&#x201D;,
- &#x201C;<code class="Li">short</code>&#x201D;,
- &#x201C;<code class="Li">8</code>&#x201D;, and
- &#x201C;<code class="Li">16</code>&#x201D;.</p>
-<dl class="Bl-hang">
- <dt><code class="Fn">atomic_fcmpset</code>(<var class="Fa">dst</var>,
- <var class="Fa">*old</var>, <var class="Fa">new</var>)</dt>
- <dd></dd>
-</dl>
-<p class="Pp" id="Compare">On architectures implementing
- <a class="permalink" href="#Compare"><i class="Em">Compare And Swap</i></a>
- operation in hardware, the functionality can be described as</p>
-<div class="Bd Bd-indent Li">
-<pre>if (*dst == *old) {
- *dst = new;
- return (1);
-} else {
- *old = *dst;
- return (0);
-}</pre>
-</div>
-On architectures which provide
- <a class="permalink" href="#Load"><i class="Em" id="Load">Load Linked/Store
- Conditional</i></a> primitive, the write to <code class="Dv">*dst</code> might
- also fail for several reasons, most important of which is a parallel write to
- <code class="Dv">*dst</code> cache line by other CPU. In this case
- <a class="permalink" href="#atomic_fcmpset"><code class="Fn" id="atomic_fcmpset">atomic_fcmpset</code></a>()
- function also returns <code class="Dv">false</code>, despite
-<div class="Bd Bd-indent"><code class="Li">*old == *dst</code></div>
-.
-<p class="Pp" id="atomic_fcmpset~2">Some architectures do not implement the
- <a class="permalink" href="#atomic_fcmpset~2"><code class="Fn">atomic_fcmpset</code></a>()
- functions for the types &#x201C;<code class="Li">char</code>&#x201D;,
- &#x201C;<code class="Li">short</code>&#x201D;,
- &#x201C;<code class="Li">8</code>&#x201D;, and
- &#x201C;<code class="Li">16</code>&#x201D;.</p>
-<dl class="Bl-hang">
- <dt><code class="Fn">atomic_fetchadd</code>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>tmp = *p;
-*p += v;
-return (tmp);</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="atomic_fetchadd">The
- <a class="permalink" href="#atomic_fetchadd"><code class="Fn">atomic_fetchadd</code></a>()
- functions are only implemented for the types
- &#x201C;<code class="Li">int</code>&#x201D;,
- &#x201C;<code class="Li">long</code>&#x201D; and
- &#x201C;<code class="Li">32</code>&#x201D; and do not have any variants with
- memory barriers at this time.</p>
-<dl class="Bl-hang">
- <dt id="atomic_load"><a class="permalink" href="#atomic_load"><code class="Fn">atomic_load</code></a>(<var class="Fa">p</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>return (*p);</pre>
- </div>
- </dd>
- <dt><code class="Fn">atomic_readandclear</code>(<var class="Fa">p</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>tmp = *p;
-*p = 0;
-return (tmp);</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="atomic_readandclear">The
- <a class="permalink" href="#atomic_readandclear"><code class="Fn">atomic_readandclear</code></a>()
- functions are not implemented for the types
- &#x201C;<code class="Li">char</code>&#x201D;,
- &#x201C;<code class="Li">short</code>&#x201D;,
- &#x201C;<code class="Li">ptr</code>&#x201D;,
- &#x201C;<code class="Li">8</code>&#x201D;, and
- &#x201C;<code class="Li">16</code>&#x201D; and do not have any variants with
- memory barriers at this time.</p>
-<dl class="Bl-hang">
- <dt id="atomic_set"><a class="permalink" href="#atomic_set"><code class="Fn">atomic_set</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>*p |= v;</pre>
- </div>
- </dd>
- <dt id="atomic_subtract"><a class="permalink" href="#atomic_subtract"><code class="Fn">atomic_subtract</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>*p -= v;</pre>
- </div>
- </dd>
- <dt id="atomic_store"><a class="permalink" href="#atomic_store"><code class="Fn">atomic_store</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>*p = v;</pre>
- </div>
- </dd>
- <dt><code class="Fn">atomic_swap</code>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>tmp = *p;
-*p = v;
-return (tmp);</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="atomic_swap">The
- <a class="permalink" href="#atomic_swap"><code class="Fn">atomic_swap</code></a>()
- functions are not implemented for the types
- &#x201C;<code class="Li">char</code>&#x201D;,
- &#x201C;<code class="Li">short</code>&#x201D;,
- &#x201C;<code class="Li">ptr</code>&#x201D;,
- &#x201C;<code class="Li">8</code>&#x201D;, and
- &#x201C;<code class="Li">16</code>&#x201D; and do not have any variants with
- memory barriers at this time.</p>
-<dl class="Bl-hang">
- <dt id="atomic_testandclear"><a class="permalink" href="#atomic_testandclear"><code class="Fn">atomic_testandclear</code></a>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>bit = 1 &lt;&lt; (v % (sizeof(*p) * NBBY));
-tmp = (*p &amp; bit) != 0;
-*p &amp;= ~bit;
-return (tmp);</pre>
- </div>
- </dd>
-</dl>
-<dl class="Bl-hang">
- <dt><code class="Fn">atomic_testandset</code>(<var class="Fa">p</var>,
- <var class="Fa">v</var>)</dt>
- <dd>
- <div class="Bd Li">
- <pre>bit = 1 &lt;&lt; (v % (sizeof(*p) * NBBY));
-tmp = (*p &amp; bit) != 0;
-*p |= bit;
-return (tmp);</pre>
- </div>
- </dd>
-</dl>
-<p class="Pp" id="atomic_testandset">The
- <a class="permalink" href="#atomic_testandset"><code class="Fn">atomic_testandset</code></a>()
- and
- <a class="permalink" href="#atomic_testandclear~2"><code class="Fn" id="atomic_testandclear~2">atomic_testandclear</code></a>()
- functions are only implemented for the types
- &#x201C;<code class="Li">int</code>&#x201D;,
- &#x201C;<code class="Li">long</code>&#x201D;, &#x201C;ptr&#x201D;,
- &#x201C;<code class="Li">32</code>&#x201D;, and
- &#x201C;<code class="Li">64</code>&#x201D; and generally do not have any
- variants with memory barriers at this time except for
- <a class="permalink" href="#atomic_testandset_acq_long"><code class="Fn" id="atomic_testandset_acq_long">atomic_testandset_acq_long</code></a>().</p>
-<p class="Pp">The type &#x201C;<code class="Li">64</code>&#x201D; is currently
- not implemented for some of the atomic operations on the arm, i386, and
- powerpc architectures.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">atomic_cmpset</code>() function returns the
- result of the compare operation. The
- <code class="Fn">atomic_fcmpset</code>() function returns
- <code class="Dv">true</code> if the operation succeeded. Otherwise it
- returns <code class="Dv">false</code> and sets <var class="Va">*old</var> to
- the found value. The <code class="Fn">atomic_fetchadd</code>(),
- <code class="Fn">atomic_load</code>(),
- <code class="Fn">atomic_readandclear</code>(), and
- <code class="Fn">atomic_swap</code>() functions return the value at the
- specified address. The <code class="Fn">atomic_testandset</code>() and
- <code class="Fn">atomic_testandclear</code>() function returns the result of
- the test operation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example uses the
- <code class="Fn">atomic_cmpset_acq_ptr</code>() and
- <code class="Fn">atomic_set_ptr</code>() functions to obtain a sleep mutex
- and handle recursion. Since the <var class="Va">mtx_lock</var> member of a
- <var class="Vt">struct mtx</var> is a pointer, the
- &#x201C;<code class="Li">ptr</code>&#x201D; type is used.</p>
-<div class="Bd Pp Li">
-<pre>/* Try to obtain mtx_lock once. */
-#define _obtain_lock(mp, tid) \
- atomic_cmpset_acq_ptr(&amp;(mp)-&gt;mtx_lock, MTX_UNOWNED, (tid))
-
-/* Get a sleep lock, deal with recursion inline. */
-#define _get_sleep_lock(mp, tid, opts, file, line) do { \
- uintptr_t _tid = (uintptr_t)(tid); \
- \
- if (!_obtain_lock(mp, tid)) { \
- if (((mp)-&gt;mtx_lock &amp; MTX_FLAGMASK) != _tid) \
- _mtx_lock_sleep((mp), _tid, (opts), (file), (line));\
- else { \
- atomic_set_ptr(&amp;(mp)-&gt;mtx_lock, MTX_RECURSE); \
- (mp)-&gt;mtx_recurse++; \
- } \
- } \
-} while (0)</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">atomic_add</code>(),
- <code class="Fn">atomic_clear</code>(),
- <code class="Fn">atomic_set</code>(), and
- <code class="Fn">atomic_subtract</code>() operations were introduced in
- <span class="Ux">FreeBSD 3.0</span>. Initially, these operations were
- defined on the types &#x201C;<code class="Li">char</code>&#x201D;,
- &#x201C;<code class="Li">short</code>&#x201D;,
- &#x201C;<code class="Li">int</code>&#x201D;, and
- &#x201C;<code class="Li">long</code>&#x201D;.</p>
-<p class="Pp">The <code class="Fn">atomic_cmpset</code>(),
- <code class="Fn">atomic_load_acq</code>(),
- <code class="Fn">atomic_readandclear</code>(), and
- <code class="Fn">atomic_store_rel</code>() operations were added in
- <span class="Ux">FreeBSD 5.0</span>. Simultaneously, the acquire and release
- variants were introduced, and support was added for operation on the types
- &#x201C;<code class="Li">8</code>&#x201D;,
- &#x201C;<code class="Li">16</code>&#x201D;,
- &#x201C;<code class="Li">32</code>&#x201D;,
- &#x201C;<code class="Li">64</code>&#x201D;, and
- &#x201C;<code class="Li">ptr</code>&#x201D;.</p>
-<p class="Pp">The <code class="Fn">atomic_fetchadd</code>() operation was added
- in <span class="Ux">FreeBSD 6.0</span>.</p>
-<p class="Pp">The <code class="Fn">atomic_swap</code>() and
- <code class="Fn">atomic_testandset</code>() operations were added in
- <span class="Ux">FreeBSD 10.0</span>.</p>
-<p class="Pp">The <code class="Fn">atomic_testandclear</code>() and
- <code class="Fn">atomic_thread_fence</code>() operations were added in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-<p class="Pp">The relaxed variants of <code class="Fn">atomic_load</code>() and
- <code class="Fn">atomic_store</code>() were added in
- <span class="Ux">FreeBSD 12.0</span>.</p>
-<p class="Pp">The <code class="Fn">atomic_interrupt_fence</code>() operation was
- added in <span class="Ux">FreeBSD 13.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 16, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/backlight.9 3.html b/static/freebsd/man9/backlight.9 3.html
deleted file mode 100644
index 59865e09..00000000
--- a/static/freebsd/man9/backlight.9 3.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BACKLIGHT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BACKLIGHT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">backlight</code>,
- <code class="Nm">backlight_register</code>,
- <code class="Nm">backlight_destroy</code>,
- <code class="Nm">BACKLIGHT_GET_STATUS</code>,
- <code class="Nm">BACKLIGHT_SET_STATUS</code> &#x2014;
- <span class="Nd">BACKLIGHT methods</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">device backlight</code>
- <br/>
- <code class="In">#include &lt;<a class="In">backlight_if.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/sys/backlight.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BACKLIGHT_GET_STATUS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">struct
- backlight_props *props</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">BACKLIGHT_SET_STATUS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">struct
- backlight_props *props</var>);</p>
-<p class="Pp"><var class="Ft">struct cdev *</var>
- <br/>
- <code class="Fn">backlight_register</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">backlight_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *cdev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The backlight driver provides a generic way for handling a panel
- backlight.</p>
-<p class="Pp" id="backlight_register">Drivers for backlight system register
- themselves globally using the
- <a class="permalink" href="#backlight_register"><code class="Fn">backlight_register</code></a>()
- function. They must define two methods,
- <a class="permalink" href="#BACKLIGHT_GET_STATUS"><code class="Fn" id="BACKLIGHT_GET_STATUS">BACKLIGHT_GET_STATUS</code></a>()
- which is used to query the current brightness level and
- <a class="permalink" href="#BACKLIGHT_SET_STATUS"><code class="Fn" id="BACKLIGHT_SET_STATUS">BACKLIGHT_SET_STATUS</code></a>()
- which is used to update it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1>
-<dl class="Bl-tag">
- <dt><code class="Fn">BACKLIGHT_GET_STATUS</code>(<var class="Fa">device_t
- bus</var>, <var class="Fa">struct backlight_props *props</var>)</dt>
- <dd>Driver fills the current brightless level and the optional supported
- levels.</dd>
- <dt><code class="Fn">BACKLIGHT_SET_STATUS</code>(<var class="Fa">device_t
- bus</var>, <var class="Fa">struct backlight_props *props</var>)</dt>
- <dd>Driver update the backlight level based on the brightness member of the
- props struct.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag">
- <dt><span class="Pa">/dev/backlight/*</span></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">backlight(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">backlight</code> interface first appear in
- <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">backlight</code>
- driver and manual page was written by <span class="An">Emmanuel Vadot</span>
- &lt;<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 2, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bhnd.9 3.html b/static/freebsd/man9/bhnd.9 3.html
deleted file mode 100644
index cb26480d..00000000
--- a/static/freebsd/man9/bhnd.9 3.html
+++ /dev/null
@@ -1,2322 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BHND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BHND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bhnd</code> &#x2014; <span class="Nd">BHND driver
- programming interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/bhnd/bhnd.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss">Bus Resource Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_activate_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">struct bhnd_resource *r</var>);</p>
-<p class="Pp"><var class="Ft">struct bhnd_resource *</var>
- <br/>
- <code class="Fn">bhnd_alloc_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int *rid</var>,
- <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t
- end</var>, <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">struct bhnd_resource *</var>
- <br/>
- <code class="Fn">bhnd_alloc_resource_any</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int *rid</var>,
- <var class="Fa">u_int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_alloc_resources</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">struct resource_spec *rs</var>,
- <var class="Fa">struct bhnd_resource **res</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_deactivate_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">struct bhnd_resource *r</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_release_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">struct bhnd_resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_release_resources</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const struct resource_spec *rs</var>,
- <var class="Fa">struct bhnd_resource **res</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Bus Space Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_barrier</code>(<var class="Fa">struct bhnd_resource
- *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">bus_size_t length</var>, <var class="Fa">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bhnd_bus_read_1</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bhnd_bus_read_2</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bhnd_bus_read_4</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_stream_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_stream_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_multi_stream_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_stream_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_stream_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_region_stream_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_stream_1</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_read_stream_2</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bhnd_bus_read_stream_4</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_multi_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_multi_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_multi_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_region_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_region_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_set_region_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t value</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_1</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_2</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">uint16_t value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_4</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_stream_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_stream_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_multi_stream_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_stream_1</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_stream_2</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_region_stream_4</code>(<var class="Fa">struct
- bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>,
- <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_stream_1</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_stream_2</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">uint16_t value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_bus_write_stream_4</code>(<var class="Fa" style="white-space: nowrap;">struct
- bhnd_resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t value</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Configuration Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_read_ioctl</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *ioctl</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_write_ioctl</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- value</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- mask</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_read_iost</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *iost</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bhnd_read_config</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">void *value</var>,
- <var class="Fa">u_int width</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_write_config</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">const void
- *value</var>, <var class="Fa">u_int width</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_reset_hw</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- ioctl</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- reset_ioctl</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_suspend_hw</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- ioctl</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_is_hw_suspended</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Information Functions</h2>
-<p class="Pp"><var class="Ft">bhnd_attach_type</var>
- <br/>
- <code class="Fn">bhnd_get_attach_type</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">const struct bhnd_chipid *</var>
- <br/>
- <code class="Fn">bhnd_get_chipid</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">bhnd_devclass_t</var>
- <br/>
- <code class="Fn">bhnd_get_class</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">bhnd_get_core_index</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">struct bhnd_core_info</var>
- <br/>
- <code class="Fn">bhnd_get_core_info</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_core_unit</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bhnd_get_device</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_get_device_name</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bhnd_get_hwrev</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bhnd_get_vendor</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_get_vendor_name</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_read_board_info</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">struct bhnd_board_info *info</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Matching Functions</h2>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_board_matches</code>(<var class="Fa">const struct
- bhnd_board_info *board</var>, <var class="Fa">const struct bhnd_board_match
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">bhnd_bus_match_child</code>(<var class="Fa">device_t
- bus</var>, <var class="Fa">const struct bhnd_core_match *desc</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_chip_matches</code>(<var class="Fa">const struct
- bhnd_chipid *chip</var>, <var class="Fa">const struct bhnd_chip_match
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">struct bhnd_core_match</var>
- <br/>
- <code class="Fn">bhnd_core_get_match_desc</code>(<var class="Fa">const struct
- bhnd_core_info *core</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_core_matches</code>(<var class="Fa">const struct
- bhnd_core_info *core</var>, <var class="Fa">const struct bhnd_core_match
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_cores_equal</code>(<var class="Fa">const struct
- bhnd_core_info *lhs</var>, <var class="Fa">const struct bhnd_core_info
- *rhs</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_hwrev_matches</code>(<var class="Fa">uint16_t
- hwrev</var>, <var class="Fa">const struct bhnd_hwrev_match *desc</var>);</p>
-<p class="Pp"><var class="Ft">const struct bhnd_core_info *</var>
- <br/>
- <code class="Fn">bhnd_match_core</code>(<var class="Fa">const struct
- bhnd_core_info *cores</var>, <var class="Fa">u_int num_cores</var>,
- <var class="Fa">const struct bhnd_core_match *desc</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Table Functions</h2>
-<p class="Pp"><var class="Ft">const struct bhnd_device *</var>
- <br/>
- <code class="Fn">bhnd_device_lookup</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">const struct bhnd_device *table</var>,
- <var class="Fa">size_t entry_size</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_device_matches</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const struct bhnd_device_match *desc</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bhnd_device_quirks</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">const struct bhnd_device *table</var>,
- <var class="Fa">size_t entry_size</var>);</p>
-<p class="Pp"><code class="Fn">BHND_BOARD_QUIRK</code>(<var class="Fa">board</var>,
- <var class="Fa">flags</var>);</p>
-<p class="Pp"><code class="Fn">BHND_CHIP_QUIRK</code>(<var class="Fa">chip</var>,
- <var class="Fa">hwrev</var>, <var class="Fa">flags</var>);</p>
-<p class="Pp"><code class="Fn">BHND_CORE_QUIRK</code>(<var class="Fa">hwrev</var>,
- <var class="Fa">flags</var>);</p>
-<p class="Pp"><code class="Fn">BHND_DEVICE</code>(<var class="Fa">vendor</var>,
- <var class="Fa">device</var>, <var class="Fa">desc</var>,
- <var class="Fa">quirks</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><code class="Fn">BHND_DEVICE_IS_END</code>(<var class="Fa">struct
- bhnd_device *d</var>);</p>
-<p class="Pp"><code class="Fn">BHND_DEVICE_QUIRK_IS_END</code>(<var class="Fa">struct
- bhnd_device_quirk *q</var>);</p>
-<p class="Pp"><code class="Fn">BHND_PKG_QUIRK</code>(<var class="Fa">chip</var>,
- <var class="Fa">pkg</var>, <var class="Fa">flags</var>);</p>
-<div class="Bd Pp Li">
-<pre>struct bhnd_device_quirk {
- struct bhnd_device_match desc;
- uint32_t quirks;
-};</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>struct bhnd_device {
- const struct bhnd_device_match core;
- const char *desc;
- const struct bhnd_device_quirk *quirks_table;
- uint32_t device_flags;
-};</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>enum {
- BHND_DF_ANY = 0,
- BHND_DF_HOSTB = (1 &lt;&lt; 0),
- BHND_DF_SOC = (1 &lt;&lt; 1),
- BHND_DF_ADAPTER = (1 &lt;&lt; 2)
-};</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>#define BHND_DEVICE_END { { BHND_MATCH_ANY }, NULL, NULL, 0 }</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>#define BHND_DEVICE_QUIRK_END { { BHND_MATCH_ANY }, 0 }</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">DMA Address Translation Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_dma_translation</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">u_int width</var>, <var class="Fa">uint32_t
- flags</var>, <var class="Fa">bus_dma_tag_t *dmat</var>,
- <var class="Fa">struct bhnd_dma_translation *translation</var>);</p>
-<div class="Bd Pp Li">
-<pre>struct bhnd_dma_translation {
- bhnd_addr_t base_addr;
- bhnd_addr_t addr_mask;
- bhnd_addr_t addrext_mask;
- uint32_t flags;
-};</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>typedef enum {
- BHND_DMA_ADDR_30BIT = 30,
- BHND_DMA_ADDR_32BIT = 32,
- BHND_DMA_ADDR_64BIT = 64
-} bhnd_dma_addrwidth;</pre>
-</div>
-<div class="Bd Pp Li">
-<pre>enum bhnd_dma_translation_flags {
- BHND_DMA_TRANSLATION_PHYSMAP = (1&lt;&lt;0),
- BHND_DMA_TRANSLATION_BYTESWAPPED = (1&lt;&lt;1)
-};</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interrupt Functions</h2>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">bhnd_get_intr_count</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_intr_ivec</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">u_int intr</var>, <var class="Fa">u_int *ivec</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_map_intr</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">u_int intr</var>, <var class="Fa">rman_res_t
- *irq</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_unmap_intr</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">rman_res_t irq</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">NVRAM Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">const char *name</var>, <var class="Fa">void *buf</var>,
- <var class="Fa">size_t *len</var>, <var class="Fa">bhnd_nvram_type
- type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_array</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *buf</var>, <var class="Fa">size_t size</var>,
- <var class="Fa">bhnd_nvram_type type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_int</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *value</var>, <var class="Fa">int width</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_int8</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int8_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_int16</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int16_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_int32</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_uint</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *value</var>, <var class="Fa">int width</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_uint8</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint8_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_uint16</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint16_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_uint32</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint32_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_nvram_getvar_str</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">char
- *buf</var>, <var class="Fa">size_t len</var>, <var class="Fa">size_t
- *rlen</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_nvram_string_array_next</code>(<var class="Fa">const
- char *inp</var>, <var class="Fa">size_t ilen</var>, <var class="Fa">const
- char *prev</var>, <var class="Fa">size_t *olen</var>);</p>
-<div class="Bd Pp Li">
-<pre>typedef enum {
- BHND_NVRAM_TYPE_UINT8 = 0,
- BHND_NVRAM_TYPE_UINT16 = 1,
- BHND_NVRAM_TYPE_UINT32 = 2,
- BHND_NVRAM_TYPE_UINT64 = 3,
- BHND_NVRAM_TYPE_INT8 = 4,
- BHND_NVRAM_TYPE_INT16 = 5,
- BHND_NVRAM_TYPE_INT32 = 6,
- BHND_NVRAM_TYPE_INT64 = 7,
- BHND_NVRAM_TYPE_CHAR = 8,
- BHND_NVRAM_TYPE_STRING = 9,
- BHND_NVRAM_TYPE_BOOL = 10,
- BHND_NVRAM_TYPE_NULL = 11,
- BHND_NVRAM_TYPE_DATA = 12
- BHND_NVRAM_TYPE_UINT8_ARRAY = 16,
- BHND_NVRAM_TYPE_UINT16_ARRAY = 17,
- BHND_NVRAM_TYPE_UINT32_ARRAY = 18,
- BHND_NVRAM_TYPE_UINT64_ARRAY = 19,
- BHND_NVRAM_TYPE_INT8_ARRAY = 20,
- BHND_NVRAM_TYPE_INT16_ARRAY = 21,
- BHND_NVRAM_TYPE_INT32_ARRAY = 22,
- BHND_NVRAM_TYPE_INT64_ARRAY = 23,
- BHND_NVRAM_TYPE_CHAR_ARRAY = 24,
- BHND_NVRAM_TYPE_STRING_ARRAY = 25,
- BHND_NVRAM_TYPE_BOOL_ARRAY = 26
-} bhnd_nvram_type;</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Port/Region Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_decode_port_rid</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">bhnd_port_type *port_type</var>, <var class="Fa">u_int
- *port</var>, <var class="Fa">u_int *region</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">bhnd_get_port_count</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_port_type type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_port_rid</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int port</var>,
- <var class="Fa">u_int region</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_region_addr</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_port_type port_type</var>,
- <var class="Fa">u_int port</var>, <var class="Fa">u_int region</var>,
- <var class="Fa">bhnd_addr_t *region_addr</var>, <var class="Fa">bhnd_size_t
- *region_size</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">bhnd_get_region_count</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int
- port</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">bhnd_is_region_valid</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int
- port</var>, <var class="Fa">u_int region</var>);</p>
-<div class="Bd Pp Li">
-<pre>typedef enum {
- BHND_PORT_DEVICE = 0,
- BHND_PORT_BRIDGE = 1,
- BHND_PORT_AGENT = 2
-} bhnd_port_type;</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Power Management Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_alloc_pmu</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_release_pmu</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_enable_clocks</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">uint32_t clocks</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_request_clock</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">bhnd_clock clock</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_clock_freq</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_clock clock</var>, <var class="Fa">u_int
- *freq</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_get_clock_latency</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_clock clock</var>, <var class="Fa">u_int
- *latency</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_request_ext_rsrc</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">u_int rsrc</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_release_ext_rsrc</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">u_int rsrc</var>);</p>
-<div class="Bd Pp Li">
-<pre>typedef enum {
- BHND_CLOCK_DYN = (1 &lt;&lt; 0),
- BHND_CLOCK_ILP = (1 &lt;&lt; 1),
- BHND_CLOCK_ALP = (1 &lt;&lt; 2),
- BHND_CLOCK_HT = (1 &lt;&lt; 3)
-} bhnd_clock;</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Service Provider Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_register_provider</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_service_t service</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_deregister_provider</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_service_t service</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">bhnd_retain_provider</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">bhnd_service_t service</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_release_provider</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">device_t provider</var>,
- <var class="Fa">bhnd_service_t service</var>);</p>
-<div class="Bd Pp Li">
-<pre>typedef enum {
- BHND_SERVICE_CHIPC,
- BHND_SERVICE_PWRCTL,
- BHND_SERVICE_PMU,
- BHND_SERVICE_NVRAM,
- BHND_SERVICE_GPIO,
- BHND_SERVICE_ANY = 1000
-} bhnd_service_t;</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Utility Functions</h2>
-<p class="Pp"><var class="Ft">bhnd_erom_class_t *</var>
- <br/>
- <code class="Fn">bhnd_driver_get_erom_class</code>(<var class="Fa">driver_t
- *driver</var>);</p>
-<p class="Pp"><var class="Ft">bhnd_devclass_t</var>
- <br/>
- <code class="Fn">bhnd_find_core_class</code>(<var class="Fa">uint16_t
- vendor</var>, <var class="Fa">uint16_t device</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_find_core_name</code>(<var class="Fa">uint16_t
- vendor</var>, <var class="Fa">uint16_t device</var>);</p>
-<p class="Pp"><var class="Ft">bhnd_devclass_t</var>
- <br/>
- <code class="Fn">bhnd_core_class</code>(<var class="Fa">const struct
- bhnd_core_info *ci</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_core_name</code>(<var class="Fa">const struct
- bhnd_core_info *ci</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_format_chip_id</code>(<var class="Fa">char
- *buffer</var>, <var class="Fa">size_t size</var>, <var class="Fa">uint16_t
- chip_id</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_set_custom_core_desc</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const char *dev_name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_set_default_core_desc</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">bhnd_vendor_name</code>(<var class="Fa">uint16_t
- vendor</var>);</p>
-<div class="Bd Pp Li">
-<pre>#define BHND_CHIPID_MAX_NAMELEN 32</pre>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">bhnd</code> provides a unified bus and driver
- programming interface for the on-chip interconnects and IP cores found in
- Broadcom Home Networking Division (BHND) devices.</p>
-<p class="Pp">The BHND device family consists of MIPS/ARM SoCs (System On a
- Chip) and host-connected chipsets based on a common library of Broadcom IP
- cores, connected via one of two on-chip backplane (hardware bus)
- architectures.</p>
-<p class="Pp">Hardware designed prior to 2009 used Broadcom's
- &#x201C;SSB&#x201D; backplane architecture, based on Sonics Silicon's
- interconnect IP. Each core on the Sonics backplane vends a 4 KiB register
- block, containing both device-specific CSRs, and SSB-specific per-core
- device management (enable/reset/etc) registers.</p>
-<p class="Pp">Subsequent hardware is based on Broadcom's &#x201C;BCMA&#x201D;
- backplane, based on ARM's AMBA IP. The IP cores used in earlier SSB-based
- devices were adapted for compatibility with the new backplane, with
- additional &#x201C;wrapper&#x201D; cores providing per-core device
- management functions in place of the SSB per-core management registers.</p>
-<p class="Pp">When BHND hardware is used as a host-connected peripheral (e.g.,
- in a PCI Wi-Fi card), the on-chip peripheral controller core is configured
- to operate as an endpoint device, bridging access to the SoC hardware:</p>
-<ul class="Bl-dash Bd-indent">
- <li>Host access to SoC address space is provided via a set of register windows
- (e.g., a set of configurable windows into SoC address space mapped via PCI
- BARs)</li>
- <li>DMA is supported by the bridge core's sparse mapping of host address space
- into the backplane address space. These address regions may be used as a
- target for the on-chip DMA engine.</li>
- <li>Any backplane interrupt vectors routed to the bridge core may be mapped by
- the bridge to host interrupts (e.g., PCI INTx/MSI/MSI-X).</li>
-</ul>
-<p class="Pp">The <code class="Nm">bhnd</code> driver programming interface
- &#x2014; and <a class="Xr">bhndb(4)</a> host bridge drivers &#x2014; support
- the implementation of common drivers for Broadcom IP cores, whether attached
- via a BHND host bridge, or via the native SoC backplane.</p>
-<section class="Ss">
-<h2 class="Ss">Bus Resource Functions</h2>
-<p class="Pp">The bhnd_resource functions are wrappers for the standard
- <var class="Vt">struct resource</var> bus APIs, providing support for
- <var class="Vt">SYS_RES_MEMORY</var> resources that, on
- <a class="Xr">bhndb(4)</a> bridged chipsets, may require on-demand remapping
- of address windows prior to accessing bus memory.</p>
-<p class="Pp">These functions are primarily used in the implementation of BHND
- platform device drivers that, on host-connected peripherals, must share a
- small set of register windows during initial setup and teardown.</p>
-<p class="Pp">BHND peripherals are designed to not require register window
- remapping during normal operation, and most drivers may safely use the
- standard <var class="Vt">struct resource</var> APIs directly.</p>
-<p class="Pp" id="bhnd_activate_resource">The
- <a class="permalink" href="#bhnd_activate_resource"><code class="Fn">bhnd_activate_resource</code></a>()
- function activates a previously allocated resource.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device holding ownership of the allocated resource.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of the resource.</dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>The bus-specific handle that identifies the resource being activated.</dd>
- <dt id="bhnd_alloc_resource"><var class="Fa">r</var></dt>
- <dd>A pointer to the resource returned by
- <a class="permalink" href="#bhnd_alloc_resource"><code class="Fn">bhnd_alloc_resource</code></a>().</dd>
-</dl>
-<p class="Pp" id="bhnd_alloc_resource~2">The
- <a class="permalink" href="#bhnd_alloc_resource~2"><code class="Fn">bhnd_alloc_resource</code></a>()
- function allocates a resource from a device's parent
- <a class="Xr">bhnd(4)</a> bus.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device requesting resource ownership.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of resource to allocate. This may be any type supported by the
- standard <a class="Xr">bus_alloc_resource(9)</a> function.</dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>The bus-specific handle identifying the resource being allocated.</dd>
- <dt><var class="Fa">start</var></dt>
- <dd>The start address of the resource.</dd>
- <dt><var class="Fa">end</var></dt>
- <dd>The end address of the resource.</dd>
- <dt><var class="Fa">count</var></dt>
- <dd>The size of the resource.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The flags for the resource to be allocated. These may be any values
- supported by the standard <a class="Xr">bus_alloc_resource(9)</a>
- function.</dd>
-</dl>
-<p class="Pp">To request that the bus supply the resource's default
- <var class="Fa">start</var>, <var class="Fa">end</var>, and
- <var class="Fa">count</var> values, pass <var class="Fa">start</var> and
- <var class="Fa">end</var> values of 0ul and ~0ul respectively, and a
- <var class="Fa">count</var> of 1.</p>
-<p class="Pp" id="bhnd_alloc_resource_any">The
- <a class="permalink" href="#bhnd_alloc_resource_any"><code class="Fn">bhnd_alloc_resource_any</code></a>()
- function is a convenience wrapper for
- <code class="Fn">bhnd_alloc_resource</code>(), using the resource's default
- <var class="Fa">start</var>, <var class="Fa">end</var>, and
- <var class="Fa">count</var> values.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device requesting resource ownership.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of resource to allocate. This may be any type supported by the
- standard <a class="Xr">bus_alloc_resource(9)</a> function.</dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>The bus-specific handle identifying the resource being allocated.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The flags for the resource to be allocated. These may be any values
- supported by the standard <a class="Xr">bus_alloc_resource(9)</a>
- function.</dd>
-</dl>
-<p class="Pp" id="bhnd_alloc_resources">The
- <a class="permalink" href="#bhnd_alloc_resources"><code class="Fn">bhnd_alloc_resources</code></a>()
- function allocates resources defined in resource specification from a
- device's parent <a class="Xr">bhnd(4)</a> bus.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device requesting ownership of the resources.</dd>
- <dt><var class="Fa">rs</var></dt>
- <dd>A standard bus resource specification. If all requested resources, are
- successfully allocated, this will be updated with the allocated resource
- identifiers.</dd>
- <dt><var class="Fa">res</var></dt>
- <dd>If all requested resources are successfully allocated, this will be
- populated with the allocated <var class="Vt">struct bhnd_resource</var>
- instances.</dd>
-</dl>
-<p class="Pp" id="bhnd_deactivate_resource">The
- <a class="permalink" href="#bhnd_deactivate_resource"><code class="Fn">bhnd_deactivate_resource</code></a>()
- function deactivates a resource previously activated by.
- <code class="Fn">bhnd_activate_resource</code>(). The arguments are as
- follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device holding ownership of the activated resource.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of the resource.</dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>The bus-specific handle identifying the resource.</dd>
- <dt><var class="Fa">r</var></dt>
- <dd>A pointer to the resource returned by bhnd_alloc_resource.</dd>
-</dl>
-<p class="Pp" id="bhnd_release_resource">The
- <a class="permalink" href="#bhnd_release_resource"><code class="Fn">bhnd_release_resource</code></a>()
- function frees a resource previously returned by
- <code class="Fn">bhnd_alloc_resource</code>(). The arguments are as
- follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device holding ownership of the resource.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of the resource.</dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>The bus-specific handle identifying the resource.</dd>
- <dt><var class="Fa">r</var></dt>
- <dd>A pointer to the resource returned by bhnd_alloc_resource.</dd>
-</dl>
-<p class="Pp" id="bhnd_release_resources">The
- <a class="permalink" href="#bhnd_release_resources"><code class="Fn">bhnd_release_resources</code></a>()
- function frees resources previously returned by
- <code class="Fn">bhnd_alloc_resources</code>(). The arguments are as
- follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device that owns the resources.</dd>
- <dt><var class="Fa">rs</var></dt>
- <dd>A standard bus resource specification previously initialized by
- <code class="Fn">bhnd_alloc_resources</code>().</dd>
- <dt><var class="Fa">res</var></dt>
- <dd>The resources to be released.</dd>
-</dl>
-<p class="Pp">The <var class="Vt">bhnd_resource</var> structure contains the
- following fields:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">res</var></dt>
- <dd>A pointer to the bus <var class="Vt">struct resource</var>.</dd>
- <dt><var class="Fa">direct</var></dt>
- <dd>If true, the resource requires bus window remapping before it is MMIO
- accessible.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss">Bus Space Functions</h2>
-<p class="Pp">The bhnd_bus_space functions wrap their equivalent
- <a class="Xr">bus_space(9)</a> counterparts, and provide support for
- accessing bus memory via <var class="Vt">struct bhnd_resource</var>.</p>
-<p class="Pp"></p>
-<dl class="Bl-ohang Bd-indent Bl-compact">
- <dt id="bhnd_bus_barrier"><a class="permalink" href="#bhnd_bus_barrier"><code class="Fn">bhnd_bus_barrier</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_write___1_2_4_"><a class="permalink" href="#bhnd_bus__read_write___1_2_4_"><code class="Fn">bhnd_bus_[read|write]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_multi_write_multi___1_2_4_"><a class="permalink" href="#bhnd_bus__read_multi_write_multi___1_2_4_"><code class="Fn">bhnd_bus_[read_multi|write_multi]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_multi_stream_write_multi_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_multi_stream_write_multi_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_multi_stream|write_multi_stream]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_region_write_region___1_2_4_"><a class="permalink" href="#bhnd_bus__read_region_write_region___1_2_4_"><code class="Fn">bhnd_bus_[read_region|write_region]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_region_stream_write_region_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_region_stream_write_region_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_region_stream|write_region_stream]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__read_stream_write_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_stream_write_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_stream|write_stream]_[1|2|4]</code></a>()</dt>
- <dd></dd>
- <dt id="bhnd_bus__set_multi_set_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__set_multi_set_stream___1_2_4_"><code class="Fn">bhnd_bus_[set_multi|set_stream]_[1|2|4]</code></a>()</dt>
- <dd></dd>
-</dl>
-<p class="Pp">Drivers that do not rely on <var class="Vt">struct
- bhnd_resource</var> should use the standard <var class="Vt">struct
- resource</var> and <a class="Xr">bus_space(9)</a> APIs directly.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Configuration Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_read_ioctl"><code class="Fn" id="bhnd_read_ioctl">bhnd_read_ioctl</code></a>()
- function is used to read the I/O control register value of device
- <var class="Fa">dev</var>, returning the current value in
- <var class="Fa">ioctl</var>.</p>
-<p class="Pp" id="bhnd_write_ioctl">The
- <a class="permalink" href="#bhnd_write_ioctl"><code class="Fn">bhnd_write_ioctl</code></a>()
- function is used to modify the I/O control register of
- <var class="Fa">dev</var>. The new value of the register is computed by
- updating any bits set in <var class="Fa">mask</var> to
- <var class="Fa">value</var>. The following I/O control flags are
- supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_IOCTL_BIST"><a class="permalink" href="#BHND_IOCTL_BIST"><code class="Dv">BHND_IOCTL_BIST</code></a></dt>
- <dd>Initiate a built-in self-test (BIST). Must be cleared after BIST results
- are read via the IOST (I/O Status) register.</dd>
- <dt id="BHND_IOCTL_PME"><a class="permalink" href="#BHND_IOCTL_PME"><code class="Dv">BHND_IOCTL_PME</code></a></dt>
- <dd>Enable posting of power management events by the core.</dd>
- <dt id="BHND_IOCTL_CLK_FORCE"><a class="permalink" href="#BHND_IOCTL_CLK_FORCE"><code class="Dv">BHND_IOCTL_CLK_FORCE</code></a></dt>
- <dd>Force disable of clock gating, resulting in all clocks being distributed
- within the core. Should be set when asserting/deasserting reset to ensure
- the reset signal fully propagates to the entire core.</dd>
- <dt id="BHND_IOCTL_CLK_EN"><a class="permalink" href="#BHND_IOCTL_CLK_EN"><code class="Dv">BHND_IOCTL_CLK_EN</code></a></dt>
- <dd>If cleared, the core clock will be disabled. Should be set during normal
- operation, and cleared when the core is held in reset.</dd>
- <dt id="BHND_IOCTL_CFLAGS"><a class="permalink" href="#BHND_IOCTL_CFLAGS"><code class="Dv">BHND_IOCTL_CFLAGS</code></a></dt>
- <dd>The mask of IOCTL bits reserved for additional core-specific I/O control
- flags.</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_read_iost">The
- <a class="permalink" href="#bhnd_read_iost"><code class="Fn">bhnd_read_iost</code></a>()
- function is used to read the I/O status register of device
- <var class="Fa">dev</var>, returning the current value in
- <var class="Fa">iost</var>. The following I/O status flags are
- supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_IOST_BIST_DONE"><a class="permalink" href="#BHND_IOST_BIST_DONE"><code class="Dv">BHND_IOST_BIST_DONE</code></a></dt>
- <dd>Set upon BIST completion. Will be cleared when the
- <code class="Dv">BHND_IOCTL_BIST</code> flag of the I/O control register
- is cleared using <code class="Fn">bhnd_write_ioctl</code>().</dd>
- <dt id="BHND_IOST_BIST_FAIL"><a class="permalink" href="#BHND_IOST_BIST_FAIL"><code class="Dv">BHND_IOST_BIST_FAIL</code></a></dt>
- <dd>Set upon detection of a BIST error; the value is unspecified if BIST has
- not completed and <code class="Dv">BHND_IOST_BIST_DONE</code> is not also
- set.</dd>
- <dt id="BHND_IOST_CLK"><a class="permalink" href="#BHND_IOST_CLK"><code class="Dv">BHND_IOST_CLK</code></a></dt>
- <dd>Set if the core has required that clocked be ungated, or cleared
- otherwise. The value is undefined if a core does not support clock
- gating.</dd>
- <dt id="BHND_IOST_DMA64"><a class="permalink" href="#BHND_IOST_DMA64"><code class="Dv">BHND_IOST_DMA64</code></a></dt>
- <dd>Set if this core supports 64-bit DMA.</dd>
- <dt id="BHND_IOST_CFLAGS"><a class="permalink" href="#BHND_IOST_CFLAGS"><code class="Dv">BHND_IOST_CFLAGS</code></a></dt>
- <dd>The mask of IOST bits reserved for additional core-specific I/O status
- flags.</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_read_config">The
- <a class="permalink" href="#bhnd_read_config"><code class="Fn">bhnd_read_config</code></a>()
- function is used to read a data item of <var class="Fa">width</var> bytes at
- <var class="Fa">offset</var> from the backplane-specific agent/config space
- of the device <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_write_config">The
- <a class="permalink" href="#bhnd_write_config"><code class="Fn">bhnd_write_config</code></a>()
- function is used to write a data item of <var class="Fa">width</var> bytes
- with <var class="Fa">value</var> at <var class="Fa">offset</var> from the
- backplane-specific agent/config space of the device
- <var class="Fa">dev</var>. The requested <var class="Fa">width</var> must be
- one of 1, 2, or 4 bytes.</p>
-<p class="Pp" id="bhnd_read_config~2">The agent/config space accessible via
- <a class="permalink" href="#bhnd_read_config~2"><code class="Fn">bhnd_read_config</code></a>()
- and <code class="Fn">bhnd_write_config</code>() is backplane-specific, and
- these functions should only be used for functionality that is not available
- via another <code class="Nm">bhnd</code> function.</p>
-<p class="Pp" id="bhnd_suspend_hw">The
- <a class="permalink" href="#bhnd_suspend_hw"><code class="Fn">bhnd_suspend_hw</code></a>()
- function transitions the device <var class="Fa">dev</var> to a low power
- &#x201C;RESET&#x201D; state, writing <var class="Fa">ioctl</var> to the I/O
- control flags of <var class="Fa">dev</var>. The hardware may be brought out
- of this state using <code class="Fn">bhnd_reset_hw</code>().</p>
-<p class="Pp" id="bhnd_reset_hw">The
- <a class="permalink" href="#bhnd_reset_hw"><code class="Fn">bhnd_reset_hw</code></a>()
- function first transitions the device <var class="Fa">dev</var> to a low
- power RESET state, writing <var class="Fa">ioctl_reset</var> to the I/O
- control flags of <var class="Fa">dev</var>, and then brings the device out
- of RESET, writing <var class="Fa">ioctl</var> to the device's I/O control
- flags.</p>
-<p class="Pp" id="bhnd_is_hw_suspended">The
- <a class="permalink" href="#bhnd_is_hw_suspended"><code class="Fn">bhnd_is_hw_suspended</code></a>()
- function returns <code class="Dv">true</code> if the device
- <var class="Fa">dev</var> is currently held in a RESET state, or is
- otherwise not clocked. Otherwise, it returns
- <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_enable_clocks">Any outstanding per-device PMU requests
- made using
- <a class="permalink" href="#bhnd_enable_clocks"><code class="Fn">bhnd_enable_clocks</code></a>(),
- <code class="Fn">bhnd_request_clock</code>(), or
- <code class="Fn">bhnd_request_ext_rsrc</code>() will be released
- automatically upon placing a device into a RESET state.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Information Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_get_attach_type"><code class="Fn" id="bhnd_get_attach_type">bhnd_get_attach_type</code></a>()
- function returns the attachment type of the parent <a class="Xr">bhnd(4)</a>
- bus of device <var class="Fa">dev</var>.</p>
-<p class="Pp">The following attachment types are supported:</p>
-<dl class="Bl-hang Bd-indent">
- <dt id="BHND_ATTACH_ADAPTER"><a class="permalink" href="#BHND_ATTACH_ADAPTER"><code class="Dv">BHND_ATTACH_ADAPTER</code></a></dt>
- <dd>The bus is resident on a bridged adapter, such as a PCI Wi-Fi device.</dd>
- <dt id="BHND_ATTACH_NATIVE"><a class="permalink" href="#BHND_ATTACH_NATIVE"><code class="Dv">BHND_ATTACH_NATIVE</code></a></dt>
- <dd>The bus is resident on the native host, such as the primary or secondary
- bus of an embedded SoC.</dd>
-</dl>
-<p class="Pp" id="bhnd_get_chipid">The
- <a class="permalink" href="#bhnd_get_chipid"><code class="Fn">bhnd_get_chipid</code></a>()
- function returns chip information from the parent <a class="Xr">bhnd(4)</a>
- bus of device <var class="Fa">dev</var>. The returned
- <var class="Vt">bhnd_chipid</var> struct contains the following fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">chip_id</var></dt>
- <dd>The chip identifier.</dd>
- <dt><var class="Fa">chip_rev</var></dt>
- <dd>The chip's hardware revision.</dd>
- <dt><var class="Fa">chip_pkg</var></dt>
- <dd>The chip's semiconductor package identifier.
- <p class="Pp">Several different physical semiconductor package variants may
- exist for a given chip, each of which may require driver workarounds for
- hardware errata, unpopulated components, etc.</p>
- </dd>
- <dt><var class="Fa">chip_type</var></dt>
- <dd>The interconnect architecture used by this chip.</dd>
- <dt><var class="Fa">chip_caps</var></dt>
- <dd>The <code class="Nm">bhnd</code> capability flags supported by this
- chip.</dd>
- <dt><var class="Fa">enum_addr</var></dt>
- <dd>The backplane enumeration address. On SSB devices, this will be the base
- address of the first SSB core. On BCMA devices, this will be the address
- of the enumeration ROM (EROM) core.</dd>
- <dt><var class="Fa">ncores</var></dt>
- <dd>The number of cores on the chip backplane, or 0 if unknown.</dd>
-</dl>
-</div>
-<p class="Pp">The following constants are defined for known
- <var class="Fa">chip_type</var> values:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_CHIPTYPE_SIBA"><a class="permalink" href="#BHND_CHIPTYPE_SIBA"><code class="Dv">BHND_CHIPTYPE_SIBA</code></a></dt>
- <dd>SSB interconnect.</dd>
- <dt id="BHND_CHIPTYPE_BCMA"><a class="permalink" href="#BHND_CHIPTYPE_BCMA"><code class="Dv">BHND_CHIPTYPE_BCMA</code></a></dt>
- <dd>BCMA interconnect.</dd>
- <dt id="BHND_CHIPTYPE_BCMA_ALT"><a class="permalink" href="#BHND_CHIPTYPE_BCMA_ALT"><code class="Dv">BHND_CHIPTYPE_BCMA_ALT</code></a></dt>
- <dd>BCMA-compatible variant found in Broadcom Northstar ARM SoCs.</dd>
- <dt id="BHND_CHIPTYPE_UBUS"><a class="permalink" href="#BHND_CHIPTYPE_UBUS"><code class="Dv">BHND_CHIPTYPE_UBUS</code></a></dt>
- <dd>UBUS interconnect. This BCMA-derived interconnect is found in Broadcom
- BCM33xx DOCSIS SoCs, and BCM63xx xDSL SoCs. UBUS is not currently
- supported by <a class="Xr">bhnd(4)</a>.</dd>
-</dl>
-</div>
-<p class="Pp">The following <var class="Fa">chip_caps</var> flags are
- supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_CAP_BP64"><a class="permalink" href="#BHND_CAP_BP64"><code class="Dv">BHND_CAP_BP64</code></a></dt>
- <dd>The backplane supports 64-bit addressing.</dd>
- <dt id="BHND_CAP_PMU"><a class="permalink" href="#BHND_CAP_PMU"><code class="Dv">BHND_CAP_PMU</code></a></dt>
- <dd>PMU is present.</dd>
-</dl>
-</div>
-<p class="Pp">Additional symbolic constants for known
- <var class="Fa">chip_id</var>, <var class="Fa">chip_pkg</var>, and
- <var class="Fa">chip_type</var> values are defined in
- <code class="In">&lt;<a class="In">dev/bhnd/bhnd_ids.h</a>&gt;</code>.</p>
-<p class="Pp" id="bhnd_get_class">The
- <a class="permalink" href="#bhnd_get_class"><code class="Fn">bhnd_get_class</code></a>()
- function returns the BHND class of device <var class="Fa">dev</var>, if the
- device's
- <a class="permalink" href="#vendor"><i class="Em" id="vendor">vendor</i></a>
- and
- <a class="permalink" href="#device"><i class="Em" id="device">device</i></a>
- identifiers are recognized. Otherwise, returns
- <code class="Dv">BHND_DEVCLASS_OTHER</code>.</p>
-<p class="Pp">One of the following device classes will be returned:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_DEVCLASS_CC"><a class="permalink" href="#BHND_DEVCLASS_CC"><code class="Dv">BHND_DEVCLASS_CC</code></a></dt>
- <dd>ChipCommon I/O Controller</dd>
- <dt id="BHND_DEVCLASS_CC_B"><a class="permalink" href="#BHND_DEVCLASS_CC_B"><code class="Dv">BHND_DEVCLASS_CC_B</code></a></dt>
- <dd>ChipCommon Auxiliary Controller</dd>
- <dt id="BHND_DEVCLASS_PMU"><a class="permalink" href="#BHND_DEVCLASS_PMU"><code class="Dv">BHND_DEVCLASS_PMU</code></a></dt>
- <dd>PMU Controller</dd>
- <dt id="BHND_DEVCLASS_PCI"><a class="permalink" href="#BHND_DEVCLASS_PCI"><code class="Dv">BHND_DEVCLASS_PCI</code></a></dt>
- <dd>PCI Host/Device Bridge</dd>
- <dt id="BHND_DEVCLASS_PCIE"><a class="permalink" href="#BHND_DEVCLASS_PCIE"><code class="Dv">BHND_DEVCLASS_PCIE</code></a></dt>
- <dd>PCIe Host/Device Bridge</dd>
- <dt id="BHND_DEVCLASS_PCCARD"><a class="permalink" href="#BHND_DEVCLASS_PCCARD"><code class="Dv">BHND_DEVCLASS_PCCARD</code></a></dt>
- <dd>PCMCIA Host/Device Bridge</dd>
- <dt id="BHND_DEVCLASS_RAM"><a class="permalink" href="#BHND_DEVCLASS_RAM"><code class="Dv">BHND_DEVCLASS_RAM</code></a></dt>
- <dd>Internal RAM/SRAM</dd>
- <dt id="BHND_DEVCLASS_MEMC"><a class="permalink" href="#BHND_DEVCLASS_MEMC"><code class="Dv">BHND_DEVCLASS_MEMC</code></a></dt>
- <dd>Memory Controller</dd>
- <dt id="BHND_DEVCLASS_ENET"><a class="permalink" href="#BHND_DEVCLASS_ENET"><code class="Dv">BHND_DEVCLASS_ENET</code></a></dt>
- <dd>IEEE 802.3 MAC/PHY</dd>
- <dt id="BHND_DEVCLASS_ENET_MAC"><a class="permalink" href="#BHND_DEVCLASS_ENET_MAC"><code class="Dv">BHND_DEVCLASS_ENET_MAC</code></a></dt>
- <dd>IEEE 802.3 MAC</dd>
- <dt id="BHND_DEVCLASS_ENET_PHY"><a class="permalink" href="#BHND_DEVCLASS_ENET_PHY"><code class="Dv">BHND_DEVCLASS_ENET_PHY</code></a></dt>
- <dd>IEEE 802.3 PHY</dd>
- <dt id="BHND_DEVCLASS_WLAN"><a class="permalink" href="#BHND_DEVCLASS_WLAN"><code class="Dv">BHND_DEVCLASS_WLAN</code></a></dt>
- <dd>IEEE 802.11 MAC/PHY/Radio</dd>
- <dt id="BHND_DEVCLASS_WLAN_MAC"><a class="permalink" href="#BHND_DEVCLASS_WLAN_MAC"><code class="Dv">BHND_DEVCLASS_WLAN_MAC</code></a></dt>
- <dd>IEEE 802.11 MAC</dd>
- <dt id="BHND_DEVCLASS_WLAN_PHY"><a class="permalink" href="#BHND_DEVCLASS_WLAN_PHY"><code class="Dv">BHND_DEVCLASS_WLAN_PHY</code></a></dt>
- <dd>IEEE 802.11 PHY</dd>
- <dt id="BHND_DEVCLASS_CPU"><a class="permalink" href="#BHND_DEVCLASS_CPU"><code class="Dv">BHND_DEVCLASS_CPU</code></a></dt>
- <dd>CPU Core</dd>
- <dt id="BHND_DEVCLASS_SOC_ROUTER"><a class="permalink" href="#BHND_DEVCLASS_SOC_ROUTER"><code class="Dv">BHND_DEVCLASS_SOC_ROUTER</code></a></dt>
- <dd>Interconnect Router</dd>
- <dt id="BHND_DEVCLASS_SOC_BRIDGE"><a class="permalink" href="#BHND_DEVCLASS_SOC_BRIDGE"><code class="Dv">BHND_DEVCLASS_SOC_BRIDGE</code></a></dt>
- <dd>Interconnect Host Bridge</dd>
- <dt id="BHND_DEVCLASS_EROM"><a class="permalink" href="#BHND_DEVCLASS_EROM"><code class="Dv">BHND_DEVCLASS_EROM</code></a></dt>
- <dd>Device Enumeration ROM</dd>
- <dt id="BHND_DEVCLASS_NVRAM"><a class="permalink" href="#BHND_DEVCLASS_NVRAM"><code class="Dv">BHND_DEVCLASS_NVRAM</code></a></dt>
- <dd>NVRAM/Flash Controller</dd>
- <dt id="BHND_DEVCLASS_SOFTMODEM"><a class="permalink" href="#BHND_DEVCLASS_SOFTMODEM"><code class="Dv">BHND_DEVCLASS_SOFTMODEM</code></a></dt>
- <dd>Analog/PSTN SoftModem Codec</dd>
- <dt id="BHND_DEVCLASS_USB_HOST"><a class="permalink" href="#BHND_DEVCLASS_USB_HOST"><code class="Dv">BHND_DEVCLASS_USB_HOST</code></a></dt>
- <dd>USB Host Controller</dd>
- <dt id="BHND_DEVCLASS_USB_DEV"><a class="permalink" href="#BHND_DEVCLASS_USB_DEV"><code class="Dv">BHND_DEVCLASS_USB_DEV</code></a></dt>
- <dd>USB Device Controller</dd>
- <dt id="BHND_DEVCLASS_USB_DUAL"><a class="permalink" href="#BHND_DEVCLASS_USB_DUAL"><code class="Dv">BHND_DEVCLASS_USB_DUAL</code></a></dt>
- <dd>USB Host/Device Controller</dd>
- <dt id="BHND_DEVCLASS_OTHER"><a class="permalink" href="#BHND_DEVCLASS_OTHER"><code class="Dv">BHND_DEVCLASS_OTHER</code></a></dt>
- <dd>Other / Unknown</dd>
- <dt id="BHND_DEVCLASS_INVALID"><a class="permalink" href="#BHND_DEVCLASS_INVALID"><code class="Dv">BHND_DEVCLASS_INVALID</code></a></dt>
- <dd>Invalid Class</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_get_core_info">The
- <a class="permalink" href="#bhnd_get_core_info"><code class="Fn">bhnd_get_core_info</code></a>()
- function returns the core information for device <var class="Fa">dev</var>.
- The returned <var class="Vt">bhnd_core_info</var> structure contains the
- following fields:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt><var class="Fa">vendor</var></dt>
- <dd>Vendor identifier (JEP-106, ARM 4-bit continuation encoded)</dd>
- <dt><var class="Fa">device</var></dt>
- <dd>Device identifier</dd>
- <dt><var class="Fa">hwrev</var></dt>
- <dd>Hardware revision</dd>
- <dt><var class="Fa">core_idx</var></dt>
- <dd>Core index</dd>
- <dt><var class="Fa">unit</var></dt>
- <dd>Core unit</dd>
-</dl>
-</div>
-<p class="Pp">Symbolic constants for common vendor and device identifiers are
- defined in
- <code class="In">&lt;<a class="In">dev/bhnd/bhnd_ids.h</a>&gt;</code>.
- Common vendor identifiers include:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_MFGID_ARM"><a class="permalink" href="#BHND_MFGID_ARM"><code class="Dv">BHND_MFGID_ARM</code></a></dt>
- <dd>ARM</dd>
- <dt id="BHND_MFGID_BCM"><a class="permalink" href="#BHND_MFGID_BCM"><code class="Dv">BHND_MFGID_BCM</code></a></dt>
- <dd>Broadcom</dd>
- <dt id="BHND_MFGID_MIPS"><a class="permalink" href="#BHND_MFGID_MIPS"><code class="Dv">BHND_MFGID_MIPS</code></a></dt>
- <dd>MIPS</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_get_core_index">The
- <a class="permalink" href="#bhnd_get_core_index"><code class="Fn">bhnd_get_core_index</code></a>(),
- <a class="permalink" href="#bhnd_get_core_unit"><code class="Fn" id="bhnd_get_core_unit">bhnd_get_core_unit</code></a>(),
- <a class="permalink" href="#bhnd_get_device"><code class="Fn" id="bhnd_get_device">bhnd_get_device</code></a>(),
- <a class="permalink" href="#bhnd_get_hwrev"><code class="Fn" id="bhnd_get_hwrev">bhnd_get_hwrev</code></a>(),
- and
- <a class="permalink" href="#bhnd_get_vendor"><code class="Fn" id="bhnd_get_vendor">bhnd_get_vendor</code></a>()
- functions are convenience wrappers for
- <code class="Fn">bhnd_get_core_info</code>(), returning, respect the
- <var class="Fa">core_idx</var>, <var class="Fa">core_unit</var>,
- <var class="Fa">device</var>, <var class="Fa">hwrev</var>, or
- <var class="Fa">vendor</var> field from the
- <var class="Vt">bhnd_core_info</var> structure.</p>
-<p class="Pp" id="bhnd_get_device_name">The
- <a class="permalink" href="#bhnd_get_device_name"><code class="Fn">bhnd_get_device_name</code></a>()
- function returns a human readable name for device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_get_vendor_name">The
- <a class="permalink" href="#bhnd_get_vendor_name"><code class="Fn">bhnd_get_vendor_name</code></a>()
- function returns a human readable name for the vendor of device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_read_board_info">The
- <a class="permalink" href="#bhnd_read_board_info"><code class="Fn">bhnd_read_board_info</code></a>()
- function attempts to read the board information for device
- <var class="Fa">dev</var>. The board information will be returned in the
- location pointed to by <var class="Fa">info</var> on success.</p>
-<p class="Pp">The <var class="Vt">bhnd_board_info</var> structure contains the
- following fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">board_vendor</var></dt>
- <dd>Vendor ID of the board manufacturer (PCI-SIG assigned).</dd>
- <dt><var class="Fa">board_type</var></dt>
- <dd>Board ID.</dd>
- <dt><var class="Fa">board_devid</var></dt>
- <dd>Device ID.</dd>
- <dt><var class="Fa">board_rev</var></dt>
- <dd>Board revision.</dd>
- <dt><var class="Fa">board_srom_rev</var></dt>
- <dd>Board SROM format revision.</dd>
- <dt><var class="Fa">board_flags</var></dt>
- <dd>Board flags (1)</dd>
- <dt><var class="Fa">board_flags2</var></dt>
- <dd>Board flags (2)</dd>
- <dt><var class="Fa">board_flags3</var></dt>
- <dd>Board flags (3)</dd>
-</dl>
-</div>
-<p class="Pp">The <var class="Fa">board_devid</var> field is the Broadcom PCI
- device ID that most closely matches the capabilities of the BHND device (if
- any).</p>
-<p class="Pp">On PCI devices, the <var class="Fa">board_vendor</var>,
- <var class="Fa">board_type</var>, and <var class="Fa">board_devid</var>
- fields default to the PCI Subsystem Vendor ID, PCI Subsystem ID, and PCI
- device ID, unless overridden in device NVRAM.</p>
-<p class="Pp">On other devices, including SoCs, the
- <var class="Fa">board_vendor</var>, <var class="Fa">board_type</var>, and
- <var class="Fa">board_devid</var> fields will be populated from device
- NVRAM.</p>
-<p class="Pp">Symbolic constants for common board flags are defined in
- <code class="In">&lt;<a class="In">dev/bhnd/bhnd_ids.h</a>&gt;</code>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Matching Functions</h2>
-<p class="Pp">The bhnd device matching functions are used to match against core,
- chip, and board-level device attributes. Match requirements are specified
- using the <var class="Vt">struct bhnd_board_match</var>,
- <var class="Vt">struct bhnd_chip_match</var>, <var class="Vt">struct
- bhnd_core_match</var>, <var class="Vt">struct bhnd_device_match</var>, and
- <var class="Vt">struct bhnd_hwrev_match</var> match descriptor
- structures.</p>
-<p class="Pp" id="bhnd_board_matches">The
- <a class="permalink" href="#bhnd_board_matches"><code class="Fn">bhnd_board_matches</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">board</var>
- matches the board match descriptor <var class="Fa">desc</var>. Otherwise, it
- returns <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_chip_matches">The
- <a class="permalink" href="#bhnd_chip_matches"><code class="Fn">bhnd_chip_matches</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">chip</var>
- matches the chip match descriptor <var class="Fa">desc</var>. Otherwise, it
- returns <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_core_matches">The
- <a class="permalink" href="#bhnd_core_matches"><code class="Fn">bhnd_core_matches</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">core</var>
- matches the core match descriptor <var class="Fa">desc</var>. Otherwise, it
- returns <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_device_matches">The
- <a class="permalink" href="#bhnd_device_matches"><code class="Fn">bhnd_device_matches</code></a>()
- function returns <code class="Dv">true</code> if the device
- <var class="Fa">dev</var> matches the device match descriptor
- <var class="Fa">desc</var>. Otherwise, it returns
- <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_hwrev_matches">The
- <a class="permalink" href="#bhnd_hwrev_matches"><code class="Fn">bhnd_hwrev_matches</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">hwrev</var>
- matches the hwrev match descriptor <var class="Fa">desc</var>. Otherwise, it
- returns <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_bus_match_child">The
- <a class="permalink" href="#bhnd_bus_match_child"><code class="Fn">bhnd_bus_match_child</code></a>()
- function returns the first child device of <var class="Fa">bus</var> that
- matches the device match descriptor <var class="Fa">desc</var>. If no
- matching child is found, <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="bhnd_core_get_match_desc">The
- <a class="permalink" href="#bhnd_core_get_match_desc"><code class="Fn">bhnd_core_get_match_desc</code></a>()
- function returns an equality match descriptor for the core info in
- <var class="Fa">core</var>. The returned descriptor will match only on core
- attributes identical to those defined by <var class="Fa">core</var>.</p>
-<p class="Pp" id="bhnd_cores_equal">The
- <a class="permalink" href="#bhnd_cores_equal"><code class="Fn">bhnd_cores_equal</code></a>()
- function is a convenience wrapper for
- <code class="Fn">bhnd_core_matches</code>() and
- <code class="Fn">bhnd_core_get_match_desc</code>(). This function returns
- <code class="Dv">true</code> if the <var class="Vt">bhnd_core_info</var>
- structures <var class="Fa">lhs</var> and <var class="Fa">rhs</var> are
- equal. Otherwise, it returns <code class="Dv">false</code>.</p>
-<p class="Pp" id="bhnd_match_core">The
- <a class="permalink" href="#bhnd_match_core"><code class="Fn">bhnd_match_core</code></a>()
- function returns a pointer to the first entry in the array
- <var class="Fa">cores</var> of length <var class="Fa">num_cores</var> that
- matches <var class="Fa">desc</var>. If no matching core is found,
- <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp">A <var class="Vt">bhnd_board_match</var> match descriptor may be
- initialized using one or more of the following macros:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_MATCH_BOARD_VENDOR"><a class="permalink" href="#BHND_MATCH_BOARD_VENDOR"><code class="Fn">BHND_MATCH_BOARD_VENDOR</code></a>(<var class="Fa">vendor</var>)</dt>
- <dd>Match on boards with a vendor equal to <var class="Fa">vendor</var>.</dd>
- <dt id="BHND_MATCH_BOARD_TYPE"><a class="permalink" href="#BHND_MATCH_BOARD_TYPE"><code class="Fn">BHND_MATCH_BOARD_TYPE</code></a>(<var class="Fa">type</var>)</dt>
- <dd>Match on boards with a type equal to <code class="Dv">BHND_BOARD_
- ##</code> <var class="Fa">type</var></dd>
- <dt id="BHND_MATCH_SROMREV"><a class="permalink" href="#BHND_MATCH_SROMREV"><code class="Fn">BHND_MATCH_SROMREV</code></a>(<var class="Fa">sromrev</var>)</dt>
- <dd>Match on boards with a sromrev that matches <code class="Dv">BHND_HWREV_
- ##</code> <var class="Fa">sromrev</var>.</dd>
- <dt id="BHND_MATCH_BOARD_REV"><a class="permalink" href="#BHND_MATCH_BOARD_REV"><code class="Fn">BHND_MATCH_BOARD_REV</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Match on boards with hardware revisions that match <code class="Dv">BHND_
- ##</code> <var class="Fa">hwrev</var>.</dd>
- <dt id="BHND_MATCH_BOARD"><a class="permalink" href="#BHND_MATCH_BOARD"><code class="Fn">BHND_MATCH_BOARD</code></a>(<var class="Fa">vendor</var>,
- <var class="Fa">type</var>)</dt>
- <dd>A convenience wrapper for
- <code class="Fn">BHND_MATCH_BOARD_VENDOR</code>() and
- <code class="Fn">BHND_MATCH_BOARD_TYPE</code>().</dd>
-</dl>
-</div>
-<p class="Pp">For example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_board_match board_desc = {
- BHND_MATCH_BOARD_VENDOR(BHND_MFGID_BROADCOM),
- BHND_MATCH_BOARD_TYPE(BCM94360X52C),
- BHND_MATCH_BOARD_REV(HWREV_ANY),
- BHND_MATCH_SROMREV(RANGE(0, 10))
-};</pre>
-</div>
-<p class="Pp">A <var class="Vt">bhnd_chip_match</var> match descriptor may be
- initialized using one or more of the following macros:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_MATCH_CHIP_ID"><a class="permalink" href="#BHND_MATCH_CHIP_ID"><code class="Fn">BHND_MATCH_CHIP_ID</code></a>(<var class="Fa">id</var>)</dt>
- <dd>Match on chips with an ID equal to <code class="Dv">BHND_CHIPID_ ##</code>
- <var class="Fa">id</var></dd>
- <dt id="BHND_MATCH_CHIP_REV"><a class="permalink" href="#BHND_MATCH_CHIP_REV"><code class="Fn">BHND_MATCH_CHIP_REV</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Match on chips with hardware revisions that match <code class="Dv">BHND_
- ##</code> <var class="Fa">hwrev</var>.</dd>
- <dt id="BHND_MATCH_CHIP_PKG"><a class="permalink" href="#BHND_MATCH_CHIP_PKG"><code class="Fn">BHND_MATCH_CHIP_PKG</code></a>(<var class="Fa">pkg</var>)</dt>
- <dd>Match on chips with a package ID equal to <code class="Dv">BHND_PKGID_
- ##</code> <var class="Fa">pkg</var></dd>
- <dt id="BHND_MATCH_CHIP_TYPE"><a class="permalink" href="#BHND_MATCH_CHIP_TYPE"><code class="Fn">BHND_MATCH_CHIP_TYPE</code></a>(<var class="Fa">type</var>)</dt>
- <dd>Match on chips with a chip type equal to <code class="Dv">BHND_CHIPTYPE_
- ##</code> <var class="Fa">type</var></dd>
- <dt id="BHND_MATCH_CHIP_IP"><a class="permalink" href="#BHND_MATCH_CHIP_IP"><code class="Fn">BHND_MATCH_CHIP_IP</code></a>(<var class="Fa">id</var>,
- <var class="Fa">pkg</var>)</dt>
- <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>() and
- <code class="Fn">BHND_MATCH_CHIP_PKG</code>().</dd>
- <dt id="BHND_MATCH_CHIP_IPR"><a class="permalink" href="#BHND_MATCH_CHIP_IPR"><code class="Fn">BHND_MATCH_CHIP_IPR</code></a>(<var class="Fa">id</var>,
- <var class="Fa">pkg</var>, <var class="Fa">hwrev</var>)</dt>
- <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>(),
- <code class="Fn">BHND_MATCH_CHIP_PKG</code>(), and
- <code class="Fn">BHND_MATCH_CHIP_REV</code>().</dd>
- <dt id="BHND_MATCH_CHIP_IR"><a class="permalink" href="#BHND_MATCH_CHIP_IR"><code class="Fn">BHND_MATCH_CHIP_IR</code></a>(<var class="Fa">id</var>,
- <var class="Fa">hwrev</var>)</dt>
- <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>() and
- <code class="Fn">BHND_MATCH_CHIP_REV</code>().</dd>
-</dl>
-</div>
-<p class="Pp">For example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_chip_match chip_desc = {
- BHND_MATCH_CHIP_IP(BCM4329, BCM4329_289PIN),
- BHND_MATCH_CHIP_TYPE(SIBA)
-};</pre>
-</div>
-<p class="Pp">A <var class="Vt">bhnd_core_match</var> match descriptor may be
- initialized using one or more of the following macros:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_MATCH_CORE_VENDOR"><a class="permalink" href="#BHND_MATCH_CORE_VENDOR"><code class="Fn">BHND_MATCH_CORE_VENDOR</code></a>(<var class="Fa">vendor</var>)</dt>
- <dd>Match on cores with a vendor ID equal to <var class="Fa">vendor</var></dd>
- <dt id="BHND_MATCH_CORE_ID"><a class="permalink" href="#BHND_MATCH_CORE_ID"><code class="Fn">BHND_MATCH_CORE_ID</code></a>(<var class="Fa">id</var>)</dt>
- <dd>Match on cores with a device ID equal to <var class="Fa">id</var></dd>
- <dt id="BHND_MATCH_CORE_REV"><a class="permalink" href="#BHND_MATCH_CORE_REV"><code class="Fn">BHND_MATCH_CORE_REV</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Match on cores with hardware revisions that match <code class="Dv">BHND_
- ##</code> <var class="Fa">hwrev</var>.</dd>
- <dt id="BHND_MATCH_CORE_CLASS"><a class="permalink" href="#BHND_MATCH_CORE_CLASS"><code class="Fn">BHND_MATCH_CORE_CLASS</code></a>(<var class="Fa">class</var>)</dt>
- <dd>Match on cores with a core device class equal to
- <var class="Fa">class</var></dd>
- <dt id="BHND_MATCH_CORE_IDX"><a class="permalink" href="#BHND_MATCH_CORE_IDX"><code class="Fn">BHND_MATCH_CORE_IDX</code></a>(<var class="Fa">idx</var>)</dt>
- <dd>Match on cores with a core index equal to <var class="Fa">idx</var></dd>
- <dt id="BHND_MATCH_CORE_UNIT"><a class="permalink" href="#BHND_MATCH_CORE_UNIT"><code class="Fn">BHND_MATCH_CORE_UNIT</code></a>(<var class="Fa">unit</var>)</dt>
- <dd>Match on cores with a core unit equal to <var class="Fa">unit</var></dd>
- <dt id="BHND_MATCH_CORE"><a class="permalink" href="#BHND_MATCH_CORE"><code class="Fn">BHND_MATCH_CORE</code></a>(<var class="Fa">vendor</var>,
- <var class="Fa">id</var>)</dt>
- <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CORE_VENDOR</code>()
- and <code class="Fn">BHND_MATCH_CORE_ID</code>().</dd>
-</dl>
-</div>
-<p class="Pp">For example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_core_match core_desc = {
- BHND_MATCH_CORE(BHND_MFGID_BROADCOM, BHND_COREID_CC),
- BHND_MATCH_CORE_REV(HWREV_RANGE(0, 10))
-};</pre>
-</div>
-<p class="Pp">The <var class="Vt">bhnd_device_match</var> match descriptor
- supports matching on all board, chip, and core attributes, and may be
- initialized using any of the <var class="Vt">bhnd_board_match</var>,
- <var class="Vt">bhnd_chip_match</var>, or
- <var class="Vt">bhnd_core_match</var> macros.</p>
-<p class="Pp">For example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_device_match device_desc = {
- BHND_MATCH_CHIP_IP(BCM4329, BCM4329_289PIN),
- BHND_MATCH_BOARD_VENDOR(BHND_MFGID_BROADCOM),
- BHND_MATCH_BOARD_TYPE(BCM94329AGB),
- BHND_MATCH_CORE(BHND_MFGID_BROADCOM, BHND_COREID_CC),
-};</pre>
-</div>
-<p class="Pp">A <var class="Vt">bhnd_hwrev_match</var> match descriptor may be
- initialized using one of the following macros:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_HWREV_ANY"><a class="permalink" href="#BHND_HWREV_ANY"><code class="Dv">BHND_HWREV_ANY</code></a></dt>
- <dd>Matches any hardware revision.</dd>
- <dt id="BHND_HWREV_EQ"><a class="permalink" href="#BHND_HWREV_EQ"><code class="Fn">BHND_HWREV_EQ</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Matches any hardware revision equal to <var class="Fa">hwrev</var></dd>
- <dt id="BHND_HWREV_GTE"><a class="permalink" href="#BHND_HWREV_GTE"><code class="Fn">BHND_HWREV_GTE</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Matches any hardware revision greater than or equal to
- <var class="Fa">hwrev</var></dd>
- <dt id="BHND_HWREV_LTE"><a class="permalink" href="#BHND_HWREV_LTE"><code class="Fn">BHND_HWREV_LTE</code></a>(<var class="Fa">hwrev</var>)</dt>
- <dd>Matches any hardware revision less than or equal to
- <var class="Fa">hwrev</var></dd>
- <dt id="BHND_HWREV_RANGE"><a class="permalink" href="#BHND_HWREV_RANGE"><code class="Fn">BHND_HWREV_RANGE</code></a>(<var class="Fa">start</var>,
- <var class="Fa">end</var>)</dt>
- <dd>Matches any hardware revision within an inclusive range. If
- <code class="Dv">BHND_HWREV_INVALID</code> is specified as the
- <var class="Fa">end</var> value, will match on any revision equal to or
- greater than <var class="Fa">start</var></dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Table Functions</h2>
-<p class="Pp">The bhnd device table functions are used to query device and quirk
- tables.</p>
-<p class="Pp" id="bhnd_device_lookup">The
- <a class="permalink" href="#bhnd_device_lookup"><code class="Fn">bhnd_device_lookup</code></a>()
- function returns a pointer to the first entry in device table
- <var class="Fa">table</var> that matches the device
- <var class="Fa">dev</var>. The table entry size is specified by
- <var class="Fa">entry_size</var>.</p>
-<p class="Pp" id="bhnd_device_quirks">The
- <a class="permalink" href="#bhnd_device_quirks"><code class="Fn">bhnd_device_quirks</code></a>()
- function scan the device table <var class="Fa">table</var> for all quirk
- entries that match the device <var class="Fa">dev</var>, returning the
- bitwise OR of all matching quirk flags. The table entry size is specified by
- <var class="Fa">entry_size</var>.</p>
-<p class="Pp">The <var class="Vt">bhnd_device</var> structure contains the
- following fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt><var class="Fa">core</var></dt>
- <dd>A <var class="Vt">bhnd_device_match</var> descriptor.</dd>
- <dt><var class="Fa">desc</var></dt>
- <dd>A verbose device description suitable for use with
- <a class="Xr">device_set_desc(9)</a>, or
- <code class="Dv">NULL</code>.</dd>
- <dt><var class="Fa">quirks_table</var></dt>
- <dd>The quirks table for this device, or <code class="Dv">NULL</code>.</dd>
- <dt><var class="Fa">device_flags</var></dt>
- <dd>The device flags required when matching this entry.</dd>
-</dl>
-</div>
-<p class="Pp">The following device flags are supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_DF_ANY"><a class="permalink" href="#BHND_DF_ANY"><code class="Dv">BHND_DF_ANY</code></a></dt>
- <dd>Match on any device.</dd>
- <dt id="BHND_DF_HOSTB"><a class="permalink" href="#BHND_DF_HOSTB"><code class="Dv">BHND_DF_HOSTB</code></a></dt>
- <dd>Match only if the device is the <a class="Xr">bhndb(4)</a> host bridge.
- Implies <code class="Dv">BHND_DF_ADAPTER</code>.</dd>
- <dt id="BHND_DF_SOC"><a class="permalink" href="#BHND_DF_SOC"><code class="Dv">BHND_DF_SOC</code></a></dt>
- <dd>Match only if the device is attached to a native SoC backplane.</dd>
- <dt id="BHND_DF_ADAPTER"><a class="permalink" href="#BHND_DF_ADAPTER"><code class="Dv">BHND_DF_ADAPTER</code></a></dt>
- <dd>Match only if the device is attached to a <a class="Xr">bhndb(4)</a>
- bridged backplane.</dd>
-</dl>
-</div>
-<p class="Pp">A <var class="Vt">bhnd_device</var> table entry may be initialized
- using one of the following macros:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="BHND_DEVICE"><a class="permalink" href="#BHND_DEVICE"><code class="Fn">BHND_DEVICE</code></a>(<var class="Fa">vendor</var>,
- <var class="Fa">device</var>, <var class="Fa">desc</var>,
- <var class="Fa">quirks</var>, <var class="Fa">flags</var>)</dt>
- <dd>Match on devices with a vendor ID equal to <code class="Dv">BHND_MFGID_
- ##</code> <var class="Fa">vendor</var> and a core device ID equal to
- <code class="Dv">BHND_COREID_ ##</code> <var class="Fa">device</var>.
- <p class="Pp">The device's verbose description is specified by the
- <var class="Fa">desc</var> argument, a pointer to the device-specific
- quirks table is specified by the <var class="Fa">quirks</var> argument,
- and any required device flags may be provided in
- <var class="Fa">flags</var>. The optional <var class="Fa">flags</var>
- argument defaults to <code class="Dv">BHND_DF_ANY</code> if omitted.</p>
- </dd>
- <dt id="BHND_DEVICE_END"><a class="permalink" href="#BHND_DEVICE_END"><code class="Dv">BHND_DEVICE_END</code></a></dt>
- <dd>Terminate the <var class="Vt">bhnd_device</var> table.</dd>
-</dl>
-<p class="Pp">For example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_device bhnd_usb11_devices[] = {
- BHND_DEVICE(BCM, USB, &quot;Broadcom USB1.1 Controller&quot;,
- bhnd_usb11_quirks),
- BHND_DEVICE_END
-};</pre>
-</div>
-<p class="Pp">The <var class="Vt">bhnd_device_quirk</var> structure contains the
- following fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt><var class="Fa">desc</var></dt>
- <dd>A <var class="Vt">bhnd_device_match</var> descriptor.</dd>
- <dt><var class="Fa">quirks</var></dt>
- <dd>Applicable quirk flags.</dd>
-</dl>
-</div>
-<p class="Pp">A bhnd_device_quirk table entry may be initialized using one of
- the following convenience macros:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_BOARD_QUIRK"><a class="permalink" href="#BHND_BOARD_QUIRK"><code class="Fn">BHND_BOARD_QUIRK</code></a>(<var class="Fa">board</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Set quirk flags <var class="Fa">flags</var> on devices with a board type
- equal to <code class="Dv">BHND_BOARD_ ##</code>
- <var class="Fa">board</var>.</dd>
- <dt id="BHND_CHIP_QUIRK"><a class="permalink" href="#BHND_CHIP_QUIRK"><code class="Fn">BHND_CHIP_QUIRK</code></a>(<var class="Fa">chip</var>,
- <var class="Fa">hwrev</var>, <var class="Fa">flags</var>)</dt>
- <dd>Set quirk flags <var class="Fa">flags</var> on devices with a chip ID
- equal to <code class="Dv">BHND_CHIPID_BCM ##</code>
- <var class="Fa">chip</var> and chip hardware revision that matches
- <code class="Dv">BHND_ ##</code> <var class="Fa">hwrev</var>.</dd>
- <dt id="BHND_PKG_QUIRK"><a class="permalink" href="#BHND_PKG_QUIRK"><code class="Fn">BHND_PKG_QUIRK</code></a>(<var class="Fa">chip</var>,
- <var class="Fa">pkg</var>, <var class="Fa">flags&quot;</var>)</dt>
- <dd>Set quirk flags <var class="Fa">flags</var> on devices with a chip ID
- equal to <code class="Dv">BHND_CHIPID_BCM ##</code>
- <var class="Fa">chip</var> and chip package equal to
- <code class="Dv">BHND_ ## chip ##</code> <var class="Fa">pkg</var>.</dd>
- <dt id="BHND_CORE_QUIRK"><a class="permalink" href="#BHND_CORE_QUIRK"><code class="Fn">BHND_CORE_QUIRK</code></a>(<var class="Fa">hwrev</var>,
- <var class="Fa">flags&quot;</var>)</dt>
- <dd>Set quirk flags <var class="Fa">flags</var> on devices with a core
- hardware revision that matches <code class="Dv">BHND_ ##</code>
- <var class="Fa">hwrev</var>.</dd>
-</dl>
-</div>
-For example:
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bhnd_device_quirk bhnd_usb11_quirks[] = {
- BHND_DEVICE(BCM, USB, &quot;Broadcom USB1.1 Controller&quot;,
- bhnd_usb11_quirks),
- BHND_DEVICE_END
-};</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">DMA Address Translation Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_get_dma_translation"><code class="Fn" id="bhnd_get_dma_translation">bhnd_get_dma_translation</code></a>()
- function is used to request a DMA address translation descriptor suitable
- for use with a maximum DMA address width of <var class="Fa">width</var>,
- with support for the requested translation <var class="Fa">flags</var>.</p>
-<p class="Pp">If a suitable DMA address translation descriptor is found, it will
- be stored in <var class="Fa">translation</var>, and a bus DMA tag specifying
- the DMA translation's address restrictions will be stored in
- <var class="Fa">dmat</var>. The <var class="Fa">translation</var> and
- <var class="Fa">dmat</var> arguments may be <code class="Dv">NULL</code> if
- the translation descriptor or DMA tag are not desired.</p>
-<p class="Pp">The following DMA translation flags are supported:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="BHND_DMA_TRANSLATION_PHYSMAP"><a class="permalink" href="#BHND_DMA_TRANSLATION_PHYSMAP"><code class="Dv">BHND_DMA_TRANSLATION_PHYSMAP</code></a></dt>
- <dd>The translation remaps the device's physical address space.
- <p class="Pp">This is used in conjunction with
- <code class="Dv">BHND_DMA_TRANSLATION_BYTESWAPPED</code> to define a DMA
- translation that provides byteswapped access to physical memory on
- big-endian MIPS SoCs.</p>
- </dd>
- <dt id="BHND_DMA_TRANSLATION_BYTESWAPPED"><a class="permalink" href="#BHND_DMA_TRANSLATION_BYTESWAPPED"><code class="Dv">BHND_DMA_TRANSLATION_BYTESWAPPED</code></a></dt>
- <dd>The translation provides a byte-swapped mapping; write requests will be
- byte-swapped before being written to memory, and read requests will be
- byte-swapped before being returned.
- <p class="Pp">This is primarily used to perform efficient byte swapping of
- DMA data on embedded MIPS SoCs executing in big-endian mode.</p>
- </dd>
-</dl>
-<p class="Pp">The following symbolic constants are defined for common DMA
- address widths:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_DMA_ADDR_30BIT"><a class="permalink" href="#BHND_DMA_ADDR_30BIT"><code class="Dv">BHND_DMA_ADDR_30BIT</code></a></dt>
- <dd>30-bit DMA</dd>
- <dt id="BHND_DMA_ADDR_32BIT"><a class="permalink" href="#BHND_DMA_ADDR_32BIT"><code class="Dv">BHND_DMA_ADDR_32BIT</code></a></dt>
- <dd>32-bit DMA</dd>
- <dt id="BHND_DMA_ADDR_64BIT"><a class="permalink" href="#BHND_DMA_ADDR_64BIT"><code class="Dv">BHND_DMA_ADDR_64BIT</code></a></dt>
- <dd>64-bit DMA</dd>
-</dl>
-</div>
-<p class="Pp">The <var class="Vt">bhnd_dma_translation</var> structure contains
- the following fields:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">base_addr</var></dt>
- <dd>Host-to-device physical address translation. This may be added to a host
- physical address to produce a device DMA address.</dd>
- <dt><var class="Fa">addr_mask</var></dt>
- <dd>Device-addressable address mask. This defines the device DMA address
- range, and excludes any bits reserved for mapping the address within the
- translation window at <var class="Fa">base_addr</var>.</dd>
- <dt><var class="Fa">addrext_mask</var></dt>
- <dd>Device-addressable extended address mask. If a the per-core BHND DMA
- engine supports the 'addrext' control field, it can be used to provide
- address bits excluded by <var class="Fa">addr_mask</var>.
- <p class="Pp">Support for DMA extended address changes &#x2014; including
- coordination with the core providing device-to-host DMA address
- translation &#x2014; is handled transparently by the DMA engine.</p>
- <p class="Pp">For example, on PCI Wi-Fi devices, the Wi-Fi core's DMA engine
- will (in effect) update the PCI host bridge core's DMA
- <code class="Dv">sbtopcitranslation</code> base address to map the
- target address prior to performing a DMA transaction.</p>
- </dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Translation flags.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interrupt Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_get_intr_count"><code class="Fn" id="bhnd_get_intr_count">bhnd_get_intr_count</code></a>()
- function is used to determine the number of backplane interrupt lines
- assigned to the device <var class="Fa">dev</var>. Interrupt line identifiers
- are allocated in monotonically increasing order, starting with 0.</p>
-<p class="Pp" id="bhnd_get_intr_ivec">The
- <a class="permalink" href="#bhnd_get_intr_ivec"><code class="Fn">bhnd_get_intr_ivec</code></a>()
- function is used to determine the backplane interrupt vector assigned to
- interrupt line <var class="Fa">intr</var> on the device
- <var class="Fa">dev</var>, writing the result to <var class="Fa">ivec</var>.
- Interrupt vector assignments are backplane-specific: On BCMA devices, this
- function returns the OOB bus line assigned to the interrupt. On SIBA
- devices, it returns the target OCP slave flag number assigned to the
- interrupt.</p>
-<p class="Pp" id="bhnd_map_intr">The
- <a class="permalink" href="#bhnd_map_intr"><code class="Fn">bhnd_map_intr</code></a>()
- function is used to map interrupt line <var class="Fa">intr</var> assigned
- to device <var class="Fa">dev</var> to an IRQ number, writing the result to
- <var class="Fa">irq</var>. Until unmapped, this IRQ may be used when
- allocating a resource of type SYS_RES_IRQ.</p>
-<p class="Pp">Ownership of the interrupt mapping is assumed by the caller, and
- must be explicitly released using <var class="Fa">bhnd_unmap_intr</var>.</p>
-<p class="Pp" id="bhnd_unmap_intr">The
- <a class="permalink" href="#bhnd_unmap_intr"><code class="Fn">bhnd_unmap_intr</code></a>()
- function is used to unmap bus IRQ <var class="Fa">irq</var> previously
- mapped using <code class="Fn">bhnd_map_intr</code>() by the device
- <var class="Fa">dev</var>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">NVRAM Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_nvram_getvar</code>() function is used
- to read the value of NVRAM variable <var class="Fa">name</var> from the
- NVRAM provider(s) registered with the parent <a class="Xr">bhnd(4)</a> bus
- of device <var class="Fa">dev</var>, coerced to the desired data
- representation <var class="Fa">type</var>, written to the buffer specified
- by <var class="Fa">buf</var>.</p>
-<p class="Pp" id="bhnd_nvram_getvar">Before the call, the maximum capacity of
- <var class="Fa">buf</var> is specified by <var class="Fa">len</var>. After a
- successful call &#x2014; or if <code class="Er">ENOMEM</code> is returned
- &#x2014; the size of the available data will be written to
- <var class="Fa">len</var>. The size of the desired data representation can
- be determined by calling
- <a class="permalink" href="#bhnd_nvram_getvar"><code class="Fn">bhnd_nvram_getvar</code></a>()
- with a <code class="Dv">NULL</code> argument for
- <var class="Fa">buf</var>.</p>
-<p class="Pp">The following NVRAM data types are supported:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="BHND_NVRAM_TYPE_UINT8"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT8"><code class="Dv">BHND_NVRAM_TYPE_UINT8</code></a></dt>
- <dd>unsigned 8-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_UINT16"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT16"><code class="Dv">BHND_NVRAM_TYPE_UINT16</code></a></dt>
- <dd>unsigned 16-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_UINT32"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT32"><code class="Dv">BHND_NVRAM_TYPE_UINT32</code></a></dt>
- <dd>unsigned 32-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_UINT64"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT64"><code class="Dv">BHND_NVRAM_TYPE_UINT64</code></a></dt>
- <dd>signed 64-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_INT8"><a class="permalink" href="#BHND_NVRAM_TYPE_INT8"><code class="Dv">BHND_NVRAM_TYPE_INT8</code></a></dt>
- <dd>signed 8-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_INT16"><a class="permalink" href="#BHND_NVRAM_TYPE_INT16"><code class="Dv">BHND_NVRAM_TYPE_INT16</code></a></dt>
- <dd>signed 16-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_INT32"><a class="permalink" href="#BHND_NVRAM_TYPE_INT32"><code class="Dv">BHND_NVRAM_TYPE_INT32</code></a></dt>
- <dd>signed 32-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_INT64"><a class="permalink" href="#BHND_NVRAM_TYPE_INT64"><code class="Dv">BHND_NVRAM_TYPE_INT64</code></a></dt>
- <dd>signed 64-bit integer</dd>
- <dt id="BHND_NVRAM_TYPE_CHAR"><a class="permalink" href="#BHND_NVRAM_TYPE_CHAR"><code class="Dv">BHND_NVRAM_TYPE_CHAR</code></a></dt>
- <dd>UTF-8 character</dd>
- <dt id="BHND_NVRAM_TYPE_STRING"><a class="permalink" href="#BHND_NVRAM_TYPE_STRING"><code class="Dv">BHND_NVRAM_TYPE_STRING</code></a></dt>
- <dd>UTF-8 NUL-terminated string</dd>
- <dt id="BHND_NVRAM_TYPE_BOOL"><a class="permalink" href="#BHND_NVRAM_TYPE_BOOL"><code class="Dv">BHND_NVRAM_TYPE_BOOL</code></a></dt>
- <dd>uint8 boolean value</dd>
- <dt id="BHND_NVRAM_TYPE_NULL"><a class="permalink" href="#BHND_NVRAM_TYPE_NULL"><code class="Dv">BHND_NVRAM_TYPE_NULL</code></a></dt>
- <dd>NULL (empty) value</dd>
- <dt id="BHND_NVRAM_TYPE_DATA"><a class="permalink" href="#BHND_NVRAM_TYPE_DATA"><code class="Dv">BHND_NVRAM_TYPE_DATA</code></a></dt>
- <dd>opaque octet string</dd>
- <dt id="BHND_NVRAM_TYPE_UINT8_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT8_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT8_ARRAY</code></a></dt>
- <dd>array of uint8 integers</dd>
- <dt id="BHND_NVRAM_TYPE_UINT16_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT16_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT16_ARRAY</code></a></dt>
- <dd>array of uint16 integers</dd>
- <dt id="BHND_NVRAM_TYPE_UINT32_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT32_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT32_ARRAY</code></a></dt>
- <dd>array of uint32 integers</dd>
- <dt id="BHND_NVRAM_TYPE_UINT64_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT64_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT64_ARRAY</code></a></dt>
- <dd>array of uint64 integers</dd>
- <dt id="BHND_NVRAM_TYPE_INT8_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT8_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT8_ARRAY</code></a></dt>
- <dd>array of int8 integers</dd>
- <dt id="BHND_NVRAM_TYPE_INT16_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT16_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT16_ARRAY</code></a></dt>
- <dd>array of int16 integers</dd>
- <dt id="BHND_NVRAM_TYPE_INT32_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT32_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT32_ARRAY</code></a></dt>
- <dd>array of int32 integers</dd>
- <dt id="BHND_NVRAM_TYPE_INT64_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT64_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT64_ARRAY</code></a></dt>
- <dd>array of int64 integers</dd>
- <dt id="BHND_NVRAM_TYPE_CHAR_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_CHAR_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_CHAR_ARRAY</code></a></dt>
- <dd>array of UTF-8 characters</dd>
- <dt id="BHND_NVRAM_TYPE_STRING_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_STRING_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_STRING_ARRAY</code></a></dt>
- <dd>array of UTF-8 NUL-terminated strings</dd>
- <dt id="BHND_NVRAM_TYPE_BOOL_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_BOOL_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_BOOL_ARRAY</code></a></dt>
- <dd>array of uint8 boolean values</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_nvram_getvar_array">The
- <a class="permalink" href="#bhnd_nvram_getvar_array"><code class="Fn">bhnd_nvram_getvar_array</code></a>(),
- <code class="Fn">bhnd_nvram_getvar_int</code>(),
- <code class="Fn">bhnd_nvram_getvar_int8</code>(),
- <code class="Fn">bhnd_nvram_getvar_int16</code>(),
- <code class="Fn">bhnd_nvram_getvar_int32</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint8</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint16</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint32</code>(), and
- <code class="Fn">bhnd_nvram_getvar_str</code>() functions are convenience
- wrappers for <code class="Fn">bhnd_nvram_getvar</code>().</p>
-<p class="Pp" id="bhnd_nvram_getvar_array~2">The
- <a class="permalink" href="#bhnd_nvram_getvar_array~2"><code class="Fn">bhnd_nvram_getvar_array</code></a>()
- function returns either a value of exactly <var class="Fa">size</var> in
- <var class="Fa">buf</var>, or returns an error code of
- <code class="Er">ENXIO</code> if the data representation is not exactly
- <var class="Fa">size</var> in length.</p>
-<p class="Pp" id="bhnd_nvram_getvar_int">The
- <a class="permalink" href="#bhnd_nvram_getvar_int"><code class="Fn">bhnd_nvram_getvar_int</code></a>()
- and
- <a class="permalink" href="#bhnd_nvram_getvar_uint"><code class="Fn" id="bhnd_nvram_getvar_uint">bhnd_nvram_getvar_uint</code></a>()
- functions return the value of NVRAM variable <var class="Fa">name</var>,
- coerced to a signed or unsigned integer type of <var class="Fa">width</var>
- (1, 2, or 4 bytes).</p>
-<p class="Pp" id="bhnd_nvram_getvar_int8">The
- <a class="permalink" href="#bhnd_nvram_getvar_int8"><code class="Fn">bhnd_nvram_getvar_int8</code></a>(),
- <a class="permalink" href="#bhnd_nvram_getvar_int16"><code class="Fn" id="bhnd_nvram_getvar_int16">bhnd_nvram_getvar_int16</code></a>(),
- <a class="permalink" href="#bhnd_nvram_getvar_int32"><code class="Fn" id="bhnd_nvram_getvar_int32">bhnd_nvram_getvar_int32</code></a>(),
- <code class="Fn">bhnd_nvram_getvar_uint</code>(),
- <a class="permalink" href="#bhnd_nvram_getvar_uint8"><code class="Fn" id="bhnd_nvram_getvar_uint8">bhnd_nvram_getvar_uint8</code></a>(),
- <a class="permalink" href="#bhnd_nvram_getvar_uint16"><code class="Fn" id="bhnd_nvram_getvar_uint16">bhnd_nvram_getvar_uint16</code></a>(),
- and
- <a class="permalink" href="#bhnd_nvram_getvar_uint32"><code class="Fn" id="bhnd_nvram_getvar_uint32">bhnd_nvram_getvar_uint32</code></a>()
- functions return the value of NVRAM variable <var class="Fa">name</var>,
- coerced to a signed or unsigned 8, 16, or 32-bit integer type.</p>
-<p class="Pp" id="bhnd_nvram_getvar_str">The
- <a class="permalink" href="#bhnd_nvram_getvar_str"><code class="Fn">bhnd_nvram_getvar_str</code></a>()
- functions return the value of NVRAM variable <var class="Fa">name</var>,
- coerced to a NUL-terminated string.</p>
-<p class="Pp" id="bhnd_nvram_string_array_next">The
- <a class="permalink" href="#bhnd_nvram_string_array_next"><code class="Fn">bhnd_nvram_string_array_next</code></a>()
- function iterates over all strings in the <var class="Fa">inp</var>
- <code class="Dv">BHND_NVRAM_TYPE_STRING_ARRAY</code> value. The size of
- <var class="Fa">inp</var>, including any terminating NUL character(s), is
- specified using the <var class="Fa">ilen</var> argument. The
- <var class="Fa">prev</var> argument should be either a string pointer
- previously returned by
- <code class="Fn">bhnd_nvram_string_array_next</code>(), or
- <code class="Dv">NULL</code> to begin iteration. If <var class="Fa">prev is
- not</var> <code class="Dv">NULL</code>, the <var class="Fa">olen</var>
- argument must be a pointer to the length previously returned by
- <code class="Fn">bhnd_nvram_string_array_next</code>(). On success, the next
- string element's length will be written to this pointer.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Port/Region Functions</h2>
-<p class="Pp">Per-device interconnect memory mappings are identified by a
- combination of <i class="Em">port type</i>, <i class="Em">port number</i>,
- and <a class="permalink" href="#region"><i class="Em" id="region">region
- number</i></a>. Port and memory region identifiers are allocated in
- monotonically increasing order for each <i class="Em">port type</i>,
- starting with 0.</p>
-<p class="Pp">The following port types are supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_PORT_DEVICE"><a class="permalink" href="#BHND_PORT_DEVICE"><code class="Dv">BHND_PORT_DEVICE</code></a></dt>
- <dd>Device memory. The device's control/status registers are always mapped by
- the first device port and region, and will be assigned a
- <code class="Dv">SYS_RES_MEMORY</code> resource ID of 0.</dd>
- <dt id="BHND_PORT_BRIDGE"><a class="permalink" href="#BHND_PORT_BRIDGE"><code class="Dv">BHND_PORT_BRIDGE</code></a></dt>
- <dd>Bridge memory.</dd>
- <dt id="BHND_PORT_AGENT"><a class="permalink" href="#BHND_PORT_AGENT"><code class="Dv">BHND_PORT_AGENT</code></a></dt>
- <dd>Interconnect agent/wrapper.</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_decode_port_rid">The
- <a class="permalink" href="#bhnd_decode_port_rid"><code class="Fn">bhnd_decode_port_rid</code></a>()
- function is used to decode the resource ID <var class="Fa">rid</var>
- assigned to device <var class="Fa">dev</var>, of resource type
- <var class="Fa">type</var>, writing the port type to
- <var class="Fa">port_type</var>, port number to <var class="Fa">port</var>,
- and region number to <var class="Fa">region</var>.</p>
-<p class="Pp" id="bhnd_get_port_count">The
- <a class="permalink" href="#bhnd_get_port_count"><code class="Fn">bhnd_get_port_count</code></a>()
- function returns the number of ports of type <var class="Fa">type</var>
- assigned to device <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_get_port_rid">The
- <a class="permalink" href="#bhnd_get_port_rid"><code class="Fn">bhnd_get_port_rid</code></a>()
- function returns the resource ID for the
- <code class="Dv">SYS_RES_MEMORY</code> resource mapping the
- <var class="Fa">port</var> of <var class="Fa">type</var> and
- <var class="Fa">region</var> on device <var class="Fa">dev</var>, or -1 if
- the port or region are invalid, or do not have an assigned resource ID.</p>
-<p class="Pp" id="bhnd_get_region_addr">The
- <a class="permalink" href="#bhnd_get_region_addr"><code class="Fn">bhnd_get_region_addr</code></a>()
- function is used to determine the base address and size of the memory
- <var class="Fa">region</var> on <var class="Fa">port</var> of
- <var class="Fa">type</var> assigned to <var class="Fa">dev</var>. The
- region's base device address will be written to
- <var class="Fa">region_addr</var>, and the region size to
- <var class="Fa">region_size</var>.</p>
-<p class="Pp" id="bhnd_get_region_count">The
- <a class="permalink" href="#bhnd_get_region_count"><code class="Fn">bhnd_get_region_count</code></a>()
- function returns the number of memory regions mapped to
- <var class="Fa">port</var> of <var class="Fa">type</var> on device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_is_region_valid">The
- <a class="permalink" href="#bhnd_is_region_valid"><code class="Fn">bhnd_is_region_valid</code></a>()
- function returns <code class="Dv">true</code> if
- <var class="Fa">region</var> is a valid region mapped by
- <var class="Fa">port</var> of <var class="Fa">type</var> on device
- <var class="Fa">dev</var>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Power Management Functions</h2>
-<p class="Pp">Drivers must ask the parent <a class="Xr">bhnd(4)</a> bus to
- allocate device PMU state using <code class="Fn">bhnd_alloc_pmu</code>()
- before calling any another bhnd PMU functions.</p>
-<p class="Pp" id="bhnd_alloc_pmu">The
- <a class="permalink" href="#bhnd_alloc_pmu"><code class="Fn">bhnd_alloc_pmu</code></a>()
- function is used to allocate per-device PMU state and enable PMU request
- handling for device <var class="Fa">dev</var>. The memory region containing
- the device's PMU register block must be allocated using
- <a class="Xr">bus_alloc_resource(9)</a> or
- <code class="Fn">bhnd_alloc_resource</code>() before calling
- <code class="Fn">bhnd_alloc_pmu</code>(), and must not be released until
- after calling <code class="Fn">bhnd_release_pmu</code>().</p>
-<p class="Pp">On all supported BHND hardware, the PMU register block is mapped
- by the device's control/status registers in the first device port and
- region.</p>
-<p class="Pp" id="bhnd_release_pmu">The
- <a class="permalink" href="#bhnd_release_pmu"><code class="Fn">bhnd_release_pmu</code></a>()
- function releases the per-device PMU state previously allocated for device
- <var class="Fa">dev</var> using <code class="Fn">bhnd_alloc_pmu</code>().
- Any outstanding clock and external resource requests will be discarded upon
- release of the device PMU state.</p>
-<p class="Pp" id="bhnd_enable_clocks~2">The
- <a class="permalink" href="#bhnd_enable_clocks~2"><code class="Fn">bhnd_enable_clocks</code></a>()
- function is used to request that <var class="Fa">clocks</var> be powered up
- and routed to the backplane on behalf of device <var class="Fa">dev</var>.
- This will power any clock sources required (e.g., XTAL, PLL, etc) and wait
- until the requested clocks are stable. If the request succeeds, any previous
- clock requests issued by <var class="Fa">dev</var> will be discarded.</p>
-<p class="Pp">The following clocks are supported, and may be combined using
- bitwise OR to request multiple clocks:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt>BHND_CLOCK_DYN</dt>
- <dd>Dynamically select an appropriate clock source based on all outstanding
- clock requests by any device attached to the parent
- <a class="Xr">bhnd(4)</a> bus.</dd>
- <dt>BHND_CLOCK_ILP</dt>
- <dd>Idle Low-Power (ILP) Clock. May be used if no register access is required,
- or long request latency is acceptable.</dd>
- <dt>BHND_CLOCK_ALP</dt>
- <dd>Active Low-Power (ALP) Clock. Supports low-latency register access and
- low-rate DMA.</dd>
- <dt>BHND_CLOCK_HT</dt>
- <dd>High Throughput (HT) Clock. Supports high bus throughput and
- lowest-latency register access.</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_request_clock">The
- <a class="permalink" href="#bhnd_request_clock"><code class="Fn">bhnd_request_clock</code></a>()
- function is used to request that <var class="Fa">clock</var> (or faster) be
- powered up and routed to device <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_get_clock_freq">The
- <a class="permalink" href="#bhnd_get_clock_freq"><code class="Fn">bhnd_get_clock_freq</code></a>()
- function is used to request the current clock frequency of
- <var class="Fa">clock</var>, writing the frequency in Hz to
- <var class="Fa">freq</var>.</p>
-<p class="Pp" id="bhnd_get_clock_latency">The
- <a class="permalink" href="#bhnd_get_clock_latency"><code class="Fn">bhnd_get_clock_latency</code></a>()
- function is used to determine the transition latency required for
- <var class="Fa">clock</var>, writing the latency in microseconds to
- <var class="Fa">latency</var>. The <code class="Dv">BHND_CLOCK_HT</code>
- latency value is suitable for use as the D11 Wi-Fi core
- <a class="permalink" href="#fastpwrup_dly"><i class="Em" id="fastpwrup_dly">fastpwrup_dly</i></a>
- value.</p>
-<p class="Pp" id="bhnd_request_ext_rsrc">The
- <a class="permalink" href="#bhnd_request_ext_rsrc"><code class="Fn">bhnd_request_ext_rsrc</code></a>()
- function is used to request that the external PMU-managed resource assigned
- to device <var class="Fa">dev</var>, identified by device-specific
- identifier <var class="Fa">rsrc</var>, be powered up.</p>
-<p class="Pp" id="bhnd_release_ext_rsrc">The
- <a class="permalink" href="#bhnd_release_ext_rsrc"><code class="Fn">bhnd_release_ext_rsrc</code></a>()
- function releases any outstanding requests by device
- <var class="Fa">dev</var> for the PMU-managed resource identified by
- device-specific identifier <var class="Fa">rsrc</var>. If an external
- resource is shared by multiple devices, it will not be powered down until
- all device requests are released.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Service Provider Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_register_provider"><code class="Fn" id="bhnd_register_provider">bhnd_register_provider</code></a>()
- function is used to register device <var class="Fa">dev</var> as a provider
- for platform <var class="Fa">service</var> with the parent
- <a class="Xr">bhnd(4)</a> bus.</p>
-<p class="Pp">The following service types are supported:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="BHND_SERVICE_CHIPC"><a class="permalink" href="#BHND_SERVICE_CHIPC"><code class="Dv">BHND_SERVICE_CHIPC</code></a></dt>
- <dd>ChipCommon service. The providing device must implement the bhnd_chipc
- interface.</dd>
- <dt id="BHND_SERVICE_PWRCTL"><a class="permalink" href="#BHND_SERVICE_PWRCTL"><code class="Dv">BHND_SERVICE_PWRCTL</code></a></dt>
- <dd>Legacy PWRCTL service. The providing device must implement the bhnd_pwrctl
- interface.</dd>
- <dt id="BHND_SERVICE_PMU"><a class="permalink" href="#BHND_SERVICE_PMU"><code class="Dv">BHND_SERVICE_PMU</code></a></dt>
- <dd>PMU service. The providing device must implement the bhnd_pmu
- interface.</dd>
- <dt id="BHND_SERVICE_NVRAM"><a class="permalink" href="#BHND_SERVICE_NVRAM"><code class="Dv">BHND_SERVICE_NVRAM</code></a></dt>
- <dd>NVRAM service. The providing device must implement the bhnd_nvram
- interface.</dd>
- <dt id="BHND_SERVICE_GPIO"><a class="permalink" href="#BHND_SERVICE_GPIO"><code class="Dv">BHND_SERVICE_GPIO</code></a></dt>
- <dd>GPIO service. The providing device must implement the standard
- <a class="Xr">gpio(4)</a> interface.</dd>
- <dt id="BHND_SERVICE_ANY"><a class="permalink" href="#BHND_SERVICE_ANY"><code class="Dv">BHND_SERVICE_ANY</code></a></dt>
- <dd>Matches on any service type. May be used with
- <a class="permalink" href="#bhnd_deregister_provider"><code class="Fn" id="bhnd_deregister_provider">bhnd_deregister_provider</code></a>()
- to remove all service provider registrations for a device.</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_deregister_provider~2">The
- <a class="permalink" href="#bhnd_deregister_provider~2"><code class="Fn">bhnd_deregister_provider</code></a>()
- function attempts to remove provider registration for the device
- <var class="Fa">dev</var> and <var class="Fa">service</var>. If a
- <var class="Fa">service</var> argument of
- <code class="Dv">BHND_SERVICE_ANY</code> is specified, this function will
- attempt to remove
- <a class="permalink" href="#all"><i class="Em" id="all">all service provider
- registrations for</i></a> <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bhnd_retain_provider">The
- <a class="permalink" href="#bhnd_retain_provider"><code class="Fn">bhnd_retain_provider</code></a>()
- function retains and returns a reference to the provider registered for
- <var class="Fa">service</var> with the parent <a class="Xr">bhnd(4)</a> bus
- of device <var class="Fa">dev</var>, if available. On success, the caller is
- responsible for releasing this provider reference using
- <code class="Fn">bhnd_release_provider</code>(). The service provider is
- guaranteed to remain available until the provider reference is released.</p>
-<p class="Pp" id="bhnd_release_provider">The
- <a class="permalink" href="#bhnd_release_provider"><code class="Fn">bhnd_release_provider</code></a>()
- function releases a reference to a <var class="Fa">provider</var> for
- <var class="Fa">service</var>, previously retained by device
- <var class="Fa">dev</var> using
- <code class="Fn">bhnd_retain_provider</code>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Utility Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#bhnd_driver_get_erom_class"><code class="Fn" id="bhnd_driver_get_erom_class">bhnd_driver_get_erom_class</code></a>()
- function returns the <a class="Xr">bhnd_erom(9)</a> class for the device
- enumeration table format used by <a class="Xr">bhnd(4)</a> bus driver
- instance <var class="Fa">driver</var>. If the driver does not support
- <a class="Xr">bhnd_erom(9)</a> device enumeration,
- <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="bhnd_find_core_class">The
- <a class="permalink" href="#bhnd_find_core_class"><code class="Fn">bhnd_find_core_class</code></a>()
- function looks up the BHND class, if known, for the BHND vendor ID
- <var class="Fa">vendor</var> and device ID <var class="Fa">device</var>.</p>
-<p class="Pp" id="bhnd_find_core_name">The
- <a class="permalink" href="#bhnd_find_core_name"><code class="Fn">bhnd_find_core_name</code></a>()
- function is used to fetch the human-readable name, if known, for the BHND
- core with a vendor ID of <var class="Fa">vendor</var> and device ID of
- <var class="Fa">device</var>.</p>
-<p class="Pp" id="bhnd_core_class">The
- <a class="permalink" href="#bhnd_core_class"><code class="Fn">bhnd_core_class</code></a>()
- and
- <a class="permalink" href="#bhnd_core_name"><code class="Fn" id="bhnd_core_name">bhnd_core_name</code></a>()
- functions are convenience wrappers for
- <code class="Fn">bhnd_find_core_class</code>() and
- <code class="Fn">bhnd_find_core_name</code>(), that use the
- <var class="Fa">vendor</var> and <var class="Fa">device</var> fields of the
- core info structure <var class="Fa">ci</var>.</p>
-<p class="Pp" id="bhnd_format_chip_id">The
- <a class="permalink" href="#bhnd_format_chip_id"><code class="Fn">bhnd_format_chip_id</code></a>()
- function writes a NUL-terminated human-readable representation of the BHND
- <var class="Fa">chip_id</var> value to the specified
- <var class="Fa">buffer</var> with a capacity of <var class="Fa">size</var>.
- No more than <var class="Fa">size-1</var> characters will be written, with
- the <var class="Fa">size'th</var> character set to '\0'. A buffer size of
- <code class="Dv">BHND_CHIPID_MAX_NAMELEN</code> is sufficient for any string
- representation produced using
- <code class="Fn">bhnd_format_chip_id</code>().</p>
-<p class="Pp" id="bhnd_set_custom_core_desc">The
- <a class="permalink" href="#bhnd_set_custom_core_desc"><code class="Fn">bhnd_set_custom_core_desc</code></a>()
- function uses the <a class="Xr">bhnd(4)</a> device identification of
- <var class="Fa">dev</var>, overriding the core name with the specified
- <var class="Fa">dev_name</var>, to populate the device's verbose description
- using <a class="Xr">device_set_desc(9)</a>.</p>
-<p class="Pp" id="bhnd_set_default_core_desc">The
- <a class="permalink" href="#bhnd_set_default_core_desc"><code class="Fn">bhnd_set_default_core_desc</code></a>()
- function uses the <a class="Xr">bhnd(4)</a> device identification of
- <var class="Fa">dev</var> to populate the device's verbose description using
- <a class="Xr">device_set_desc(9)</a>.</p>
-<p class="Pp" id="bhnd_vendor_name">The
- <a class="permalink" href="#bhnd_vendor_name"><code class="Fn">bhnd_vendor_name</code></a>()
- function returns the human-readable name for the JEP-106, ARM 4-bit
- continuation encoded manufacturer ID <var class="Fa">vendor</var>, if
- known.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<section class="Ss">
-<h2 class="Ss">Bus Resource Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_activate_resource</code>(),
- <code class="Fn">bhnd_alloc_resources</code>(),
- <code class="Fn">bhnd_deactivate_resource</code>(), and
- <code class="Fn">bhnd_release_resource</code>() functions return 0 on
- success, otherwise an appropriate error code is returned.</p>
-<p class="Pp">The <code class="Fn">bhnd_alloc_resource</code>() and
- <code class="Fn">bhnd_alloc_resource_any</code>() functions return a pointer
- to <var class="Vt">struct resource</var> on success, a null pointer
- otherwise.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Configuration Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_read_config</code>() and
- <code class="Fn">bhnd_write_config</code>() functions return 0 on success,
- or one of the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">EINVAL</code>]</dt>
- <dd>The device is not a direct child of the <a class="Xr">bhnd(4)</a> bus</dd>
- <dt>[<code class="Er">EINVAL</code>]</dt>
- <dd>The requested width is not one of 1, 2, or 4 bytes.</dd>
- <dt>[<code class="Er">ENODEV</code>]</dt>
- <dd>Accessing agent/config space for the device is unsupported.</dd>
- <dt>[<code class="Er">EFAULT</code>]</dt>
- <dd>The requested offset or width exceeds the bounds of the mapped
- agent/config space.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">bhnd_read_ioctl</code>(),
- <code class="Fn">bhnd_write_ioctl</code>(),
- <code class="Fn">bhnd_read_iost</code>(),
- <code class="Fn">bhnd_reset_hw</code>(), and
- <code class="Fn">bhnd_suspend_hw</code>() functions return 0 on success,
- otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Information Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_read_board_info</code>() function
- returns 0 on success, otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">DMA Address Translation Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_get_dma_translation</code>() function
- returns 0 on success, or one of the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">ENODEV</code>]</dt>
- <dd>DMA is not supported.</dd>
- <dt>[<code class="Er">ENOENT</code>]</dt>
- <dd>No DMA translation matching the requested address width and translation
- flags is available.</dd>
-</dl>
-<p class="Pp">If fetching the requested DMA address translation otherwise fails,
- an appropriate error code will be returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interrupt Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_get_intr_ivec</code>() function returns
- 0 on success, or <code class="Er">ENXIO</code> if the requested interrupt
- line exceeds the number of interrupt lines assigned to the device.</p>
-<p class="Pp">The <code class="Fn">bhnd_map_intr</code>() function returns 0 on
- success, otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">NVRAM Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_nvram_getvar</code>(),
- <code class="Fn">bhnd_nvram_getvar_array</code>(),
- <code class="Fn">bhnd_nvram_getvar_int</code>(),
- <code class="Fn">bhnd_nvram_getvar_int8</code>(),
- <code class="Fn">bhnd_nvram_getvar_int16</code>(),
- <code class="Fn">bhnd_nvram_getvar_int32</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint8</code>(),
- <code class="Fn">bhnd_nvram_getvar_uint16</code>(), and
- <code class="Fn">bhnd_nvram_getvar_uint32</code>() functions return 0 on
- success, or one of the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">ENODEV</code>]</dt>
- <dd>If an NVRAM provider has not been registered with the bus.</dd>
- <dt>[<code class="Er">ENOENT</code>]</dt>
- <dd>The requested variable was not found.</dd>
- <dt>[<code class="Er">ENOMEM</code>]</dt>
- <dd>If the buffer of size is too small to hold the requested value.</dd>
- <dt>[<code class="Er">EOPNOTSUPP</code>]</dt>
- <dd>If the value's native type is incompatible with and cannot be coerced to
- the requested type.</dd>
- <dt>[<code class="Er">ERANGE</code>]</dt>
- <dd>If value coercion would overflow (or underflow) the requested type</dd>
-</dl>
-<p class="Pp">If reading the variable otherwise fails, an appropriate error code
- will be returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Port/Region Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_decode_port_rid</code>() function
- returns 0 on success, or an appropriate error code if no matching
- port/region is found.</p>
-<p class="Pp">The <code class="Fn">bhnd_get_port_rid</code>() function returns
- the resource ID for the requested port and region, or -1 if the port or
- region are invalid, or do not have an assigned resource ID.</p>
-<p class="Pp">The <code class="Fn">bhnd_get_region_addr</code>() function
- returns 0 on success, or an appropriate error code if no matching
- port/region is found.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="PMU_Functions"><a class="permalink" href="#PMU_Functions">PMU
- Functions</a></h2>
-<p class="Pp">The <code class="Fn">bhnd_alloc_pmu</code>() function returns 0 on
- success, otherwise an appropriate error code is returned.</p>
-<p class="Pp">The <code class="Fn">bhnd_release_pmu</code>() function returns 0
- on success, otherwise an appropriate error code is returned, and the core
- state will be left unmodified.</p>
-<p class="Pp">The <code class="Fn">bhnd_enable_clocks</code>() and
- <code class="Fn">bhnd_request_clock</code>() functions return 0 on success,
- or one of the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">ENODEV</code>]</dt>
- <dd>An unsupported clock was requested.</dd>
- <dt>[<code class="Er">ENXIO</code>]</dt>
- <dd>No PMU or PWRCTL provider has been registered with the bus.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">bhnd_get_clock_freq</code>() function returns
- 0 on success, or <code class="Er">ENODEV</code> if the frequency for the
- specified clock is not available.</p>
-<p class="Pp">The <code class="Fn">bhnd_get_clock_latency</code>() function
- returns 0 on success, or <code class="Er">ENODEV</code> if the transition
- latency for the specified clock is not available.</p>
-<p class="Pp">The <code class="Fn">bhnd_request_ext_rsrc</code>() and
- <code class="Fn">bhnd_release_ext_rsrc</code>() functions return 0 on
- success, otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Service Provider Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_register_provider</code>() function
- returns 0 on success, <code class="Er">EEXIST</code> if an entry for service
- already exists, or an appropriate error code if service registration
- otherwise fails.</p>
-<p class="Pp">The <code class="Fn">bhnd_deregister_provider</code>() function
- returns 0 on success, or <code class="Er">EBUSY</code> if active references
- to the service provider exist.</p>
-<p class="Pp">The <code class="Fn">bhnd_retain_provider</code>() function
- returns a pointer to <var class="Vt">device_t</var> on success, a null
- pointer if the requested provider is not registered.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Utility Functions</h2>
-<p class="Pp">The <code class="Fn">bhnd_format_chip_id</code>() function returns
- the total number of bytes written on success, or a negative integer on
- failure.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bhnd(4)</a>, <a class="Xr">bhnd_erom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bhnd</code> driver programming interface and
- this manual page were written by <span class="An">Landon Fuller</span>
- &lt;<a class="Mt" href="mailto:landonf@FreeBSD.org">landonf@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 26, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bhnd_erom.9 3.html b/static/freebsd/man9/bhnd_erom.9 3.html
deleted file mode 100644
index cd4de85c..00000000
--- a/static/freebsd/man9/bhnd_erom.9 3.html
+++ /dev/null
@@ -1,355 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BHND_EROM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BHND_EROM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bhnd_erom</code>,
- <code class="Nm">bhnd_erom_alloc</code>,
- <code class="Nm">bhnd_erom_dump</code>,
- <code class="Nm">bhnd_erom_fini_static</code>,
- <code class="Nm">bhnd_erom_free</code>,
- <code class="Nm">bhnd_erom_free_core_table</code>,
- <code class="Nm">bhnd_erom_get_core_table</code>,
- <code class="Nm">bhnd_erom_init_static</code>,
- <code class="Nm">bhnd_erom_io</code>,
- <code class="Nm">bhnd_erom_io_fini</code>,
- <code class="Nm">bhnd_erom_io_map</code>,
- <code class="Nm">bhnd_erom_io_read</code>,
- <code class="Nm">bhnd_erom_iobus_init</code>,
- <code class="Nm">bhnd_erom_iores_new</code>,
- <code class="Nm">bhnd_erom_lookup_core</code>,
- <code class="Nm">bhnd_erom_lookup_core_addr</code>,
- <code class="Nm">bhnd_erom_probe</code>,
- <code class="Nm">bhnd_erom_probe_driver_classes</code> &#x2014;
- <span class="Nd">BHND device enumeration table parsing</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/bhnd/bhnd.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/bhnd/bhnd_erom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">typedef struct bhnd_erom bhnd_erom_t</var>;
- <br/>
- <var class="Vt">typedef struct kobj_class bhnd_erom_class_t</var>;
- <br/>
- <var class="Vt">typedef struct bhnd_erom_static bhnd_erom_static_t</var>;</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_probe</code>(<var class="Fa">bhnd_erom_class_t
- *cls</var>, <var class="Fa">struct bhnd_erom_io *eio</var>,
- <var class="Fa">const struct bhnd_chipid *hint</var>, <var class="Fa">struct
- bhnd_chipid *cid</var>);</p>
-<p class="Pp"><var class="Ft">bhnd_erom_class_t *</var>
- <br/>
- <code class="Fn">bhnd_erom_probe_driver_classes</code>(<var class="Fa">devclass_t
- bus_devclass</var>, <var class="Fa">struct bhnd_erom_io *eio</var>,
- <var class="Fa">const struct bhnd_chipid *hint</var>, <var class="Fa">struct
- bhnd_chipid *cid</var>);</p>
-<p class="Pp"><var class="Ft">bhnd_erom_t *</var>
- <br/>
- <code class="Fn">bhnd_erom_alloc</code>(<var class="Fa">bhnd_erom_class_t
- *cls</var>, <var class="Fa">const struct bhnd_chipid *cid</var>,
- <var class="Fa">struct bhnd_erom_io *eio</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_erom_free</code>(<var class="Fa">bhnd_erom_t
- *erom</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_init_static</code>(<var class="Fa">bhnd_erom_class_t
- *cls</var>, <var class="Fa">bhnd_erom_t *erom</var>, <var class="Fa">size_t
- esize</var>, <var class="Fa">const struct bhnd_chipid *cid</var>,
- <var class="Fa">struct bhnd_erom_io *eio</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_erom_fini_static</code>(<var class="Fa">bhnd_erom_t
- *erom</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_dump</code>(<var class="Fa">bhnd_erom_t
- *erom</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_get_core_table</code>(<var class="Fa">bhnd_erom_t
- *erom</var>, <var class="Fa">struct bhnd_core_info **cores</var>,
- <var class="Fa">u_int *num_cores</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_erom_free_core_table</code>(<var class="Fa">bhnd_erom_t
- *erom</var>, <var class="Fa">struct bhnd_core_info *cores</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_lookup_core</code>(<var class="Fa">bhnd_erom_t
- *erom</var>, <var class="Fa">const struct bhnd_core_match *desc</var>,
- <var class="Fa">struct bhnd_core_info *core</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_lookup_core_addr</code>(<var class="Fa">bhnd_erom_t
- *erom</var>, <var class="Fa">const struct bhnd_core_match *desc</var>,
- <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int port</var>,
- <var class="Fa">u_int region</var>, <var class="Fa">struct bhnd_core_info
- *core</var>, <var class="Fa">bhnd_addr_t *addr</var>,
- <var class="Fa">bhnd_size_t *size</var>);</p>
-<section class="Ss">
-<h2 class="Ss">Bus Space I/O</h2>
-<p class="Pp"><var class="Ft">struct bhnd_erom_io *</var>
- <br/>
- <code class="Fn">bhnd_erom_iores_new</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int rid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_iobus_init</code>(<var class="Fa">struct
- bhnd_erom_iobus *iobus</var>, <var class="Fa">bhnd_addr_t addr</var>,
- <var class="Fa">bhnd_size_t size</var>, <var class="Fa">bus_space_tag_t
- bst</var>, <var class="Fa">bus_space_handle_t bsh</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bhnd_erom_io_fini</code>(<var class="Fa">struct bhnd_erom_io
- *eio</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bhnd_erom_io_map</code>(<var class="Fa">struct bhnd_erom_io
- *eio</var>, <var class="Fa">bhnd_addr_t addr</var>,
- <var class="Fa">bhnd_size_t size</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bhnd_erom_io_read</code>(<var class="Fa">struct bhnd_erom_io
- *eio</var>, <var class="Fa">bhnd_size_t offset</var>, <var class="Fa">u_int
- width</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/bhnd/bhnd_eromvar.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>struct bhnd_erom_io {
- bhnd_erom_io_map_t *map;
- bhnd_erom_io_read_t *read;
- bhnd_erom_io_fini_t *fini;
-};</pre>
-</div>
-<br/>
-<var class="Ft">typedef int</var>
-<br/>
-<code class="Fn">(bhnd_erom_io_map_t)</code>(<var class="Fa">struct bhnd_erom_io
- *eio</var>, <var class="Fa">bhnd_addr_t addr</var>,
- <var class="Fa">bhnd_size_t size</var>);
-<p class="Pp"><var class="Ft">typedef uint32_t</var>
- <br/>
- <code class="Fn">(bhnd_erom_io_read_t)</code>(<var class="Fa">struct
- bhnd_erom_io *eio</var>, <var class="Fa">bhnd_size_t offset</var>,
- <var class="Fa">u_int width</var>);</p>
-<p class="Pp"><var class="Ft">typedef void</var>
- <br/>
- <code class="Fn">(bhnd_erom_io_fini_t)</code>(<var class="Fa">struct
- bhnd_erom_io *eio</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">bhnd_erom</code> framework provides a common
- parser interface to the BHND device enumeration table formats supported by
- <a class="Xr">bhnd(4)</a> bus drivers.</p>
-<p class="Pp" id="bhnd_erom_probe">The
- <a class="permalink" href="#bhnd_erom_probe"><code class="Fn">bhnd_erom_probe</code></a>()
- function is used to identify a <a class="Xr">bhnd(4)</a> bus device and
- determine whether the erom class <var class="Fa">cls</var> is capable of
- parsing its device enumeration table. If successful, the probed chip
- identification is written to the location pointed to by
- <var class="Fa">cid</var>.</p>
-<p class="Pp" id="bhnd_erom_io_map">A pointer to a bus I/O instance mapping the
- device registers of the first hardware core must be provided using the
- <var class="Fa">eio</var> argument. The registers can be mapped using
- <a class="permalink" href="#bhnd_erom_io_map"><code class="Fn">bhnd_erom_io_map</code></a>().</p>
-<p class="Pp">On devices that do not provide standard
- <a class="Xr">bhnd_chipc(4)</a> chip identification registers via the first
- hardware core, a pointer to chip information for the device must be
- specified using the <var class="Fa">hint</var> argument. Otherwise, the
- <var class="Fa">hint</var> argument should be
- <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="bhnd_erom_probe_driver_classes">The
- <a class="permalink" href="#bhnd_erom_probe_driver_classes"><code class="Fn">bhnd_erom_probe_driver_classes</code></a>()
- function is a convenience wrapper for
- <code class="Fn">bhnd_erom_probe</code>(). This function will iterate over
- all drivers instances in the device class
- <var class="Fa">bus_devclass</var>, using
- <a class="Xr">bhnd_driver_get_erom_class(9)</a> to fetch each driver's erom
- class and probe the hardware core mapped by <var class="Fa">eio</var>. A
- pointer to the erom class with the highest probe priority is returned on
- success. If there are no successful probe results from the erom classes,
- <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="bhnd_erom_alloc">The
- <a class="permalink" href="#bhnd_erom_alloc"><code class="Fn">bhnd_erom_alloc</code></a>()
- function allocates and returns a new parser instance of the device
- enumeration class <var class="Fa">cls</var> for the chip identified by
- <var class="Fa">cid</var>, using the bus I/O instance
- <var class="Fa">eio</var> to map and read the device table. On success, the
- returned <var class="Vt">bhnd_erom_t</var> assumes ownership of
- <var class="Fa">eio</var>.</p>
-<p class="Pp" id="bhnd_erom_free">The
- <a class="permalink" href="#bhnd_erom_free"><code class="Fn">bhnd_erom_free</code></a>()
- function releases all resources held by an erom parser successfully
- allocated using <code class="Fn">bhnd_erom_alloc</code>().</p>
-<p class="Pp" id="bhnd_erom_init_static">Clients can manage the allocation of
- memory themselves with
- <a class="permalink" href="#bhnd_erom_init_static"><code class="Fn">bhnd_erom_init_static</code></a>().
- This is useful in cases like performing device enumeration before
- <a class="Xr">malloc(9)</a> initialization.
- <code class="Fn">bhnd_erom_init_static</code>() is called with
- <var class="Fa">erom</var> set to a pointer to the memory for the instance,
- and the total available bytes in <var class="Fa">esize</var>.</p>
-<p class="Pp">The <var class="Vt">bhnd_erom_static</var> structure is large
- enough to statically allocate any supported parser class instance state.
- Pointers to a <var class="Vt">bhnd_erom_static</var> structure can be cast
- to <var class="Vt">bhnd_erom_t</var>.</p>
-<p class="Pp" id="bhnd_erom_fini_static">The
- <a class="permalink" href="#bhnd_erom_fini_static"><code class="Fn">bhnd_erom_fini_static</code></a>()
- function releases all resources held by an erom parser successfully
- initialized using <code class="Fn">bhnd_erom_init_static</code>().</p>
-<p class="Pp" id="bhnd_erom_dump">The
- <a class="permalink" href="#bhnd_erom_dump"><code class="Fn">bhnd_erom_dump</code></a>()
- function enumerates and prints all device table entries in
- <var class="Fa">erom</var>.</p>
-<p class="Pp" id="bhnd_erom_get_core_table">The
- <a class="permalink" href="#bhnd_erom_get_core_table"><code class="Fn">bhnd_erom_get_core_table</code></a>()
- function enumerates all device table entries in <var class="Fa">erom</var>,
- returning a table of core information structures in
- <var class="Fa">cores</var> and the count in
- <var class="Fa">num_cores</var>. The memory allocated for the table must be
- freed using <code class="Fn">bhnd_erom_free_core_table</code>().</p>
-<p class="Pp" id="bhnd_erom_free_core_table">The
- <a class="permalink" href="#bhnd_erom_free_core_table"><code class="Fn">bhnd_erom_free_core_table</code></a>()
- function frees any memory allocated in a previous call to
- <code class="Fn">bhnd_erom_get_core_table</code>().</p>
-<p class="Pp" id="bhnd_erom_lookup_core">The
- <a class="permalink" href="#bhnd_erom_lookup_core"><code class="Fn">bhnd_erom_lookup_core</code></a>()
- function locates the first device table entry in <var class="Fa">erom</var>
- that matches core match descriptor <var class="Fa">desc</var>, writing the
- core information of the matching entry to <var class="Fa">core</var>.</p>
-<p class="Pp" id="bhnd_erom_lookup_core_addr">The
- <a class="permalink" href="#bhnd_erom_lookup_core_addr"><code class="Fn">bhnd_erom_lookup_core_addr</code></a>()
- function locates the first device table entry in <var class="Fa">erom</var>
- that matches core match descriptor <var class="Fa">desc</var>, fetching the
- base address and size of the memory region <var class="Fa">region</var>
- mapped to the port <var class="Fa">port</var> of type
- <var class="Fa">type</var>. On success, the core information of the matching
- entry is written to <var class="Fa">core</var>, the base address of the port
- region is written to <var class="Fa">addr</var>, and the total size of the
- port region is written to <var class="Fa">size</var>. If the core
- information is not desired, set <var class="Fa">core</var> to
- <code class="Dv">NULL</code>.</p>
-<section class="Ss">
-<h2 class="Ss">Bus Space I/O</h2>
-<p class="Pp">The <var class="Vt">bhnd_erom_io</var> structure provides a set of
- I/O callbacks used by <code class="Nm">bhnd_erom</code> to map and read the
- device enumeration table. Clients may either use the existing
- <code class="Fn">bhnd_erom_iores_new</code>() or
- <code class="Fn">bhnd_erom_iobus_init</code>() functions to allocate a bus
- I/O instance, or implement the <var class="Vt">bhnd_erom_io</var> callbacks
- directly.</p>
-<p class="Pp">The <var class="Vt">bhnd_erom_io</var> structure contains these
- required fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="bhnd_erom_io_map~2"><var class="Fa">map</var></dt>
- <dd>A function implementing
- <a class="permalink" href="#bhnd_erom_io_map~2"><code class="Fn">bhnd_erom_io_map</code></a>().</dd>
- <dt><var class="Fa">read</var></dt>
- <dd>A function implementing <code class="Fn">bhnd_erom_io_read</code>().</dd>
- <dt><var class="Fa">fini</var></dt>
- <dd>A function implementing <code class="Fn">bhnd_erom_io_fini</code>().</dd>
-</dl>
-</div>
-<p class="Pp" id="bhnd_erom_iores_new">The
- <a class="permalink" href="#bhnd_erom_iores_new"><code class="Fn">bhnd_erom_iores_new</code></a>()
- function allocates and returns a new bus I/O instance that will perform
- mapping by using <a class="Xr">bhnd_alloc_resource(9)</a> to allocate
- <code class="Dv">SYS_RES_MEMORY</code> bus resources on demand from the
- device <var class="Fa">dev</var> using a resource ID of
- <var class="Fa">rid</var>.</p>
-<p class="Pp" id="bhnd_erom_iobus_init">The
- <a class="permalink" href="#bhnd_erom_iobus_init"><code class="Fn">bhnd_erom_iobus_init</code></a>()
- function initializes a caller-allocated bus I/O instance
- <var class="Fa">iobus</var> that will perform bus I/O using the bus space
- tag <var class="Fa">bst</var> and handle <var class="Fa">bsh</var>. The base
- address and total size mapped by <var class="Fa">bsh</var> should be
- specified using the <var class="Fa">addr</var> and
- <var class="Fa">size</var> arguments.</p>
-<p class="Pp" id="bhnd_erom_io_fini">The
- <a class="permalink" href="#bhnd_erom_io_fini"><code class="Fn">bhnd_erom_io_fini</code></a>()
- function frees all resources held by the bus I/O instance
- <var class="Fa">eio</var>.</p>
-<p class="Pp" id="bhnd_erom_io_map~3">The
- <a class="permalink" href="#bhnd_erom_io_map~3"><code class="Fn">bhnd_erom_io_map</code></a>()
- function is used to request that the bus I/O instance
- <var class="Fa">eio</var> map <a class="Xr">bhnd(4)</a> bus space at bus
- address <var class="Fa">addr</var> with a mapping of size
- <var class="Fa">size</var>.</p>
-<p class="Pp" id="bhnd_erom_io_read">The
- <a class="permalink" href="#bhnd_erom_io_read"><code class="Fn">bhnd_erom_io_read</code></a>()
- function is used to read a data item of <var class="Fa">width</var> bytes
- from the bus I/O instance <var class="Fa">eio</var> at
- <var class="Fa">offset</var>, relative to the bus address previously mapped
- using <code class="Fn">bhnd_erom_io_map</code>().</p>
-<p class="Pp">The <var class="Fa">width</var> must be one of 1, 2, or 4
- bytes.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">bhnd_erom_probe</code>() function returns a
- standard <a class="Xr">DEVICE_PROBE(9)</a> result.</p>
-<p class="Pp">A return value equal to or less than zero indicates success.
- Values greater than zero indicates an error, and will be an appropriate
- error code. For values less than or equal to zero, the erom class returning
- the highest value should be used to parse the erom table.
- <code class="Er">ENXIO</code> is returned if the device is not supported by
- the parser.</p>
-<p class="Pp">The <code class="Fn">bhnd_erom_probe_driver_classes</code>()
- function returns a pointer to the probed
- <var class="Vt">bhnd_erom_class_t</var> instance on success, a null pointer
- otherwise.</p>
-<p class="Pp">The <code class="Fn">bhnd_erom_alloc</code>() function returns a
- pointer to <var class="Vt">bhnd_erom_t</var> on success, or
- <code class="Dv">NULL</code> if an error occurred allocating or initializing
- the EROM parser.</p>
-<p class="Pp">The <code class="Fn">bhnd_erom_init_static</code>() function
- returns 0 on success, <code class="Er">ENOMEM</code> if the allocation size
- is smaller than required by the erom class, or an appropriate error code if
- initialization otherwise fails.</p>
-<p class="Pp">The <code class="Fn">bhnd_erom_lookup_core</code>() function
- returns 0 on success, <code class="Er">ENOENT</code> if no matching core is
- found, or an appropriate error code if parsing the device table otherwise
- fails.</p>
-<p class="Pp">The <code class="Fn">bhnd_erom_dump</code>(),
- <code class="Fn">bhnd_erom_get_core_table</code>(),
- <code class="Fn">bhnd_erom_iobus_init</code>(),
- <code class="Fn">bhnd_erom_io_map</code>(), functions return 0 on success,
- otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bhnd(4)</a>, <a class="Xr">bhnd(9)</a>,
- <a class="Xr">bhnd_alloc_resource(9)</a>,
- <a class="Xr">bhnd_driver_get_erom_class(9)</a>,
- <a class="Xr">bus_space(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bhnd_erom</code> framework and this manual
- page were written by <span class="An">Landon Fuller</span>
- &lt;<a class="Mt" href="mailto:landonf@FreeBSD.org">landonf@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 9, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bios.9 3.html b/static/freebsd/man9/bios.9 3.html
deleted file mode 100644
index 59c484bb..00000000
--- a/static/freebsd/man9/bios.9 3.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BIOS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BIOS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bios_sigsearch</code>,
- <code class="Nm">bios32_SDlookup</code>, <code class="Nm">bios32</code>,
- <code class="Nm">bios_oem_strings</code> &#x2014; <span class="Nd">interact
- with PC BIOS</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/pc/bios.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bios_sigsearch</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- start</var>, <var class="Fa" style="white-space: nowrap;">u_char *sig</var>,
- <var class="Fa" style="white-space: nowrap;">int siglen</var>,
- <var class="Fa" style="white-space: nowrap;">int paralen</var>,
- <var class="Fa" style="white-space: nowrap;">int sigofs</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bios32_SDlookup</code>(<var class="Fa" style="white-space: nowrap;">struct
- bios32_SDentry *ent</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bios32</code>(<var class="Fa" style="white-space: nowrap;">struct
- bios_regs *br</var>, <var class="Fa" style="white-space: nowrap;">u_int
- offset</var>, <var class="Fa" style="white-space: nowrap;">u_short
- segment</var>);</p>
-<p class="Pp"><code class="Fn">BIOS_PADDRTOVADDR</code>(<var class="Fa" style="white-space: nowrap;">addr</var>);</p>
-<p class="Pp"><code class="Fn">BIOS_VADDRTOPADDR</code>(<var class="Fa" style="white-space: nowrap;">addr</var>);</p>
-<p class="Pp"><var class="Vt">extern struct bios32_SDentry PCIbios</var>;
- <br/>
- <var class="Vt">extern struct SMBIOS_table SMBIOStable</var>;
- <br/>
- <var class="Vt">extern struct DMI_table DMItable</var>;</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bios_oem_strings</code>(<var class="Fa" style="white-space: nowrap;">struct
- bios_oem *oem</var>, <var class="Fa" style="white-space: nowrap;">u_char
- *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t
- maxlen</var>);</p>
-<div class="Bd Pp Li">
-<pre>struct bios_oem_signature {
- char * anchor; /* search anchor string in BIOS memory */
- size_t offset; /* offset from anchor (may be negative) */
- size_t totlen; /* total length of BIOS string to copy */
-};
-struct bios_oem_range {
- u_int from; /* shouldn't be below 0xe0000 */
- u_int to; /* shouldn't be above 0xfffff */
-};
-struct bios_oem {
- struct bios_oem_range range;
- struct bios_oem_signature signature[];
-};</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions provide a general-purpose interface for dealing
- with the BIOS functions and data encountered on x86 PC-architecture
- systems.</p>
-<dl class="Bl-tag">
- <dt id="bios_sigsearch"><a class="permalink" href="#bios_sigsearch"><code class="Fn">bios_sigsearch</code></a>()</dt>
- <dd>Searches the BIOS address space for a service signature, usually an
- uppercase ASCII sequence surrounded by underscores. The search begins at
- <var class="Fa">start</var>, or at the beginning of the BIOS if
- <var class="Fa">start</var> is zero. <var class="Fa">siglen</var> bytes of
- the BIOS image and <var class="Fa">sig</var> are compared at
- <var class="Fa">sigofs</var> bytes offset from the current location. If no
- match is found, the current location is incremented by
- <var class="Fa">paralen</var> bytes and the search repeated. If the
- signature is found, its effective physical address is returned. If no
- signature is found, zero is returned.</dd>
- <dt id="bios_oem_strings"><a class="permalink" href="#bios_oem_strings"><code class="Fn">bios_oem_strings</code></a>()</dt>
- <dd>Searches a given BIOS memory range for one or more strings, and composes a
- printable concatenation of those found. The routine expects a structure
- describing the BIOS address <var class="Fa">range</var> (within
- <code class="Li">0xe0000</code> - <code class="Li">0xfffff</code>), and a
- { <code class="Dv">NULL</code>, <code class="Li">0</code>,
- <code class="Li">0</code> } -terminated array of
- <var class="Vt">bios_oem_signature</var> structures which define the
- <var class="Va">anchor</var> string, an <var class="Va">offset</var> from
- the beginning of the match (which may be negative), and
- <var class="Va">totlen</var> number of bytes to be collected from BIOS
- memory starting at that offset. Unmatched anchors are ignored, whereas
- matches are copied from BIOS memory starting at their corresponding
- <var class="Vt">offset</var> with unprintable characters being replaced
- with space, and consecutive spaces being suppressed. This composed string
- is stored in <var class="Fa">buffer</var> up to the given
- <var class="Fa">maxlen</var> bytes (including trailing
- &#x2018;<code class="Li">\0</code>&#x2019;, and any trailing space
- suppressed). If an error is encountered, i.e. trying to read out of said
- BIOS range, other invalid input, or <var class="Fa">buffer</var> overflow,
- a negative integer is returned, otherwise the length of the composed
- string is returned. In particular, a return value of 0 means that none of
- the given anchor strings were found in the specified BIOS memory
- range.</dd>
- <dt id="BIOS_VADDRTOPADDR"><a class="permalink" href="#BIOS_VADDRTOPADDR"><code class="Fn">BIOS_VADDRTOPADDR</code></a>()</dt>
- <dd>Returns the effective physical address which corresponds to the kernel
- virtual address <var class="Fa">addr</var>.</dd>
- <dt id="BIOS_PADDRTOVADDR"><a class="permalink" href="#BIOS_PADDRTOVADDR"><code class="Fn">BIOS_PADDRTOVADDR</code></a>()</dt>
- <dd>Returns the kernel virtual address which corresponds to the effective
- physical address <var class="Fa">addr</var>.</dd>
- <dt>SMBIOStable</dt>
- <dd>If not NULL, points to a <var class="Ft">struct SMBIOS_table</var>
- structure containing information read from the System Management BIOS
- table during system startup.</dd>
- <dt>DMItable</dt>
- <dd>If not NULL, points to a <var class="Ft">struct DMI_table</var> structure
- containing information read from the Desktop Management Interface
- parameter table during system startup.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BIOS32"><a class="permalink" href="#BIOS32">BIOS32</a></h1>
-<p class="Pp">At system startup, the BIOS is scanned for the BIOS32 Service
- Directory (part of the PCI specification), and the existence of the
- directory is recorded. This can then be used to locate other services.</p>
-<dl class="Bl-tag">
- <dt id="bios32_SDlookup"><a class="permalink" href="#bios32_SDlookup"><code class="Fn">bios32_SDlookup</code></a>()</dt>
- <dd>Attempts to locate the BIOS32 service matching the 4-byte identifier
- passed in the <var class="Fa">ident</var> field of the
- <var class="Fa">ent</var> argument.</dd>
- <dt id="bios32"><a class="permalink" href="#bios32"><code class="Fn">bios32</code></a>()</dt>
- <dd>Calls a bios32 function. This presumes that the function is capable of
- working within the kernel segment (normally the case). The virtual address
- of the entrypoint is supplied in <var class="Fa">entry</var> and the
- register arguments to the function are supplied in
- <var class="Fa">args</var>.</dd>
- <dt>PCIbios</dt>
- <dd>If not NULL, points to a <var class="Ft">struct bios32_SDentry</var>
- structure describing the PCI BIOS entrypoint which was found during system
- startup.</dd>
-</dl>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 9, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bitset.9 3.html b/static/freebsd/man9/bitset.9 3.html
deleted file mode 100644
index f0a617ef..00000000
--- a/static/freebsd/man9/bitset.9 3.html
+++ /dev/null
@@ -1,487 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BITSET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BITSET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bitset(9)</code> &#x2014;
- <code class="Nm">BITSET_DEFINE</code>,
- <code class="Nm">BITSET_T_INITIALIZER</code>,
- <code class="Nm">BITSET_FSET</code>, <code class="Nm">BIT_CLR</code>,
- <code class="Nm">BIT_COPY</code>, <code class="Nm">BIT_ISSET</code>,
- <code class="Nm">BIT_SET</code>, <code class="Nm">BIT_ZERO</code>,
- <code class="Nm">BIT_FILL</code>, <code class="Nm">BIT_SETOF</code>,
- <code class="Nm">BIT_EMPTY</code>, <code class="Nm">BIT_ISFULLSET</code>,
- <code class="Nm">BIT_FFS</code>, <code class="Nm">BIT_FFS_AT</code>,
- <code class="Nm">BIT_FLS</code>, <code class="Nm">BIT_FOREACH_ISSET</code>,
- <code class="Nm">BIT_FOREACH_ISCLR</code>,
- <code class="Nm">BIT_COUNT</code>, <code class="Nm">BIT_SUBSET</code>,
- <code class="Nm">BIT_OVERLAP</code>, <code class="Nm">BIT_CMP</code>,
- <code class="Nm">BIT_OR</code>, <code class="Nm">BIT_OR2</code>,
- <code class="Nm">BIT_ORNOT</code>, <code class="Nm">BIT_ORNOT2</code>,
- <code class="Nm">BIT_AND</code>, <code class="Nm">BIT_AND2</code>,
- <code class="Nm">BIT_ANDNOT</code>, <code class="Nm">BIT_ANDNOT2</code>,
- <code class="Nm">BIT_XOR</code>, <code class="Nm">BIT_XOR2</code>,
- <code class="Nm">BIT_CLR_ATOMIC</code>,
- <code class="Nm">BIT_SET_ATOMIC</code>,
- <code class="Nm">BIT_SET_ATOMIC_ACQ</code>,
- <code class="Nm">BIT_TEST_SET_ATOMIC</code>,
- <code class="Nm">BIT_TEST_CLR_ATOMIC</code>,
- <code class="Nm">BIT_AND_ATOMIC</code>,
- <code class="Nm">BIT_OR_ATOMIC</code>,
- <code class="Nm">BIT_COPY_STORE_REL</code> &#x2014; <span class="Nd">bitset
- manipulation macros</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/_bitset.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bitset.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">BITSET_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">STRUCTNAME</var>,
- <var class="Fa" style="white-space: nowrap;">const SETSIZE</var>);</p>
-<p class="Pp"><code class="Fn">BITSET_T_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">ARRAY_CONTENTS</var>);</p>
-<p class="Pp"><code class="Fn">BITSET_FSET</code>(<var class="Fa" style="white-space: nowrap;">N_WORDS</var>);</p>
-<p class="Pp"><code class="Fn">BIT_CLR</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_COPY</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *from</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *to</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_ISSET</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_SET</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_ZERO</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_FILL</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_SETOF</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_ISFULLSET</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">BIT_FFS</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">BIT_FFS_AT</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>, <var class="Fa" style="white-space: nowrap;">long
- start</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">BIT_FLS</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_FOREACH_ISSET</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">size_t bit</var>, <var class="Fa">const
- struct STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_FOREACH_ISCLR</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">size_t bit</var>, <var class="Fa">const
- struct STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">BIT_COUNT</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *bitset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_SUBSET</code>(<var class="Fa">const SETSIZE</var>,
- <var class="Fa">struct STRUCTNAME *haystack</var>, <var class="Fa">struct
- STRUCTNAME *needle</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_OVERLAP</code>(<var class="Fa">const SETSIZE</var>,
- <var class="Fa">struct STRUCTNAME *bitset1</var>, <var class="Fa">struct
- STRUCTNAME *bitset2</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_CMP</code>(<var class="Fa">const SETSIZE</var>,
- <var class="Fa">struct STRUCTNAME *bitset1</var>, <var class="Fa">struct
- STRUCTNAME *bitset2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_OR</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_OR2</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct
- STRUCTNAME *src2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_ORNOT</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_ORNOT2</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct
- STRUCTNAME *src2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_AND</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_AND2</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct
- STRUCTNAME *src2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_ANDNOT</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_ANDNOT2</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct
- STRUCTNAME *src2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_XOR</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct
- STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_XOR2</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct
- STRUCTNAME *src2</var>);</p>
-<p class="Pp"><code class="Fn">BIT_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_SET_ATOMIC_ACQ</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_TEST_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">BIT_TEST_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const
- SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t
- bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME
- *bitset</var>);</p>
-<p class="Pp"><code class="Fn">BIT_AND_ATOMIC</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_OR_ATOMIC</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>,
- <var class="Fa">struct STRUCTNAME *src</var>);</p>
-<p class="Pp"><code class="Fn">BIT_COPY_STORE_REL</code>(<var class="Fa">const
- SETSIZE</var>, <var class="Fa">struct STRUCTNAME *from</var>,
- <var class="Fa">struct STRUCTNAME *to</var>);</p>
-<p class="Pp"><code class="Fd">#define _WANT_FREEBSD_BITSET</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">bitset(9)</code> family of macros provide a
- flexible and efficient bitset implementation if the maximum size of the set
- is known at compilation. Throughout this manual page, the name
- <var class="Fa">SETSIZE</var> refers to the size of the bitset in bits.
- Individual bits in bitsets are referenced with indices zero through
- <var class="Fa">SETSIZE - 1</var>. One example use of
- <code class="In">&lt;<a class="In">sys/bitset.h</a>&gt;</code> is
- <code class="In">&lt;<a class="In">sys/cpuset.h</a>&gt;</code>.</p>
-<p class="Pp">These macros are meant to be used in the kernel and are visible if
- <code class="Dv">_KERNEL is defined when</code>
- <code class="In">&lt;<a class="In">sys/_bitset.h</a>&gt;</code> or
- <code class="In">&lt;<a class="In">sys/bitset.h</a>&gt;</code> are included
- in a program. Userland programs must define
- <code class="Dv">_WANT_FREEBSD_BITSET</code> before including these files to
- make the macros visible.</p>
-<p class="Pp" id="BITSET_DEFINE">The
- <a class="permalink" href="#BITSET_DEFINE"><code class="Fn">BITSET_DEFINE</code></a>()
- macro defines a bitset struct <var class="Fa">STRUCTNAME</var> with room to
- represent <var class="Fa">SETSIZE</var> bits.</p>
-<p class="Pp" id="BITSET_T_INITIALIZER">The
- <a class="permalink" href="#BITSET_T_INITIALIZER"><code class="Fn">BITSET_T_INITIALIZER</code></a>()
- macro allows one to initialize a bitset struct with a compile time literal
- value.</p>
-<p class="Pp" id="BITSET_FSET">The
- <a class="permalink" href="#BITSET_FSET"><code class="Fn">BITSET_FSET</code></a>()
- macro generates a compile time literal, usable by
- <code class="Fn">BITSET_T_INITIALIZER</code>(), representing a full bitset
- (all bits set). For examples of
- <code class="Fn">BITSET_T_INITIALIZER</code>() and
- <code class="Fn">BITSET_FSET</code>() usage, see the
- <a class="Sx" href="#BITSET_T_INITIALIZER_EXAMPLE">BITSET_T_INITIALIZER
- EXAMPLE</a> section. The <var class="Fa">N_WORDS</var> parameter to
- <code class="Fn">BITSET_FSET</code>() should be:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>__bitset_words(SETSIZE)</pre>
-</div>
-<p class="Pp" id="BIT_CLR">The
- <a class="permalink" href="#BIT_CLR"><code class="Fn">BIT_CLR</code></a>()
- macro clears bit <var class="Fa">bit</var> in the bitset pointed to by
- <var class="Fa">bitset</var>. The
- <a class="permalink" href="#BIT_CLR_ATOMIC"><code class="Fn" id="BIT_CLR_ATOMIC">BIT_CLR_ATOMIC</code></a>()
- macro is identical, but the bit is cleared atomically. The
- <a class="permalink" href="#BIT_TEST_CLR_ATOMIC"><code class="Fn" id="BIT_TEST_CLR_ATOMIC">BIT_TEST_CLR_ATOMIC</code></a>()
- macro atomically clears the bit and returns whether it was set.</p>
-<p class="Pp" id="BIT_COPY">The
- <a class="permalink" href="#BIT_COPY"><code class="Fn">BIT_COPY</code></a>()
- macro copies the contents of the bitset <var class="Fa">from</var> to the
- bitset <var class="Fa">to</var>.
- <a class="permalink" href="#BIT_COPY_STORE_REL"><code class="Fn" id="BIT_COPY_STORE_REL">BIT_COPY_STORE_REL</code></a>()
- is similar, but copies component machine words from
- <var class="Fa">from</var> and writes them to <var class="Fa">to</var> with
- atomic store with release semantics. (That is, if <var class="Fa">to</var>
- is composed of multiple machine words,
- <code class="Fn">BIT_COPY_STORE_REL</code>() performs multiple individually
- atomic operations.)</p>
-<p class="Pp" id="BIT_ISSET">The
- <a class="permalink" href="#BIT_ISSET"><code class="Fn">BIT_ISSET</code></a>()
- macro returns <code class="Dv">true</code> if the bit
- <var class="Fa">bit</var> in the bitset pointed to by
- <var class="Fa">bitset</var> is set.</p>
-<p class="Pp" id="BIT_SET">The
- <a class="permalink" href="#BIT_SET"><code class="Fn">BIT_SET</code></a>()
- macro sets bit <var class="Fa">bit</var> in the bitset pointed to by
- <var class="Fa">bitset</var>. The
- <a class="permalink" href="#BIT_SET_ATOMIC"><code class="Fn" id="BIT_SET_ATOMIC">BIT_SET_ATOMIC</code></a>()
- macro is identical, but the bit is set atomically. The
- <a class="permalink" href="#BIT_SET_ATOMIC_ACQ"><code class="Fn" id="BIT_SET_ATOMIC_ACQ">BIT_SET_ATOMIC_ACQ</code></a>()
- macro sets the bit with acquire semantics. The
- <a class="permalink" href="#BIT_TEST_SET_ATOMIC"><code class="Fn" id="BIT_TEST_SET_ATOMIC">BIT_TEST_SET_ATOMIC</code></a>()
- macro atomically sets the bit and returns whether it was set.</p>
-<p class="Pp" id="BIT_ZERO">The
- <a class="permalink" href="#BIT_ZERO"><code class="Fn">BIT_ZERO</code></a>()
- macro clears all bits in <var class="Fa">bitset</var>.</p>
-<p class="Pp" id="BIT_FILL">The
- <a class="permalink" href="#BIT_FILL"><code class="Fn">BIT_FILL</code></a>()
- macro sets all bits in <var class="Fa">bitset</var>.</p>
-<p class="Pp" id="BIT_SETOF">The
- <a class="permalink" href="#BIT_SETOF"><code class="Fn">BIT_SETOF</code></a>()
- macro clears all bits in <var class="Fa">bitset</var> before setting only
- bit <var class="Fa">bit</var>.</p>
-<p class="Pp" id="BIT_EMPTY">The
- <a class="permalink" href="#BIT_EMPTY"><code class="Fn">BIT_EMPTY</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">bitset</var>
- is empty.</p>
-<p class="Pp" id="BIT_ISFULLSET">The
- <a class="permalink" href="#BIT_ISFULLSET"><code class="Fn">BIT_ISFULLSET</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">bitset</var>
- is full (all bits set).</p>
-<p class="Pp" id="BIT_FFS">The
- <a class="permalink" href="#BIT_FFS"><code class="Fn">BIT_FFS</code></a>()
- macro returns the 1-index of the first (lowest) set bit in
- <var class="Fa">bitset</var>, or zero if <var class="Fa">bitset</var> is
- empty. Like with <a class="Xr">ffs(3)</a>, to use the non-zero result of
- <code class="Fn">BIT_FFS</code>() as a <var class="Fa">bit</var> index
- parameter to any other <code class="Nm">bitset(9)</code> macro, you must
- subtract one from the result.</p>
-<p class="Pp" id="BIT_FFS_AT">The
- <a class="permalink" href="#BIT_FFS_AT"><code class="Fn">BIT_FFS_AT</code></a>()
- macro returns the 1-index of the first (lowest) set bit in
- <var class="Fa">bitset</var>, which is greater than the given 1-indexed
- <var class="Fa">start</var>, or zero if no bits in
- <var class="Fa">bitset</var> greater than <var class="Fa">start</var> are
- set.</p>
-<p class="Pp" id="BIT_FLS">The
- <a class="permalink" href="#BIT_FLS"><code class="Fn">BIT_FLS</code></a>()
- macro returns the 1-index of the last (highest) set bit in
- <var class="Fa">bitset</var>, or zero if <var class="Fa">bitset</var> is
- empty. Like with <a class="Xr">fls(3)</a>, to use the non-zero result of
- <code class="Fn">BIT_FLS</code>() as a <var class="Fa">bit</var> index
- parameter to any other <code class="Nm">bitset(9)</code> macro, you must
- subtract one from the result.</p>
-<p class="Pp" id="BIT_FOREACH_ISSET">The
- <a class="permalink" href="#BIT_FOREACH_ISSET"><code class="Fn">BIT_FOREACH_ISSET</code></a>()
- macro can be used to iterate over all set bits in
- <var class="Fa">bitset</var>. The index variable <var class="Fa">bit</var>
- must have been declared with type <var class="Ft">int</var>, and upon each
- iteration <var class="Fa">bit</var> is set to the index of successive set
- bits. The value of <var class="Fa">bit</var> after the loop terminates is
- undefined. Similarly,
- <a class="permalink" href="#BIT_FOREACH_ISCLR"><code class="Fn" id="BIT_FOREACH_ISCLR">BIT_FOREACH_ISCLR</code></a>()
- iterates over all clear bits in <var class="Fa">bitset</var>. In the loop
- body, the currently indexed bit may be set or cleared. However, setting or
- clearing bits other than the currently indexed bit does not guarantee that
- they will or will not be returned in subsequent iterations of the same
- loop.</p>
-<p class="Pp" id="BIT_COUNT">The
- <a class="permalink" href="#BIT_COUNT"><code class="Fn">BIT_COUNT</code></a>()
- macro returns the total number of set bits in
- <var class="Fa">bitset</var>.</p>
-<p class="Pp" id="BIT_SUBSET">The
- <a class="permalink" href="#BIT_SUBSET"><code class="Fn">BIT_SUBSET</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">needle</var>
- is a subset of <var class="Fa">haystack</var>.</p>
-<p class="Pp" id="BIT_OVERLAP">The
- <a class="permalink" href="#BIT_OVERLAP"><code class="Fn">BIT_OVERLAP</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">bitset1</var>
- and <var class="Fa">bitset2</var> have any common bits. (That is, if
- <var class="Fa">bitset1</var> AND <var class="Fa">bitset2</var> is not the
- empty set.)</p>
-<p class="Pp" id="BIT_CMP">The
- <a class="permalink" href="#BIT_CMP"><code class="Fn">BIT_CMP</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">bitset1</var>
- is NOT equal to <var class="Fa">bitset2</var>.</p>
-<p class="Pp" id="BIT_OR">The
- <a class="permalink" href="#BIT_OR"><code class="Fn">BIT_OR</code></a>()
- macro sets bits present in <var class="Fa">src</var> in
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> |=
- <var class="Fa">src</var>.)
- <a class="permalink" href="#BIT_OR_ATOMIC"><code class="Fn" id="BIT_OR_ATOMIC">BIT_OR_ATOMIC</code></a>()
- is similar, but sets bits in the component machine words in
- <var class="Fa">dst</var> atomically. (That is, if <var class="Fa">dst</var>
- is composed of multiple machine words,
- <code class="Fn">BIT_OR_ATOMIC</code>() performs multiple individually
- atomic operations.)</p>
-<p class="Pp" id="BIT_OR2">The
- <a class="permalink" href="#BIT_OR2"><code class="Fn">BIT_OR2</code></a>()
- macro computes <var class="Fa">src1</var> bitwise or
- <var class="Fa">src2</var> and assigns the result to
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> =
- <var class="Fa">src1</var> | <var class="Fa">src2</var>.)</p>
-<p class="Pp" id="BIT_ORNOT">The
- <a class="permalink" href="#BIT_ORNOT"><code class="Fn">BIT_ORNOT</code></a>()
- macro sets bits not in <var class="Fa">src</var> in
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> |= <var class="Fa">~
- src</var>.)</p>
-<p class="Pp" id="BIT_ORNOT2">The
- <a class="permalink" href="#BIT_ORNOT2"><code class="Fn">BIT_ORNOT2</code></a>()
- macro computes <var class="Fa">src1</var> bitwise or not
- <var class="Fa">src2</var> and assigns the result to
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> =
- <var class="Fa">src1</var> | ~ <var class="Fa">src2</var>.)</p>
-<p class="Pp" id="BIT_AND">The
- <a class="permalink" href="#BIT_AND"><code class="Fn">BIT_AND</code></a>()
- macro clears bits absent from <var class="Fa">src</var> from
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> &amp;=
- <var class="Fa">src</var>.)
- <a class="permalink" href="#BIT_AND_ATOMIC"><code class="Fn" id="BIT_AND_ATOMIC">BIT_AND_ATOMIC</code></a>()
- is similar, with the same atomic semantics as
- <code class="Fn">BIT_OR_ATOMIC</code>().</p>
-<p class="Pp" id="BIT_AND2">The
- <a class="permalink" href="#BIT_AND2"><code class="Fn">BIT_AND2</code></a>()
- macro computes <var class="Fa">src1</var> bitwise and
- <var class="Fa">src2</var> and assigns the result to
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> =
- <var class="Fa">src1</var> &amp; <var class="Fa">src2</var>.)</p>
-<p class="Pp" id="BIT_ANDNOT">The
- <a class="permalink" href="#BIT_ANDNOT"><code class="Fn">BIT_ANDNOT</code></a>()
- macro clears bits set in <var class="Fa">src</var> from
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> &amp;= <var class="Fa">~
- src</var>.)</p>
-<p class="Pp" id="BIT_ANDNOT2">The
- <a class="permalink" href="#BIT_ANDNOT2"><code class="Fn">BIT_ANDNOT2</code></a>()
- macro computes <var class="Fa">src1</var> bitwise and not
- <var class="Fa">src2</var> and assigns the result to
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> =
- <var class="Fa">src1</var> &amp; ~ <var class="Fa">src2</var>.)</p>
-<p class="Pp" id="BIT_XOR">The
- <a class="permalink" href="#BIT_XOR"><code class="Fn">BIT_XOR</code></a>()
- macro toggles bits set in <var class="Fa">src</var> in
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> ^=
- <var class="Fa">src</var>.)</p>
-<p class="Pp" id="BIT_XOR2">The
- <a class="permalink" href="#BIT_XOR2"><code class="Fn">BIT_XOR2</code></a>()
- macro computes <var class="Fa">src1</var> bitwise exclusive or
- <var class="Fa">src2</var> and assigns the result to
- <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> =
- <var class="Fa">src1</var> ^ <var class="Fa">src2</var>.)</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BITSET_T_INITIALIZER_EXAMPLE"><a class="permalink" href="#BITSET_T_INITIALIZER_EXAMPLE">BITSET_T_INITIALIZER
- EXAMPLE</a></h1>
-<div class="Bd Li">
-<pre>BITSET_DEFINE(_myset, MYSETSIZE);
-
-struct _myset myset;
-
-/* Initialize myset to filled (all bits set) */
-myset = BITSET_T_INITIALIZER(BITSET_FSET(__bitset_words(MYSETSIZE)));
-
-/* Initialize myset to only the lowest bit set */
-myset = BITSET_T_INITIALIZER(0x1);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bitstring(3)</a>, <a class="Xr">cpuset(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">bitset(9)</code> macros first appeared in
- <span class="Ux">FreeBSD 10.0</span> in January 2014. They were MFCed to
- <span class="Ux">FreeBSD 9.3</span>, released in July 2014.</p>
-<p class="Pp">This manual page first appeared in <span class="Ux">FreeBSD
- 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bitset(9)</code> macros were generalized and
- pulled out of <code class="In">&lt;<a class="In">sys/cpuset.h</a>&gt;</code>
- as <code class="In">&lt;<a class="In">sys/_bitset.h</a>&gt;</code> and
- <code class="In">&lt;<a class="In">sys/bitset.h</a>&gt;</code> by
- <span class="An">Attilio Rao</span>
- &lt;<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>&gt;.
- This manual page was written by <span class="An">Conrad Meyer</span>
- &lt;<a class="Mt" href="mailto:cem@FreeBSD.org">cem@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">The <var class="Fa">SETSIZE</var> argument to all of these macros
- must match the value given to <code class="Fn">BITSET_DEFINE</code>().</p>
-<p class="Pp">Unlike every other reference to individual set members, which are
- zero-indexed, <code class="Fn">BIT_FFS</code>(),
- <code class="Fn">BIT_FFS_AT</code>() and <code class="Fn">BIT_FLS</code>()
- return a one-indexed result (or zero if the set is empty).</p>
-<p class="Pp">In order to use the macros defined in
- <code class="In">&lt;<a class="In">sys/bitset.h</a>&gt;</code> and
- <code class="In">&lt;<a class="In">sys/_bitset.h</a>&gt;</code> in userland
- programs, <code class="Dv">_WANT_FREEBSD_BITSET</code> has to be defined
- before including the header files. This requirements exists to prevent a
- name space pollution due to macros defined in
- <code class="Nm">bitset(9)</code> in programs that include
- <code class="In">&lt;<a class="In">sys/cpuset.h</a>&gt;</code> or
- <code class="In">&lt;<a class="In">sched.h</a>&gt;</code>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 20, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bpf.9 3.html b/static/freebsd/man9/bpf.9 3.html
deleted file mode 100644
index 57031e64..00000000
--- a/static/freebsd/man9/bpf.9 3.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BPF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BPF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bpf</code> &#x2014; <span class="Nd">Berkeley
- Packet Filter</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net/bpf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpfattach</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- dlt</var>, <var class="Fa" style="white-space: nowrap;">u_int
- hdrlen</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpfattach2</code>(<var class="Fa">struct ifnet *ifp</var>,
- <var class="Fa">u_int dlt</var>, <var class="Fa">u_int hdrlen</var>,
- <var class="Fa">struct bpf_if **driverp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpfdetach</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpf_tap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">u_char
- *pkt</var>, <var class="Fa" style="white-space: nowrap;">u_int
- *pktlen</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpf_mtap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bpf_mtap2</code>(<var class="Fa" style="white-space: nowrap;">struct
- bpf_if *bp</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>, <var class="Fa" style="white-space: nowrap;">u_int dlen</var>,
- <var class="Fa" style="white-space: nowrap;">struct mbuf *m</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">bpf_filter</code>(<var class="Fa">const struct bpf_insn *pc
- </var>, <var class="Fa">u_char *pkt</var>, <var class="Fa">u_int
- wirelen</var>, <var class="Fa">u_int buflen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bpf_validate</code>(<var class="Fa" style="white-space: nowrap;">const
- struct bpf_insn *fcode</var>,
- <var class="Fa" style="white-space: nowrap;">int flen</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The Berkeley Packet Filter provides a raw interface, that is
- protocol independent, to data link layers. It allows all packets on the
- network, even those destined for other hosts, to be passed from a network
- interface to user programs. Each program may specify a filter, in the form
- of a <code class="Nm">bpf</code> filter machine program. The
- <a class="Xr">bpf(4)</a> manual page describes the interface used by user
- programs. This manual page describes the functions used by interfaces to
- pass packets to <code class="Nm">bpf</code> and the functions for testing
- and running <code class="Nm">bpf</code> filter machine programs.</p>
-<p class="Pp" id="bpfattach">The
- <a class="permalink" href="#bpfattach"><code class="Fn">bpfattach</code></a>()
- function attaches a network interface to <code class="Nm">bpf</code>. The
- <var class="Fa">ifp</var> argument is a pointer to the structure that
- defines the interface to be attached to an interface. The
- <var class="Fa">dlt</var> argument is the data link-layer type:
- <code class="Dv">DLT_NULL</code> (no link-layer encapsulation),
- <code class="Dv">DLT_EN10MB</code> (Ethernet),
- <code class="Dv">DLT_IEEE802_11</code> (802.11 wireless networks), etc. The
- rest of the link layer types can be found in
- <code class="In">&lt;<a class="In">net/bpf.h</a>&gt;</code>. The
- <var class="Fa">hdrlen</var> argument is the fixed size of the link header;
- variable length headers are not yet supported. The
- <code class="Nm">bpf</code> system will hold a pointer to
- <var class="Fa">ifp-&gt;if_bpf</var>. This variable will set to a
- non-<code class="Dv">NULL</code> value when <code class="Nm">bpf</code>
- requires packets from this interface to be tapped using the functions
- below.</p>
-<p class="Pp" id="bpfattach2">The
- <a class="permalink" href="#bpfattach2"><code class="Fn">bpfattach2</code></a>()
- function allows multiple <code class="Nm">bpf</code> instances to be
- attached to a single interface, by registering an explicit
- <var class="Fa">if_bpf</var> rather than using
- <var class="Fa">ifp-&gt;if_bpf</var>. It is then possible to run
- <a class="Xr">tcpdump(1)</a> on the interface for any data link-layer types
- attached.</p>
-<p class="Pp" id="bpfdetach">The
- <a class="permalink" href="#bpfdetach"><code class="Fn">bpfdetach</code></a>()
- function detaches a <code class="Nm">bpf</code> instance from an interface,
- specified by <var class="Fa">ifp</var>. The
- <code class="Fn">bpfdetach</code>() function should be called once for each
- <code class="Nm">bpf</code> instance attached.</p>
-<p class="Pp" id="bpf_tap">The
- <a class="permalink" href="#bpf_tap"><code class="Fn">bpf_tap</code></a>()
- function is used by an interface to pass the packet to
- <code class="Nm">bpf</code>. The packet data (including link-header),
- pointed to by <var class="Fa">pkt</var>, is of length
- <var class="Fa">pktlen</var>, which must be a contiguous buffer. The
- <var class="Fa">ifp</var> argument is a pointer to the structure that
- defines the interface to be tapped. The packet is parsed by each processes
- filter, and if accepted, it is buffered for the process to read.</p>
-<p class="Pp" id="bpf_mtap">The
- <a class="permalink" href="#bpf_mtap"><code class="Fn">bpf_mtap</code></a>()
- function is like <code class="Fn">bpf_tap</code>() except that it is used to
- tap packets that are in an <var class="Vt">mbuf</var> chain,
- <var class="Fa">m</var>. The <var class="Fa">ifp</var> argument is a pointer
- to the structure that defines the interface to be tapped. Like
- <code class="Fn">bpf_tap</code>(), <code class="Fn">bpf_mtap</code>()
- requires a link-header for whatever data link layer type is specified. Note
- that <code class="Nm">bpf</code> only reads from the
- <var class="Vt">mbuf</var> chain, it does not free it or keep a pointer to
- it. This means that an <var class="Vt">mbuf</var> containing the link-header
- can be prepended to the chain if necessary. A cleaner interface to achieve
- this is provided by <code class="Fn">bpf_mtap2</code>().</p>
-<p class="Pp" id="bpf_mtap2">The
- <a class="permalink" href="#bpf_mtap2"><code class="Fn">bpf_mtap2</code></a>()
- function allows the user to pass a link-header <var class="Fa">data</var>,
- of length <var class="Fa">dlen</var>, independent of the
- <var class="Vt">mbuf</var> <var class="Fa">m</var>, containing the packet.
- This simplifies the passing of some link-headers.</p>
-<p class="Pp" id="bpf_filter">The
- <a class="permalink" href="#bpf_filter"><code class="Fn">bpf_filter</code></a>()
- function executes the filter program starting at <var class="Fa">pc</var> on
- the packet <var class="Fa">pkt</var>. The <var class="Fa">wirelen</var>
- argument is the length of the original packet and
- <var class="Fa">buflen</var> is the amount of data present. The
- <var class="Fa">buflen</var> value of 0 is special; it indicates that the
- <var class="Fa">pkt</var> is actually a pointer to an mbuf chain
- (<var class="Vt">struct mbuf *</var>).</p>
-<p class="Pp" id="bpf_validate">The
- <a class="permalink" href="#bpf_validate"><code class="Fn">bpf_validate</code></a>()
- function checks that the filter code <var class="Fa">fcode</var>, of length
- <var class="Fa">flen</var>, is valid.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">bpf_filter</code>() function returns -1 (cast
- to an unsigned integer) if there is no filter. Otherwise, it returns the
- result of the filter program.</p>
-<p class="Pp">The <code class="Fn">bpf_validate</code>() function returns 0 when
- the program is not a valid filter program.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EVENT_HANDLERS"><a class="permalink" href="#EVENT_HANDLERS">EVENT
- HANDLERS</a></h1>
-<p class="Pp"><code class="Nm">bpf</code> invokes
- <var class="Fa">bpf_track</var> <a class="Xr">EVENTHANDLER(9)</a> event each
- time listener attaches to or detaches from an interface. Pointer to
- (<var class="Vt">struct ifnet *</var>) is passed as the first argument,
- interface <var class="Fa">dlt</var> follows. Last argument indicates
- listener is attached (1) or detached (0). Note that handler is invoked with
- <code class="Nm">bpf</code> global lock held, which implies restriction on
- sleeping and calling <code class="Nm">bpf</code> subsystem inside
- <a class="Xr">EVENTHANDLER(9)</a> dispatcher. Note that handler is not
- called for write-only listeners.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">tcpdump(1)</a>, <a class="Xr">bpf(4)</a>,
- <a class="Xr">EVENTHANDLER(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The Enet packet filter was created in 1980 by Mike Accetta and
- Rick Rashid at Carnegie-Mellon University. Jeffrey Mogul, at Stanford,
- ported the code to <span class="Ux">BSD</span> and continued its development
- from 1983 on. Since then, it has evolved into the Ultrix Packet Filter at
- DEC, a STREAMS NIT module under SunOS 4.1, and BPF.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Steven McCanne</span>, of Lawrence Berkeley
- Laboratory, implemented BPF in Summer 1990. Much of the design is due to
- <span class="An">Van Jacobson</span>. This manpage was written by
- <span class="An">Orla McGann</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 11, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/buf.9 3.html b/static/freebsd/man9/buf.9 3.html
deleted file mode 100644
index c441c3b4..00000000
--- a/static/freebsd/man9/buf.9 3.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">buf</code> &#x2014; <span class="Nd">kernel
- buffer I/O scheme used in FreeBSD VM system</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The kernel implements a KVM abstraction of the buffer cache which
- allows it to map potentially disparate vm_page's into contiguous KVM for use
- by (mainly file system) devices and device I/O. This abstraction supports
- block sizes from <code class="Dv">DEV_BSIZE</code> (usually 512) to upwards
- of several pages or more. It also supports a relatively primitive
- byte-granular valid range and dirty range currently hardcoded for use by
- NFS. The code implementing the VM Buffer abstraction is mostly concentrated
- in <span class="Pa">sys/kern/vfs_bio.c</span> in the
- <span class="Ux">FreeBSD</span> source tree.</p>
-<p class="Pp" id="page">One of the most important things to remember when
- dealing with buffer pointers (<var class="Vt">struct buf</var>) is that the
- underlying pages are mapped directly from the buffer cache. No data copying
- occurs in the scheme proper, though some file systems such as UFS do have to
- copy a little when dealing with file fragments. The second most important
- thing to remember is that due to the underlying page mapping, the
- <var class="Va">b_data</var> base pointer in a buf is always
- <a class="permalink" href="#page"><i class="Em">page</i></a>-aligned, not
- <a class="permalink" href="#block"><i class="Em" id="block">block</i></a>-aligned.
- When you have a VM buffer representing some <var class="Va">b_offset</var>
- and <var class="Va">b_size</var>, the actual start of the buffer is
- &#x2018;<code class="Li">b_data + (b_offset &amp; PAGE_MASK)</code>&#x2019;
- and not just &#x2018;<code class="Li">b_data</code>&#x2019;. Finally, the VM
- system's core buffer cache supports valid and dirty bits
- (<var class="Va">m-&gt;valid</var>, <var class="Va">m-&gt;dirty</var>) for
- pages in <code class="Dv">DEV_BSIZE</code> chunks. Thus a platform with a
- hardware page size of 4096 bytes has 8 valid and 8 dirty bits. These bits
- are generally set and cleared in groups based on the device block size of
- the device backing the page. Complete page's worth are often referred to
- using the <code class="Dv">VM_PAGE_BITS_ALL</code> bitmask (i.e., 0xFF if
- the hardware page size is 4096).</p>
-<p class="Pp">VM buffers also keep track of a byte-granular dirty range and
- valid range. This feature is normally only used by the NFS subsystem. I am
- not sure why it is used at all, actually, since we have
- <code class="Dv">DEV_BSIZE</code> valid/dirty granularity within the VM
- buffer. If a buffer dirty operation creates a &#x201C;hole&#x201D;, the
- dirty range will extend to cover the hole. If a buffer validation operation
- creates a &#x201C;hole&#x201D; the byte-granular valid range is left alone
- and will not take into account the new extension. Thus the whole
- byte-granular abstraction is considered a bad hack and it would be nice if
- we could get rid of it completely.</p>
-<p class="Pp">A VM buffer is capable of mapping the underlying VM cache pages
- into KVM in order to allow the kernel to directly manipulate the data
- associated with the (<var class="Va">vnode</var>,
- <var class="Va">b_offset</var>, <var class="Va">b_size</var>). The kernel
- typically unmaps VM buffers the moment they are no longer needed but often
- keeps the <var class="Vt">struct buf</var> structure instantiated and even
- <var class="Va">bp-&gt;b_pages</var> array instantiated despite having
- unmapped them from KVM. If a page making up a VM buffer is about to undergo
- I/O, the system typically unmaps it from KVM and replaces the page in the
- <var class="Va">b_pages[]</var> array with a place-marker called bogus_page.
- The place-marker forces any kernel subsystems referencing the associated
- <var class="Vt">struct buf</var> to re-lookup the associated page. I believe
- the place-marker hack is used to allow sophisticated devices such as file
- system devices to remap underlying pages in order to deal with, for example,
- re-mapping a file fragment into a file block.</p>
-<p class="Pp">VM buffers are used to track I/O operations within the kernel.
- Unfortunately, the I/O implementation is also somewhat of a hack because the
- kernel wants to clear the dirty bit on the underlying pages the moment it
- queues the I/O to the VFS device, not when the physical I/O is actually
- initiated. This can create confusion within file system devices that use
- delayed-writes because you wind up with pages marked clean that are actually
- still dirty. If not treated carefully, these pages could be thrown away!
- Indeed, a number of serious bugs related to this hack were not fixed until
- the <span class="Ux">FreeBSD 2.2.8</span> / <span class="Ux">FreeBSD
- 3.0</span> release. The kernel uses an instantiated VM buffer (i.e.,
- <var class="Vt">struct buf</var>) to place-mark pages in this special state.
- The buffer is typically flagged <code class="Dv">B_DELWRI</code>. When a
- device no longer needs a buffer it typically flags it as
- <code class="Dv">B_RELBUF</code>. Due to the underlying pages being marked
- clean, the &#x2018;<code class="Li">B_DELWRI|B_RELBUF</code>&#x2019;
- combination must be interpreted to mean that the buffer is still actually
- dirty and must be written to its backing store before it can actually be
- released. In the case where <code class="Dv">B_DELWRI</code> is not set, the
- underlying dirty pages are still properly marked as dirty and the buffer can
- be completely freed without losing that clean/dirty state information. (XXX
- do we have to check other flags in regards to this situation ???)</p>
-<p class="Pp">The kernel reserves a portion of its KVM space to hold VM Buffer's
- data maps. Even though this is virtual space (since the buffers are mapped
- from the buffer cache), we cannot make it arbitrarily large because
- instantiated VM Buffers (<var class="Vt">struct buf</var>'s) prevent their
- underlying pages in the buffer cache from being freed. This can complicate
- the life of the paging system.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">buf</code> manual page was originally written
- by <span class="An">Matthew Dillon</span> and first appeared in
- <span class="Ux">FreeBSD 3.1</span>, December 1998.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 22, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/buf_ring.9 3.html b/static/freebsd/man9/buf_ring.9 3.html
deleted file mode 100644
index b7aed8b2..00000000
--- a/static/freebsd/man9/buf_ring.9 3.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUF_RING(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUF_RING(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">buf_ring</code>,
- <code class="Nm">buf_ring_alloc</code>,
- <code class="Nm">buf_ring_free</code>,
- <code class="Nm">buf_ring_enqueue</code>,
- <code class="Nm">buf_ring_dequeue_mc</code>,
- <code class="Nm">buf_ring_dequeue_sc</code>,
- <code class="Nm">buf_ring_count</code>,
- <code class="Nm">buf_ring_empty</code>,
- <code class="Nm">buf_ring_full</code>, <code class="Nm">buf_ring_peek</code>
- &#x2014; <span class="Nd">multi-producer, {single, multi}-consumer lock-less
- ring buffer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf_ring.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct buf_ring *</var>
- <br/>
- <code class="Fn">buf_ring_alloc</code>(<var class="Fa" style="white-space: nowrap;">int
- count</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">struct mtx *sc_lock</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">buf_ring_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">buf_ring_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">buf_ring_dequeue_mc</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">buf_ring_dequeue_sc</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">buf_ring_count</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">buf_ring_empty</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">buf_ring_full</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">buf_ring_peek</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">buf_ring</code> functions provide a lock-less
- multi-producer and lock-less multi-consumer as well as single-consumer ring
- buffer.</p>
-<p class="Pp" id="buf_ring_alloc">The
- <a class="permalink" href="#buf_ring_alloc"><code class="Fn">buf_ring_alloc</code></a>()
- function is used to allocate a buf_ring ring buffer with
- <var class="Fa">count</var> slots using malloc_type
- <var class="Fa">type</var> and memory flags <var class="Fa">flags</var>. The
- single consumer interface is protected by <var class="Fa">sc_lock</var>.</p>
-<p class="Pp" id="buf_ring_free">The
- <a class="permalink" href="#buf_ring_free"><code class="Fn">buf_ring_free</code></a>()
- function is used to free a buf_ring. The user is responsible for freeing any
- enqueued items.</p>
-<p class="Pp" id="buf_ring_enqueue">The
- <a class="permalink" href="#buf_ring_enqueue"><code class="Fn">buf_ring_enqueue</code></a>()
- function is used to enqueue a buffer to a buf_ring.</p>
-<p class="Pp" id="buf_ring_dequeue_mc">The
- <a class="permalink" href="#buf_ring_dequeue_mc"><code class="Fn">buf_ring_dequeue_mc</code></a>()
- function is a multi-consumer safe way of dequeueing elements from a
- buf_ring.</p>
-<p class="Pp" id="buf_ring_dequeue_sc">The
- <a class="permalink" href="#buf_ring_dequeue_sc"><code class="Fn">buf_ring_dequeue_sc</code></a>()
- function is a single-consumer interface to dequeue elements - requiring the
- user to serialize accesses with a lock.</p>
-<p class="Pp" id="buf_ring_count">The
- <a class="permalink" href="#buf_ring_count"><code class="Fn">buf_ring_count</code></a>()
- function returns the number of elements in a buf_ring.</p>
-<p class="Pp" id="buf_ring_empty">The
- <a class="permalink" href="#buf_ring_empty"><code class="Fn">buf_ring_empty</code></a>()
- function returns <code class="Dv">TRUE</code> if the buf_ring is empty,
- <code class="Dv">FALSE</code> otherwise.</p>
-<p class="Pp" id="buf_ring_full">The
- <a class="permalink" href="#buf_ring_full"><code class="Fn">buf_ring_full</code></a>()
- function returns <code class="Dv">TRUE</code> if no more items can be
- enqueued, <code class="Dv">FALSE</code> otherwise.</p>
-<p class="Pp" id="buf_ring_peek">The
- <a class="permalink" href="#buf_ring_peek"><code class="Fn">buf_ring_peek</code></a>()
- function returns a pointer to the last element in the buf_ring if the
- buf_ring is not empty, <code class="Dv">NULL</code> otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">buf_ring_enqueue</code>() function return
- <code class="Er">ENOBUFS</code> if there are no available slots in the
- buf_ring.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD
- 8.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 27, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_activate_resource.9 3.html b/static/freebsd/man9/bus_activate_resource.9 3.html
deleted file mode 100644
index e9e89e4c..00000000
--- a/static/freebsd/man9/bus_activate_resource.9 3.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_ACTIVATE_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_ACTIVATE_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_activate_resource</code>,
- <code class="Nm">bus_deactivate_resource</code> &#x2014;
- <span class="Nd">activate or deactivate a resource</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_activate_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">struct resource *r</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_deactivate_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">struct resource *r</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions activate or deactivate a previously allocated
- resource. In general, resources must be activated before they can be
- accessed by the driver. Bus drivers may perform additional actions to ensure
- that the resource is ready to be accessed. For example, the PCI bus driver
- enables memory decoding in a PCI device's command register when activating a
- memory resource.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device that requests ownership of the resource. Before allocation, the
- resource is owned by the parent bus.</dd>
- <dt><var class="Fa">r</var></dt>
- <dd>A pointer to the <var class="Vt">struct resource</var> returned by
- <a class="Xr">bus_alloc_resource(9)</a>.</dd>
-</dl>
-<section class="Ss">
-<h2 class="Ss" id="Resource_Mapping"><a class="permalink" href="#Resource_Mapping">Resource
- Mapping</a></h2>
-<p class="Pp">Resources which can be mapped for CPU access by a
- <a class="Xr">bus_space(9)</a> tag and handle will create a mapping of the
- entire resource when activated. The tag and handle for this mapping are
- stored in <var class="Fa">r</var> and can be retrieved via
- <a class="Xr">rman_get_bustag(9)</a> and
- <a class="Xr">rman_get_bushandle(9)</a>. These can be used with the
- <a class="Xr">bus_space(9)</a> API to access device registers or memory
- described by <var class="Fa">r</var>. If the mapping is associated with a
- virtual address, the virtual address can be retrieved via
- <a class="Xr">rman_get_virtual(9)</a>.</p>
-<p class="Pp">This implicit mapping can be disabled by passing the
- <code class="Dv">RF_UNMAPPED</code> flag to
- <a class="Xr">bus_alloc_resource(9)</a>. A driver may use this if it wishes
- to allocate its own mappings of a resource using
- <a class="Xr">bus_map_resource(9)</a>.</p>
-<p class="Pp" id="bus_read_4">A wrapper API for <a class="Xr">bus_space(9)</a>
- is also provided that accepts the associated resource as the first argument
- in place of the <a class="Xr">bus_space(9)</a> tag and handle. The functions
- in this wrapper API are named similarly to the
- <a class="Xr">bus_space(9)</a> API except that &#x201C;_space&#x201D; is
- removed from their name. For example,
- <a class="permalink" href="#bus_read_4"><code class="Fn">bus_read_4</code></a>()
- can be used in place of
- <a class="permalink" href="#bus_space_read_4"><code class="Fn" id="bus_space_read_4">bus_space_read_4</code></a>().
- The wrapper API is preferred in new drivers.</p>
-<p class="Pp">These two statements both read a 32-bit register at the start of a
- resource:</p>
-<div class="Bd Pp Li">
-<pre> bus_space_read_4(rman_get_bustag(res), rman_get_bushandle(res), 0);
- bus_read_4(res, 0);</pre>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">bus_map_resource(9)</a>, <a class="Xr">bus_space(9)</a>,
- <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_adjust_resource.9 4.html b/static/freebsd/man9/bus_adjust_resource.9 4.html
deleted file mode 100644
index b3ec2d7b..00000000
--- a/static/freebsd/man9/bus_adjust_resource.9 4.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_ADJUST_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_ADJUST_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_adjust_resource</code> &#x2014;
- <span class="Nd">adjust resource allocated from a parent bus</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_adjust_resource</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">struct resource *r</var>,
- <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t
- end</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function is used to ask the parent bus to adjust the resource
- range assigned to an allocated resource. The resource
- <var class="Fa">r</var> should have been allocated by a previous call to
- <a class="Xr">bus_alloc_resource(9)</a>. The new resource range must overlap
- the existing range of <var class="Fa">r</var>.</p>
-<p class="Pp" id="bus_adjust_resource">Note that none of the constraints of the
- original allocation request such as alignment or boundary restrictions are
- checked by
- <a class="permalink" href="#bus_adjust_resource"><code class="Fn">bus_adjust_resource</code></a>().
- It is the caller's responsibility to enforce any such requirements.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">bus_adjust_resource</code>() method returns
- zero on success or an error code on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Grow an existing memory resource by 4096 bytes.</p>
-<div class="Bd Pp Li">
-<pre> struct resource *res;
- int error;
-
- error = bus_adjust_resource(dev, res, rman_get_start(res),
- rman_get_end(res) + 0x1000);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">bus_adjust_resource</code>() will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">dev</var> device does not have a parent device.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">r</var> resource is a shared resource.</dd>
- <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The new address range does not overlap with the existing address range of
- <var class="Fa">r</var>.</dd>
- <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
- <dd>The new address range conflicts with another allocated resource.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">bus_release_resource(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_alloc_resource.9 3.html b/static/freebsd/man9/bus_alloc_resource.9 3.html
deleted file mode 100644
index 9f42e4da..00000000
--- a/static/freebsd/man9/bus_alloc_resource.9 3.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_ALLOC_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_ALLOC_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_alloc_resource</code>,
- <code class="Nm">bus_alloc_resource_any</code>,
- <code class="Nm">bus_alloc_resource_anywhere</code> &#x2014;
- <span class="Nd">allocate resources from a parent bus</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct resource *</var>
- <br/>
- <code class="Fn">bus_alloc_resource</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t
- end</var>, <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">struct resource *</var>
- <br/>
- <code class="Fn">bus_alloc_resource_any</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int type</var>,
- <var class="Fa" style="white-space: nowrap;">int rid</var>,
- <var class="Fa" style="white-space: nowrap;">u_int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct resource *</var>
- <br/>
- <code class="Fn">bus_alloc_resource_anywhere</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This is an easy interface to the resource-management functions. It
- hides the indirection through the parent's method table. This function
- generally should be called in attach, but (except in some rare cases) never
- earlier.</p>
-<p class="Pp" id="bus_alloc_resource_any">The
- <a class="permalink" href="#bus_alloc_resource_any"><code class="Fn">bus_alloc_resource_any</code></a>()
- and
- <a class="permalink" href="#bus_alloc_resource_anywhere"><code class="Fn" id="bus_alloc_resource_anywhere">bus_alloc_resource_anywhere</code></a>()
- functions are convenience wrappers for
- <a class="permalink" href="#bus_alloc_resource"><code class="Fn" id="bus_alloc_resource">bus_alloc_resource</code></a>().
- <code class="Fn">bus_alloc_resource_any</code>() sets
- <var class="Fa">start</var>, <var class="Fa">end</var>, and
- <var class="Fa">count</var> to the default resource (see description of
- <var class="Fa">start</var> below).
- <code class="Fn">bus_alloc_resource_anywhere</code>() sets
- <var class="Fa">start</var> and <var class="Fa">end</var> to the default
- resource and uses the provided <var class="Fa">count</var> argument.</p>
-<p class="Pp">The arguments are as follows:</p>
-<ul class="Bl-item">
- <li><var class="Fa">dev</var> is the device that requests ownership of the
- resource. Before allocation, the resource is owned by the parent bus.</li>
- <li><var class="Fa">type</var> is the type of resource you want to allocate.
- It is one of:
- <dl class="Bl-tag">
- <dt id="PCI_RES_BUS"><a class="permalink" href="#PCI_RES_BUS"><code class="Dv">PCI_RES_BUS</code></a></dt>
- <dd>for PCI bus numbers</dd>
- <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt>
- <dd>for IRQs</dd>
- <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt>
- <dd>for ISA DMA lines</dd>
- <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt>
- <dd>for I/O ports</dd>
- <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt>
- <dd>for I/O memory</dd>
- </dl>
- </li>
- <li><var class="Fa">rid</var> is a bus specific handle that identifies the
- resource being allocated. For ISA this is an index into an array of
- resources that have been setup for this device by either the PnP
- mechanism, or via the hints mechanism. For PCCARD, this is an index into
- the array of resources described by the PC Card's CIS entry. For PCI, the
- offset into PCI config space which has the BAR to use to access the
- resource.</li>
- <li><var class="Fa">start</var> and <var class="Fa">end</var> are the
- start/end addresses of the resource. If you specify values of 0ul for
- <var class="Fa">start</var> and ~0ul for <var class="Fa">end</var> and 1
- for <var class="Fa">count</var>, the default values for the bus are
- calculated.</li>
- <li><var class="Fa">count</var> is the size of the resource. For example, the
- size of an I/O port is usually 1 byte (but some devices override this). If
- you specified the default values for <var class="Fa">start</var> and
- <var class="Fa">end</var>, then the default value of the bus is used if
- <var class="Fa">count</var> is smaller than the default value and
- <var class="Fa">count</var> is used, if it is bigger than the default
- value.</li>
- <li><var class="Fa">flags</var> sets the flags for the resource. You can set
- zero or more of these flags:
- <dl class="Bl-tag">
- <dt id="RF_ACTIVE"><a class="permalink" href="#RF_ACTIVE"><code class="Dv">RF_ACTIVE</code></a></dt>
- <dd>activate resource atomically.</dd>
- <dt id="RF_PREFETCHABLE"><a class="permalink" href="#RF_PREFETCHABLE"><code class="Dv">RF_PREFETCHABLE</code></a></dt>
- <dd>resource is prefetchable.</dd>
- <dt id="RF_SHAREABLE"><a class="permalink" href="#RF_SHAREABLE"><code class="Dv">RF_SHAREABLE</code></a></dt>
- <dd>resource permits contemporaneous sharing. It should always be set
- unless you know that the resource cannot be shared. It is the bus
- driver's task to filter out the flag if the bus does not support
- sharing.</dd>
- <dt id="RF_UNMAPPED"><a class="permalink" href="#RF_UNMAPPED"><code class="Dv">RF_UNMAPPED</code></a></dt>
- <dd>do not establish implicit mapping when activated via
- <a class="Xr">bus_activate_resource(9)</a>.</dd>
- </dl>
- </li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A pointer to <var class="Va">struct resource</var> is returned on
- success, a null pointer otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This is some example code that allocates a 32 byte I/O port range
- and an IRQ.</p>
-<div class="Bd Pp Li">
-<pre> struct resource *portres, *irqres;
-
- portres = bus_alloc_resource(dev, SYS_RES_IOPORT, 0,
- 0ul, ~0ul, 32, RF_ACTIVE);
- irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, 0,
- RF_ACTIVE | RF_SHAREABLE);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>,
- <a class="Xr">bus_adjust_resource(9)</a>,
- <a class="Xr">bus_map_resource(9)</a>,
- <a class="Xr">bus_release_resource(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@big.endian.de">alex@big.endian.de</a>&gt;
- with parts by <span class="An">Warner Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 6, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_attach_children.9 3.html b/static/freebsd/man9/bus_attach_children.9 3.html
deleted file mode 100644
index 18344241..00000000
--- a/static/freebsd/man9/bus_attach_children.9 3.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_ATTACH_CHILDREN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_ATTACH_CHILDREN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_attach_children</code>,
- <code class="Nm">bus_delayed_attach_children</code>,
- <code class="Nm">bus_detach_children</code>,
- <code class="Nm">bus_enumerate_hinted_children</code>,
- <code class="Nm">bus_identify_children</code> &#x2014;
- <span class="Nd">manage child devices of a bus device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_attach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_delayed_attach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_detach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_enumerate_hinted_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_identify_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions manage state transitions of child devices for
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="bus_enumerate_hinted_children"><a class="permalink" href="#bus_enumerate_hinted_children"><code class="Fn">bus_enumerate_hinted_children</code></a>()
- walks the kernel environment to identify any device hints that describe a
- device attached to <var class="Fa">dev</var>. For each set of matching
- hints, the <a class="Xr">BUS_HINTED_CHILD(9)</a> method is invoked. This
- function is typically called from a bus driver's
- <a class="Xr">DEVICE_ATTACH(9)</a> method to add hinted devices. Note that
- most bus drivers do not use hints to identify child devices. This is
- typically used for legacy buses such as ISA that do not provide a mechanism
- for enumerating devices.</p>
-<p class="Pp" id="bus_identify_children"><a class="permalink" href="#bus_identify_children"><code class="Fn">bus_identify_children</code></a>()
- iterates over all eligible device drivers for children of
- <var class="Fa">dev</var> invoking the <a class="Xr">DEVICE_IDENTIFY(9)</a>
- method. This allows device drivers to add child devices that are enumerated
- via alternate mechanisms such as firmware tables. This function is typically
- called from a bus driver's <a class="Xr">DEVICE_ATTACH(9)</a> method.</p>
-<p class="Pp" id="bus_attach_children"><a class="permalink" href="#bus_attach_children"><code class="Fn">bus_attach_children</code></a>()
- attaches device drivers to all children of <var class="Fa">dev</var>. This
- function invokes <a class="Xr">device_probe_and_attach(9)</a> on each child
- device ignoring errors. It makes a best-effort pass to attach device drivers
- to all children. Child devices are attached in increasing order. Child
- devices with the same order are attached in FIFO order based on the time
- when the device was created via <a class="Xr">device_add_child(9)</a>. This
- function is typically called from a bus driver's
- <a class="Xr">DEVICE_ATTACH(9)</a> method after adding devices.</p>
-<p class="Pp" id="bus_delayed_attach_children"><a class="permalink" href="#bus_delayed_attach_children"><code class="Fn">bus_delayed_attach_children</code></a>()
- attaches device drivers to all children of <var class="Fa">dev</var> after
- interrupts are enabled. This function schedules a call to
- <code class="Fn">bus_attach_children</code>() after interrupts are enabled
- via <a class="Xr">config_intrhook_establish(9)</a>. If interrupts are
- already enabled (for example, when loading a device driver after booting),
- <code class="Fn">bus_attach_children</code>() is called immediately.</p>
-<p class="Pp" id="bus_detach_children"><a class="permalink" href="#bus_detach_children"><code class="Fn">bus_detach_children</code></a>()
- detaches device drivers from all children of <var class="Fa">dev</var> by
- calling <a class="Xr">device_detach(9)</a> on each child device. Unlike
- <code class="Fn">bus_attach_children</code>(), this function does not make a
- best-effort pass. If a child device fails to detach,
- <code class="Fn">bus_detach_children</code>() immediately fails returning
- the error from the child's failed detach. Child devices are detached in
- reverse order compared to <code class="Fn">bus_attach_children</code>().
- That is, child devices are detached in decreasing order, and child devices
- with the same order are detached in LIFO order. Detached devices are not
- deleted.</p>
-<p class="Pp" id="bus_detach_children~2"><a class="permalink" href="#bus_detach_children~2"><code class="Fn">bus_detach_children</code></a>()
- is typically called at the start of a bus driver's
- <a class="Xr">DEVICE_DETACH(9)</a> method to give child devices a chance to
- veto the detach request. It is usually paired with a later call to
- <a class="permalink" href="#device_delete_children"><code class="Fn" id="device_delete_children">device_delete_children</code></a>(<var class="Fa">9</var>)
- to delete child devices. If no additional logic is required between the two
- function calls, a bus driver can use <a class="Xr">bus_generic_detach(9)</a>
- to detach and delete children.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">config_intrhook_establish(9)</a>,
- <a class="Xr">device_add_child(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>,
- <a class="Xr">device_delete_children(9)</a>,
- <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">device_detach(9)</a>,
- <a class="Xr">DEVICE_IDENTIFY(9)</a>,
- <a class="Xr">device_probe_and_attach(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Fn">bus_enumerate_hinted_children</code>() first
- appeared in <span class="Ux">FreeBSD 6.2</span>.</p>
-<p class="Pp"><code class="Fn">bus_delayed_attach_children</code>() first
- appeared in <span class="Ux">FreeBSD 12.2</span>.</p>
-<p class="Pp"><code class="Fn">bus_identify_children</code>() first appeared in
- <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in
- older releases via the deprecated
- <code class="Fn">bus_generic_probe</code>().</p>
-<p class="Pp"><code class="Fn">bus_attach_children</code>() first appeared in
- <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in
- older releases via the deprecated
- <code class="Fn">bus_generic_attach</code>().</p>
-<p class="Pp"><code class="Fn">bus_detach_children</code>() first appeared in
- <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in
- older releases via <code class="Fn">bus_generic_detach</code>().</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_child_present.9 3.html b/static/freebsd/man9/bus_child_present.9 3.html
deleted file mode 100644
index ee1a643e..00000000
--- a/static/freebsd/man9/bus_child_present.9 3.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_CHILD_PRESENT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_CHILD_PRESENT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_child_present</code> &#x2014;
- <span class="Nd">ask the bus driver to see if this device is still really
- present</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_child_present</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#bus_child_present"><code class="Fn" id="bus_child_present">bus_child_present</code></a>()
- function requests that the parent device driver of <var class="Fa">dev</var>
- check to see if the hardware represented by <var class="Fa">dev</var> is
- still physically accessible at this time. While the notion of accessible
- varies from bus to bus, generally hardware that is not accessible cannot be
- accessed via the
- <a class="permalink" href="#bus_space*"><code class="Fn" id="bus_space*">bus_space*</code></a>()
- methods that would otherwise be used to access the device.</p>
-<p class="Pp">This does not ask the question &#x201C;does this device have
- children?&#x201D; which can better be answered by
- <a class="Xr">device_get_children(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A zero return value indicates that the device is not present in
- the system. A non-zero return value indicates that the device is present in
- the system, or that the state of the device cannot be determined.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This is some example code. It only calls stop when the
- <a class="Xr">dc(4)</a> device is actually present.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>device_t dev;
-dc_softc *sc;
-
-sc = device_get_softc(dev);
-if (bus_child_present(dev))
- dc_stop(sc);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 27, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_dma.9 3.html b/static/freebsd/man9/bus_dma.9 3.html
deleted file mode 100644
index 06b5a960..00000000
--- a/static/freebsd/man9/bus_dma.9 3.html
+++ /dev/null
@@ -1,1154 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_DMA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_DMA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_dma</code>,
- <code class="Nm">bus_dma_tag_create</code>,
- <code class="Nm">bus_dma_tag_destroy</code>,
- <code class="Nm">bus_dma_template_init</code>,
- <code class="Nm">bus_dma_template_tag</code>,
- <code class="Nm">bus_dma_template_clone</code>,
- <code class="Nm">bus_dma_template_fill</code>,
- <code class="Nm">BUS_DMA_TEMPLATE_FILL</code>,
- <code class="Nm">bus_dmamap_create</code>,
- <code class="Nm">bus_dmamap_destroy</code>,
- <code class="Nm">bus_dmamap_load</code>,
- <code class="Nm">bus_dmamap_load_bio</code>,
- <code class="Nm">bus_dmamap_load_ccb</code>,
- <code class="Nm">bus_dmamap_load_crp</code>,
- <code class="Nm">bus_dmamap_load_crp_buffer</code>,
- <code class="Nm">bus_dmamap_load_mbuf</code>,
- <code class="Nm">bus_dmamap_load_mbuf_sg</code>,
- <code class="Nm">bus_dmamap_load_uio</code>,
- <code class="Nm">bus_dmamap_unload</code>,
- <code class="Nm">bus_dmamap_sync</code>,
- <code class="Nm">bus_dmamem_alloc</code>,
- <code class="Nm">bus_dmamem_free</code> &#x2014; <span class="Nd">Bus and
- Machine Independent DMA Mapping Interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dma_tag_create</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- parent</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t
- alignment</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t
- boundary</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t
- lowaddr</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t
- highaddr</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dma_filter_t
- *filtfunc</var>, <var class="Fa" style="white-space: nowrap;">void
- *filtfuncarg</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t
- maxsize</var>, <var class="Fa" style="white-space: nowrap;">int
- nsegments</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t
- maxsegsz</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">bus_dma_lock_t
- *lockfunc</var>, <var class="Fa" style="white-space: nowrap;">void
- *lockfuncarg</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dma_tag_t *dmat</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dma_tag_destroy</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dma_template_init</code>(<var class="Fa">bus_dma_template_t
- *template</var>, <var class="Fa">bus_dma_tag_t parent</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dma_template_tag</code>(<var class="Fa">bus_dma_template_t
- *template</var>, <var class="Fa">bus_dma_tag_t *dmat</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dma_template_clone</code>(<var class="Fa">bus_dma_template_t
- *template</var>, <var class="Fa">bus_dma_tag_t dmat</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dma_template_fill</code>(<var class="Fa">bus_dma_template_t
- *template</var>, <var class="Fa">bus_dma_param_t params[]</var>,
- <var class="Fa">u_int count</var>);</p>
-<p class="Pp"><code class="Fn">BUS_DMA_TEMPLATE_FILL</code>(<var class="Fa">bus_dma_template_t
- *template</var>, <var class="Fa">bus_dma_param_t param ...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_create</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_t *mapp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_destroy</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">void *buf</var>,
- <var class="Fa" style="white-space: nowrap;">bus_size_t buflen</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_bio</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct bio
- *bio</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_ccb</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">union ccb
- *ccb</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_crp</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct crypto
- *crp</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_crp_buffer</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct crypto_buffer
- *cb</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_mbuf</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *mbuf</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback2_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_mbuf_sg</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *mbuf</var>, <var class="Fa" style="white-space: nowrap;">bus_dma_segment_t
- *segs</var>, <var class="Fa" style="white-space: nowrap;">int *nsegs</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamap_load_uio</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback2_t
- *callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dmamap_unload</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dmamap_sync</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t
- map</var>, <var class="Fa" style="white-space: nowrap;">op</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_dmamem_alloc</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">void **vaddr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_t *mapp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_dmamem_free</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t
- dmat</var>, <var class="Fa" style="white-space: nowrap;">void *vaddr</var>,
- <var class="Fa" style="white-space: nowrap;">bus_dmamap_t map</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Direct Memory Access (DMA) is a method of transferring data
- without involving the CPU, thus providing higher performance. A DMA
- transaction can be achieved between device to memory, device to device, or
- memory to memory.</p>
-<p class="Pp">The <code class="Nm">bus_dma</code> API is a bus, device, and
- machine-independent (MI) interface to DMA mechanisms. It provides the client
- with flexibility and simplicity by abstracting machine dependent issues like
- setting up DMA mappings, handling cache issues, bus specific features and
- limitations.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="OVERVIEW"><a class="permalink" href="#OVERVIEW">OVERVIEW</a></h1>
-<p class="Pp">A tag structure (<var class="Vt">bus_dma_tag_t</var>) is used to
- describe the properties of a group of related DMA transactions. One way to
- view this is that a tag describes the limitations of a DMA engine. For
- example, if a DMA engine in a device is limited to 32-bit addresses, that
- limitation is specified by a parameter when creating the tag for that
- device. Similarly, a tag can be marked as requiring buffers whose addresses
- are aligned to a specific boundary.</p>
-<p class="Pp">Some devices may require multiple tags to describe DMA
- transactions with differing properties. For example, a device might require
- 16-byte alignment of its descriptor ring while permitting arbitrary
- alignment of I/O buffers. In this case, the driver must create one tag for
- the descriptor ring and a separate tag for I/O buffers. If a device has
- restrictions that are common to all DMA transactions in addition to
- restrictions that differ between unrelated groups of transactions, the
- driver can first create a &#x201C;parent&#x201D; tag that describes the
- common restrictions. The per-group tags can then inherit these restrictions
- from this &#x201C;parent&#x201D; tag rather than having to list them
- explicitly when creating the per-group tags.</p>
-<p class="Pp">A mapping structure (<var class="Vt">bus_dmamap_t</var>)
- represents a mapping of a memory region for DMA. On systems with I/O MMUs,
- the mapping structure tracks any I/O MMU entries used by a request. For DMA
- requests that require bounce pages, the mapping tracks the bounce pages
- used.</p>
-<p class="Pp" id="bus_dmamap_load">To prepare for one or more DMA transactions,
- a mapping must be bound to a memory region by calling one of the
- <a class="permalink" href="#bus_dmamap_load"><code class="Fn">bus_dmamap_load</code></a>()
- functions. These functions configure the mapping which can include
- programming entries in an I/O MMU and/or allocating bounce pages. An output
- of these functions (either directly or indirectly by invoking a callback
- routine) is the list of scatter/gather address ranges a consumer can pass to
- a DMA engine to access the memory region. When a mapping is no longer
- needed, the mapping must be unloaded via
- <code class="Fn">bus_dmamap_unload</code>().</p>
-<p class="Pp" id="bus_dmamap_sync">Before and after each DMA transaction,
- <a class="permalink" href="#bus_dmamap_sync"><code class="Fn">bus_dmamap_sync</code></a>()
- must be used to ensure that the correct data is used by the DMA engine and
- the CPU. If a mapping uses bounce pages, the sync operations copy data
- between the bounce pages and the memory region bound to the mapping. Sync
- operations also handle architecture-specific details such as CPU cache
- flushing and CPU memory operation ordering.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STATIC_VS_DYNAMIC"><a class="permalink" href="#STATIC_VS_DYNAMIC">STATIC
- VS DYNAMIC</a></h1>
-<p class="Pp"><code class="Nm">bus_dma</code> handles two types of DMA
- transactions: static and dynamic. Static transactions are used with a
- long-lived memory region that is reused for many transactions such as a
- descriptor ring. Dynamic transactions are used for transfers to or from
- transient buffers such as I/O buffers holding a network packet or disk
- block. Each transaction type uses a different subset of the
- <code class="Nm">bus_dma</code> API.</p>
-<section class="Ss">
-<h2 class="Ss" id="Static_Transactions"><a class="permalink" href="#Static_Transactions">Static
- Transactions</a></h2>
-<p class="Pp">Static transactions use memory regions allocated by
- <code class="Nm">bus_dma</code>. Each static memory region is allocated by
- calling <code class="Fn">bus_dmamem_alloc</code>(). This function requires a
- valid tag describing the properties of the DMA transactions to this region
- such as alignment or address restrictions. Multiple regions can share a
- single tag if they share the same restrictions.</p>
-<p class="Pp" id="bus_dmamem_alloc"><a class="permalink" href="#bus_dmamem_alloc"><code class="Fn">bus_dmamem_alloc</code></a>()
- allocates a memory region along with a mapping object. The associated tag,
- memory region, and mapping object must then be passed to
- <code class="Fn">bus_dmamap_load</code>() to bind the mapping to the
- allocated region and obtain the scatter/gather list.</p>
-<p class="Pp" id="bus_dmamem_alloc~2">It is expected that
- <a class="permalink" href="#bus_dmamem_alloc~2"><code class="Fn">bus_dmamem_alloc</code></a>()
- will attempt to allocate memory requiring less expensive sync operations
- (for example, implementations should not allocate regions requiring bounce
- pages), but sync operations should still be used. For example, a driver
- should use <code class="Fn">bus_dmamap_sync</code>() in an interrupt handler
- before reading descriptor ring entries written by the device prior to the
- interrupt.</p>
-<p class="Pp" id="bus_dmamap_unload">When a consumer is finished with a memory
- region, it should unload the mapping via
- <a class="permalink" href="#bus_dmamap_unload"><code class="Fn">bus_dmamap_unload</code></a>()
- and then release the memory region and mapping object via
- <code class="Fn">bus_dmamem_free</code>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Dynamic_Transactions"><a class="permalink" href="#Dynamic_Transactions">Dynamic
- Transactions</a></h2>
-<p class="Pp">Dynamic transactions map memory regions provided by other parts of
- the system. A tag must be created via
- <code class="Fn">bus_dma_tag_create</code>() to describe the DMA
- transactions to and from these memory regions, and a pool of mapping objects
- must be allocated via <code class="Fn">bus_dmamap_create</code>() to track
- the mappings of any in-flight transactions.</p>
-<p class="Pp" id="bus_dmamap_load~2">When a consumer wishes to schedule a
- transaction for a memory region, the consumer must first obtain an unused
- mapping object from its pool of mapping objects. The memory region must be
- bound to the mapping object via one of the
- <a class="permalink" href="#bus_dmamap_load~2"><code class="Fn">bus_dmamap_load</code></a>()
- functions. Before scheduling the transaction, the consumer should sync the
- memory region via <code class="Fn">bus_dmamap_sync</code>() with one or more
- of the &#x201C;PRE&#x201D; flags. After the transaction has completed, the
- consumer should sync the memory region via
- <code class="Fn">bus_dmamap_sync</code>() with one or more of the
- &#x201C;POST&#x201D; flags. The mapping can then be unloaded via
- <code class="Fn">bus_dmamap_unload</code>(), and the mapping object can be
- returned to the pool of unused mapping objects.</p>
-<p class="Pp" id="bus_dmamap_destroy">When a consumer is no longer scheduling
- DMA transactions, the mapping objects should be freed via
- <a class="permalink" href="#bus_dmamap_destroy"><code class="Fn">bus_dmamap_destroy</code></a>(),
- and the tag should be freed via
- <code class="Fn">bus_dma_tag_destroy</code>().</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STRUCTURES_AND_TYPES"><a class="permalink" href="#STRUCTURES_AND_TYPES">STRUCTURES
- AND TYPES</a></h1>
-<dl class="Bl-tag">
- <dt><var class="Vt">bus_dma_tag_t</var></dt>
- <dd>A machine-dependent (MD) opaque type that describes the characteristics of
- a group of DMA transactions. DMA tags are organized into a hierarchy, with
- each child tag inheriting the restrictions of its parent. This allows all
- devices along the path of DMA transactions to contribute to the
- constraints of those transactions.</dd>
- <dt><var class="Vt">bus_dma_template_t</var></dt>
- <dd>A template is a structure for creating a
- <var class="Fa">bus_dma_tag_t</var> from a set of defaults. Once
- initialized with <code class="Fn">bus_dma_template_init</code>(), a driver
- can over-ride individual fields to suit its needs. The following fields
- start with the indicated default values:
- <div class="Bd Pp Li">
- <pre> alignment 1
- boundary 0
- lowaddr BUS_SPACE_MAXADDR
- highaddr BUS_SPACE_MAXADDR
- maxsize BUS_SPACE_MAXSIZE
- nsegments BUS_SPACE_UNRESTRICTED
- maxsegsize BUS_SPACE_MAXSIZE
- flags 0
- lockfunc NULL
- lockfuncarg NULL</pre>
- </div>
- <p class="Pp" id="bus_dma_tag_create">Descriptions of each field are
- documented with
- <a class="permalink" href="#bus_dma_tag_create"><code class="Fn">bus_dma_tag_create</code></a>().
- Note that the <var class="Fa">filtfunc</var> and
- <var class="Fa">filtfuncarg</var> attributes of the DMA tag are not
- supported with templates.</p>
- </dd>
- <dt><var class="Vt">bus_dma_filter_t</var></dt>
- <dd>Client specified address filter having the format:
- <dl class="Bl-tag">
- <dt id="client_filter"><var class="Ft">int</var></dt>
- <dd><a class="permalink" href="#client_filter"><code class="Fn">client_filter</code></a>(<var class="Fa">void
- *filtarg</var>, <var class="Fa">bus_addr_t testaddr</var>)</dd>
- </dl>
- <p class="Pp">Address filters can be specified during tag creation to allow
- for devices whose DMA address restrictions cannot be specified by a
- single window. The <var class="Fa">filtarg</var> argument is specified
- by the client during tag creation to be passed to all invocations of the
- callback. The <var class="Fa">testaddr</var> argument contains a
- potential starting address of a DMA mapping. The filter function
- operates on the set of addresses from <var class="Fa">testaddr</var> to
- &#x2018;<code class="Li">trunc_page(testaddr) + PAGE_SIZE -
- 1</code>&#x2019;, inclusive. The filter function should return zero if
- any mapping in this range can be accommodated by the device and non-zero
- otherwise.</p>
- <p class="Pp" id="Note:"><a class="permalink" href="#Note:"><i class="Em">Note:
- The use of filters is no longer supported and will result in an
- error.</i></a></p>
- </dd>
- <dt><var class="Vt">bus_dma_segment_t</var></dt>
- <dd>A machine-dependent type that describes individual DMA segments. It
- contains the following fields:
- <div class="Bd Pp Li">
- <pre> bus_addr_t ds_addr;
- bus_size_t ds_len;</pre>
- </div>
- <p class="Pp">The <var class="Fa">ds_addr</var> field contains the device
- visible address of the DMA segment, and <var class="Fa">ds_len</var>
- contains the length of the DMA segment. Although the DMA segments
- returned by a mapping call will adhere to all restrictions necessary for
- a successful DMA operation, some conversion (e.g. a conversion from host
- byte order to the device's byte order) is almost always required when
- presenting segment information to the device.</p>
- </dd>
- <dt><var class="Vt">bus_dmamap_t</var></dt>
- <dd>A machine-dependent opaque type describing an individual mapping. One map
- is used for each memory allocation that will be loaded. Maps can be reused
- once they have been unloaded. Multiple maps can be associated with one DMA
- tag. While the value of the map may evaluate to
- <code class="Dv">NULL</code> on some platforms under certain conditions,
- it should never be assumed that it will be <code class="Dv">NULL</code> in
- all cases.</dd>
- <dt id="bus_dmamap_load~3"><var class="Vt">bus_dmamap_callback_t</var></dt>
- <dd>Client specified callback for receiving mapping information resulting from
- the load of a <var class="Vt">bus_dmamap_t</var> via
- <a class="permalink" href="#bus_dmamap_load~3"><code class="Fn">bus_dmamap_load</code></a>(),
- <code class="Fn">bus_dmamap_load_bio</code>(),
- <code class="Fn">bus_dmamap_load_ccb</code>(),
- <code class="Fn">bus_dmamap_load_crp</code>(), or
- <code class="Fn">bus_dmamap_load_crp_buffer</code>(). Callbacks are of the
- format:
- <dl class="Bl-tag">
- <dt id="client_callback"><var class="Ft">void</var></dt>
- <dd><a class="permalink" href="#client_callback"><code class="Fn">client_callback</code></a>(<var class="Fa">void
- *callback_arg</var>, <var class="Fa">bus_dma_segment_t *segs</var>,
- <var class="Fa">int nseg</var>, <var class="Fa">int error</var>)</dd>
- </dl>
- <p class="Pp">The <var class="Fa">callback_arg</var> is the callback
- argument passed to dmamap load functions. The <var class="Fa">segs</var>
- and <var class="Fa">nseg</var> arguments describe an array of
- <var class="Vt">bus_dma_segment_t</var> structures that represent the
- mapping. This array is only valid within the scope of the callback
- function. The success or failure of the mapping is indicated by the
- <var class="Fa">error</var> argument. More information on the use of
- callbacks can be found in the description of the individual dmamap load
- functions.</p>
- </dd>
- <dt id="bus_dmamap_load_uio"><var class="Vt">bus_dmamap_callback2_t</var></dt>
- <dd>Client specified callback for receiving mapping information resulting from
- the load of a <var class="Vt">bus_dmamap_t</var> via
- <a class="permalink" href="#bus_dmamap_load_uio"><code class="Fn">bus_dmamap_load_uio</code></a>()
- or
- <a class="permalink" href="#bus_dmamap_load_mbuf"><code class="Fn" id="bus_dmamap_load_mbuf">bus_dmamap_load_mbuf</code></a>().
- <p class="Pp">Callback2s are of the format:</p>
- <dl class="Bl-tag">
- <dt id="client_callback2"><var class="Ft">void</var></dt>
- <dd><a class="permalink" href="#client_callback2"><code class="Fn">client_callback2</code></a>(<var class="Fa">void
- *callback_arg</var>, <var class="Fa">bus_dma_segment_t *segs</var>,
- <var class="Fa">int nseg</var>, <var class="Fa">bus_size_t
- mapsize</var>, <var class="Fa">int error</var>)</dd>
- </dl>
- <p class="Pp">Callback2's behavior is the same as
- <var class="Vt">bus_dmamap_callback_t</var> with the addition that the
- length of the data mapped is provided via
- <var class="Fa">mapsize</var>.</p>
- </dd>
- <dt id="bus_dmamap_sync~2"><var class="Vt">bus_dmasync_op_t</var></dt>
- <dd>Memory synchronization operation specifier. Bus DMA requires explicit
- synchronization of memory with its device visible mapping in order to
- guarantee memory coherency. The <var class="Vt">bus_dmasync_op_t</var>
- allows the type of DMA operation that will be or has been performed to be
- communicated to the system so that the correct coherency measures are
- taken. The operations are represented as bitfield flags that can be
- combined together, though it only makes sense to combine PRE flags or POST
- flags, not both. See the
- <a class="permalink" href="#bus_dmamap_sync~2"><code class="Fn">bus_dmamap_sync</code></a>()
- description below for more details on how to use these operations.
- <p class="Pp">All operations specified below are performed from the host
- memory point of view, where a read implies data coming from the device
- to the host memory, and a write implies data going from the host memory
- to the device. Alternatively, the operations can be thought of in terms
- of driver operations, where reading a network packet or storage sector
- corresponds to a read operation in <code class="Nm">bus_dma</code>.</p>
- <dl class="Bl-tag">
- <dt id="BUS_DMASYNC_PREREAD"><a class="permalink" href="#BUS_DMASYNC_PREREAD"><code class="Dv">BUS_DMASYNC_PREREAD</code></a></dt>
- <dd>Perform any synchronization required prior to an update of host memory
- by the device.</dd>
- <dt id="BUS_DMASYNC_PREWRITE"><a class="permalink" href="#BUS_DMASYNC_PREWRITE"><code class="Dv">BUS_DMASYNC_PREWRITE</code></a></dt>
- <dd>Perform any synchronization required after an update of host memory by
- the CPU and prior to device access to host memory.</dd>
- <dt id="BUS_DMASYNC_POSTREAD"><a class="permalink" href="#BUS_DMASYNC_POSTREAD"><code class="Dv">BUS_DMASYNC_POSTREAD</code></a></dt>
- <dd>Perform any synchronization required after an update of host memory by
- the device and prior to CPU access to host memory.</dd>
- <dt id="BUS_DMASYNC_POSTWRITE"><a class="permalink" href="#BUS_DMASYNC_POSTWRITE"><code class="Dv">BUS_DMASYNC_POSTWRITE</code></a></dt>
- <dd>Perform any synchronization required after device access to host
- memory.</dd>
- </dl>
- </dd>
- <dt><var class="Vt">bus_dma_lock_t</var></dt>
- <dd>Client specified lock/mutex manipulation method. This will be called from
- within busdma whenever a client lock needs to be manipulated. In its
- current form, the function will be called immediately before the callback
- for a DMA load operation that has been deferred with
- <code class="Dv">BUS_DMA_LOCK</code> and immediately after with
- <code class="Dv">BUS_DMA_UNLOCK</code>. If the load operation does not
- need to be deferred, then it will not be called since the function loading
- the map should be holding the appropriate locks. This method is of the
- format:
- <dl class="Bl-tag">
- <dt id="lockfunc"><var class="Ft">void</var></dt>
- <dd><a class="permalink" href="#lockfunc"><code class="Fn">lockfunc</code></a>(<var class="Fa">void
- *lockfunc_arg</var>, <var class="Fa">bus_dma_lock_op_t op</var>)</dd>
- </dl>
- <p class="Pp">The <var class="Fa">lockfuncarg</var> argument is specified by
- the client during tag creation to be passed to all invocations of the
- callback. The <var class="Fa">op</var> argument specifies the lock
- operation to perform.</p>
- <p class="Pp" id="busdma_lock_mutex">Two <var class="Vt">lockfunc</var>
- implementations are provided for convenience.
- <a class="permalink" href="#busdma_lock_mutex"><code class="Fn">busdma_lock_mutex</code></a>()
- performs standard mutex operations on the sleep mutex provided via
- <var class="Fa">lockfuncarg</var>.
- <a class="permalink" href="#dflt_lock"><code class="Fn" id="dflt_lock">dflt_lock</code></a>()
- will generate a system panic if it is called. It is substituted into the
- tag when <var class="Fa">lockfunc</var> is passed as
- <code class="Dv">NULL</code> to
- <code class="Fn">bus_dma_tag_create</code>() and is useful for tags that
- should not be used with deferred load operations.</p>
- </dd>
- <dt><var class="Vt">bus_dma_lock_op_t</var></dt>
- <dd>Operations to be performed by the client-specified
- <code class="Fn">lockfunc</code>().
- <dl class="Bl-tag">
- <dt id="BUS_DMA_LOCK"><a class="permalink" href="#BUS_DMA_LOCK"><code class="Dv">BUS_DMA_LOCK</code></a></dt>
- <dd>Acquires and/or locks the client locking primitive.</dd>
- <dt id="BUS_DMA_UNLOCK"><a class="permalink" href="#BUS_DMA_UNLOCK"><code class="Dv">BUS_DMA_UNLOCK</code></a></dt>
- <dd>Releases and/or unlocks the client locking primitive.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<dl class="Bl-tag">
- <dt><code class="Fn">bus_dma_tag_create</code>(<var class="Fa">parent</var>,
- <var class="Fa">alignment</var>, <var class="Fa">boundary</var>,
- <var class="Fa">lowaddr</var>, <var class="Fa">highaddr</var>,
- <var class="Fa">*filtfunc</var>, <var class="Fa">*filtfuncarg</var>,
- <var class="Fa">maxsize</var>, <var class="Fa">nsegments</var>,
- <var class="Fa">maxsegsz</var>, <var class="Fa">flags</var>,
- <var class="Fa">lockfunc</var>, <var class="Fa">lockfuncarg</var>,
- <var class="Fa">*dmat</var>)</dt>
- <dd>Allocates a DMA tag, and initializes it according to the arguments
- provided:
- <dl class="Bl-tag">
- <dt><var class="Fa">parent</var></dt>
- <dd>A parent tag from which to inherit restrictions. The restrictions
- passed in other arguments can only further tighten the restrictions
- inherited from the parent tag.
- <p class="Pp" id="bus_get_dma_tag">All tags created by a device driver
- must inherit from the tag returned by
- <a class="permalink" href="#bus_get_dma_tag"><code class="Fn">bus_get_dma_tag</code></a>()
- to honor restrictions between the parent bridge, CPU memory, and the
- device.</p>
- </dd>
- <dt id="1"><var class="Fa">alignment</var></dt>
- <dd>Alignment constraint, in bytes, of any mappings created using this
- tag. The alignment must be a power of 2. Hardware that can DMA
- starting at any address would specify
- <a class="permalink" href="#1"><i class="Em">1</i></a> for byte
- alignment. Hardware requiring DMA transfers to start on a multiple of
- 4K would specify
- <a class="permalink" href="#4096"><i class="Em" id="4096">4096</i></a>.</dd>
- <dt><var class="Fa">boundary</var></dt>
- <dd>Boundary constraint, in bytes, of the target DMA memory region. The
- boundary indicates the set of addresses, all multiples of the boundary
- argument, that cannot be crossed by a single
- <var class="Vt">bus_dma_segment_t</var>. The boundary must be a power
- of 2 and must be no smaller than the maximum segment size.
- &#x2018;<code class="Li">0</code>&#x2019; indicates that there are no
- boundary restrictions.</dd>
- <dt id="cannot"><var class="Fa">lowaddr</var>,
- <var class="Fa">highaddr</var></dt>
- <dd>Bounds of the window of bus address space that
- <a class="permalink" href="#cannot"><i class="Em">cannot</i></a> be
- directly accessed by the device. The window contains all addresses
- greater than <var class="Fa">lowaddr</var> and less than or equal to
- <var class="Fa">highaddr</var>. For example, a device incapable of DMA
- above 4GB, would specify a <var class="Fa">highaddr</var> of
- <code class="Dv">BUS_SPACE_MAXADDR</code> and a
- <var class="Fa">lowaddr</var> of
- <code class="Dv">BUS_SPACE_MAXADDR_32BIT</code>. Similarly a device
- that can only perform DMA to addresses below 16MB would specify a
- <var class="Fa">highaddr</var> of
- <code class="Dv">BUS_SPACE_MAXADDR</code> and a
- <var class="Fa">lowaddr</var> of
- <code class="Dv">BUS_SPACE_MAXADDR_24BIT</code>. Some implementations
- require that some region of device visible address space, overlapping
- available host memory, be outside the window. This area of
- &#x2018;<code class="Li">safe memory</code>&#x2019; is used to bounce
- requests that would otherwise conflict with the exclusion window.</dd>
- <dt><var class="Fa">filtfunc</var></dt>
- <dd>Formerly the optional filter function; must be
- <code class="Dv">NULL</code>.</dd>
- <dt><var class="Fa">filtfuncarg</var></dt>
- <dd>Must be <code class="Dv">NULL</code>.</dd>
- <dt><var class="Fa">maxsize</var></dt>
- <dd>Maximum size, in bytes, of the sum of all segment lengths in a given
- DMA mapping associated with this tag.</dd>
- <dt><var class="Fa">nsegments</var></dt>
- <dd>Number of discontinuities (scatter/gather segments) allowed in a DMA
- mapped region.</dd>
- <dt><var class="Fa">maxsegsz</var></dt>
- <dd>Maximum size, in bytes, of a segment in any DMA mapped region
- associated with <var class="Fa">dmat</var>.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Are as follows:
- <dl class="Bl-tag">
- <dt id="BUS_DMA_ALLOCNOW"><a class="permalink" href="#BUS_DMA_ALLOCNOW"><code class="Dv">BUS_DMA_ALLOCNOW</code></a></dt>
- <dd>Pre-allocate enough resources to handle at least one map load
- operation on this tag. If sufficient resources are not available,
- <code class="Er">ENOMEM</code> is returned. This should not be
- used for tags that only describe buffers that will be allocated
- with <code class="Fn">bus_dmamem_alloc</code>(). Also, due to
- resource sharing with other tags, this flag does not guarantee
- that resources will be allocated or reserved exclusively for this
- tag. It should be treated only as a minor optimization.</dd>
- <dt id="BUS_DMA_COHERENT"><a class="permalink" href="#BUS_DMA_COHERENT"><code class="Dv">BUS_DMA_COHERENT</code></a></dt>
- <dd>Indicate that the DMA engine and CPU are cache-coherent. Cached
- memory may be used to back allocations created by
- <code class="Fn">bus_dmamem_alloc</code>(). For
- <code class="Fn">bus_dma_tag_create</code>(), the
- <code class="Dv">BUS_DMA_COHERENT</code> flag is currently
- implemented on arm64.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">lockfunc</var></dt>
- <dd>Optional lock manipulation function (may be
- <code class="Dv">NULL</code>) to be called when busdma needs to
- manipulate a lock on behalf of the client. If
- <code class="Dv">NULL</code> is specified,
- <code class="Fn">dflt_lock</code>() is used.</dd>
- <dt><var class="Fa">lockfuncarg</var></dt>
- <dd>Optional argument to be passed to the function specified by
- <var class="Fa">lockfunc</var>.</dd>
- <dt><var class="Fa">dmat</var></dt>
- <dd>Pointer to a bus_dma_tag_t where the resulting DMA tag will be
- stored.</dd>
- </dl>
- <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is
- not available for tag creation or allocating mapping resources. Returns
- <code class="Er">EINVAL</code> if either <var class="Fa">filtfunc</var>
- or <var class="Fa">filtarg</var> arguments are not
- <code class="Dv">NULL</code>.</p>
- </dd>
- <dt id="bus_dma_tag_destroy"><a class="permalink" href="#bus_dma_tag_destroy"><code class="Fn">bus_dma_tag_destroy</code></a>(<var class="Fa">dmat</var>)</dt>
- <dd>Deallocate the DMA tag <var class="Fa">dmat</var> that was created by
- <code class="Fn">bus_dma_tag_create</code>().
- <p class="Pp">Returns <code class="Er">EBUSY</code> if any DMA maps remain
- associated with <var class="Fa">dmat</var> or
- &#x2018;<code class="Li">0</code>&#x2019; on success.</p>
- </dd>
- <dt id="bus_dma_template_init"><a class="permalink" href="#bus_dma_template_init"><code class="Fn">bus_dma_template_init</code></a>(<var class="Fa">*template</var>,
- <var class="Fa">parent</var>)</dt>
- <dd>Initializes a <var class="Fa">bus_dma_template_t</var> structure. If the
- <var class="Fa">parent</var> argument is non-NULL, this parent tag is
- associated with the template and will be compiled into the dma tag that is
- later created. The values of the parent are not copied into the template.
- During tag creation in
- <a class="permalink" href="#bus_dma_tag_template"><code class="Fn" id="bus_dma_tag_template">bus_dma_tag_template</code></a>(),
- any parameters from the parent tag that are more restrictive than what is
- in the provided template will overwrite what goes into the new tag.</dd>
- <dt id="bus_dma_template_tag"><a class="permalink" href="#bus_dma_template_tag"><code class="Fn">bus_dma_template_tag</code></a>(<var class="Fa">*template</var>,
- <var class="Fa">*dmat</var>)</dt>
- <dd>Unpacks a template into a tag, and returns the tag via the
- <var class="Fa">dmat</var>. All return values are identical to
- <code class="Fn">bus_dma_tag_create</code>(). The template is not modified
- by this function, and can be reused and/or freed upon return.</dd>
- <dt id="bus_dma_template_clone"><a class="permalink" href="#bus_dma_template_clone"><code class="Fn">bus_dma_template_clone</code></a>(<var class="Fa">*template</var>,
- <var class="Fa">dmat</var>)</dt>
- <dd>Copies the fields from an existing tag to a template. The template does
- not need to be initialized first. All of its fields will be overwritten by
- the values contained in the tag. When paired with
- <code class="Fn">bus_dma_template_tag</code>(), this function is useful
- for creating copies of tags.</dd>
- <dt id="bus_dma_template_fill"><a class="permalink" href="#bus_dma_template_fill"><code class="Fn">bus_dma_template_fill</code></a>(<var class="Fa">*template</var>,
- <var class="Fa">params[]</var>, <var class="Fa">count</var>)</dt>
- <dd>Fills in the selected fields of the template with the keyed values from
- the <var class="Fa">params</var> array. This is not meant to be called
- directly, use
- <a class="permalink" href="#BUS_DMA_TEMPLATE_FILL"><code class="Fn" id="BUS_DMA_TEMPLATE_FILL">BUS_DMA_TEMPLATE_FILL</code></a>()
- instead.</dd>
- <dt><code class="Fn">BUS_DMA_TEMPLATE_FILL</code>(<var class="Fa">*template</var>,
- <var class="Fa">param ...</var>)</dt>
- <dd>Fills in the selected fields of the template with a variable number of
- key-value parameters. The macros listed below take an argument of the
- specified type and encapsulate it into a key-value structure that is
- directly usable as a parameter argument. Multiple parameters may be
- provided at once.
- <div class="Bd Pp Li">
- <pre> BD_PARENT() void *
- BD_ALIGNMENT() uintmax_t
- BD_BOUNDARY() uintmax_t
- BD_LOWADDR() vm_paddr_t
- BD_HIGHADDR() vm_paddr_t
- BD_MAXSIZE() uintmax_t
- BD_NSEGMENTS() uintmax_t
- BD_MAXSEGSIZE() uintmax_t
- BD_FLAGS() uintmax_t
- BD_LOCKFUNC() void *
- BD_LOCKFUNCARG() void *</pre>
- </div>
- </dd>
- <dt><code class="Fn">bus_dmamap_create</code>(<var class="Fa">dmat</var>,
- <var class="Fa">flags</var>, <var class="Fa">*mapp</var>)</dt>
- <dd>Allocates and initializes a DMA map. Arguments are as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Are as follows:
- <dl class="Bl-tag">
- <dt id="BUS_DMA_COHERENT~2"><a class="permalink" href="#BUS_DMA_COHERENT~2"><code class="Dv">BUS_DMA_COHERENT</code></a></dt>
- <dd>Attempt to map the memory loaded with this map such that cache
- sync operations are as cheap as possible. This flag is typically
- set on maps when the memory loaded with these will be accessed by
- both a CPU and a DMA engine, frequently such as control data and
- as opposed to streamable data such as receive and transmit
- buffers. Use of this flag does not remove the requirement of using
- <code class="Fn">bus_dmamap_sync</code>(), but it may reduce the
- cost of performing these operations.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">mapp</var></dt>
- <dd>Pointer to a <var class="Vt">bus_dmamap_t</var> where the resulting
- DMA map will be stored.</dd>
- </dl>
- <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is
- not available for creating the map or allocating mapping resources.</p>
- </dd>
- <dt id="bus_dmamap_destroy~2"><a class="permalink" href="#bus_dmamap_destroy~2"><code class="Fn">bus_dmamap_destroy</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>)</dt>
- <dd>Frees all resources associated with a given DMA map. Arguments are as
- follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>The DMA map to destroy.</dd>
- </dl>
- <p class="Pp">Returns <code class="Er">EBUSY</code> if a mapping is still
- active for <var class="Fa">map</var>.</p>
- </dd>
- <dt id="bus_dmamap_load~4"><a class="permalink" href="#bus_dmamap_load~4"><code class="Fn">bus_dmamap_load</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">buf</var>,
- <var class="Fa">buflen</var>, <var class="Fa">*callback</var>,
- <var class="Fa">callback_arg</var>, <var class="Fa">flags</var>)</dt>
- <dd>Creates a mapping in device visible address space of
- <var class="Fa">buflen</var> bytes of <var class="Fa">buf</var>,
- associated with the DMA map <var class="Fa">map</var>. This call will
- always return immediately and will not block for any reason. Arguments are
- as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>A DMA map without a currently active mapping.</dd>
- <dt><var class="Fa">buf</var></dt>
- <dd>A kernel virtual address pointer to a contiguous (in KVA) buffer, to
- be mapped into device visible address space.</dd>
- <dt><var class="Fa">buflen</var></dt>
- <dd>The size of the buffer.</dd>
- <dt><var class="Fa">callback</var> <var class="Fa">callback_arg</var></dt>
- <dd>The callback function, and its argument. This function is called once
- sufficient mapping resources are available for the DMA operation. If
- resources are temporarily unavailable, this function will be deferred
- until later, but the load operation will still return immediately to
- the caller. Thus, callers should not assume that the callback will be
- called before the load returns, and code should be structured
- appropriately to handle this. See below for specific flags and error
- codes that control this behavior.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Are as follows:
- <dl class="Bl-tag">
- <dt id="BUS_DMA_NOWAIT"><a class="permalink" href="#BUS_DMA_NOWAIT"><code class="Dv">BUS_DMA_NOWAIT</code></a></dt>
- <dd>The load should not be deferred in case of insufficient mapping
- resources, and instead should return immediately with an
- appropriate error.</dd>
- <dt id="BUS_DMA_NOCACHE"><a class="permalink" href="#BUS_DMA_NOCACHE"><code class="Dv">BUS_DMA_NOCACHE</code></a></dt>
- <dd>The generated transactions to and from the virtual page are
- non-cacheable.</dd>
- </dl>
- </dd>
- </dl>
- <p class="Pp">Return values to the caller are as follows:</p>
- <dl class="Bl-tag">
- <dt>0</dt>
- <dd>The callback has been called and completed. The status of the mapping
- has been delivered to the callback.</dd>
- <dt><code class="Er">EINPROGRESS</code></dt>
- <dd>The mapping has been deferred for lack of resources. The callback will
- be called as soon as resources are available. Callbacks are serviced
- in FIFO order.
- <p class="Pp">Note that subsequent load operations for the same tag that
- do not require extra resources will still succeed. This may result
- in out-of-order processing of requests. If the caller requires the
- order of requests to be preserved, then the caller is required to
- stall subsequent requests until a pending request's callback is
- invoked.</p>
- </dd>
- <dt><code class="Er">ENOMEM</code></dt>
- <dd>The load request has failed due to insufficient resources, and the
- caller specifically used the <code class="Dv">BUS_DMA_NOWAIT</code>
- flag.</dd>
- <dt><code class="Er">EINVAL</code></dt>
- <dd>The load request was invalid. The callback has been called and has
- been provided the same error. This error value may indicate that
- <var class="Fa">dmat</var>, <var class="Fa">map</var>,
- <var class="Fa">buf</var>, or <var class="Fa">callback</var> were
- invalid, or <var class="Fa">buflen</var> was larger than the
- <var class="Fa">maxsize</var> argument used to create the dma tag
- <var class="Fa">dmat</var>.</dd>
- </dl>
- <p class="Pp">When the callback is called, it is presented with an error
- value indicating the disposition of the mapping. Error may be one of the
- following:</p>
- <dl class="Bl-tag">
- <dt>0</dt>
- <dd>The mapping was successful and the <var class="Fa">dm_segs</var>
- callback argument contains an array of
- <var class="Vt">bus_dma_segment_t</var> elements describing the
- mapping. This array is only valid during the scope of the callback
- function.</dd>
- <dt><code class="Er">EFBIG</code></dt>
- <dd>A mapping could not be achieved within the segment constraints
- provided in the tag even though the requested allocation size was less
- than maxsize.</dd>
- </dl>
- </dd>
- <dt id="bus_dmamap_load_bio"><a class="permalink" href="#bus_dmamap_load_bio"><code class="Fn">bus_dmamap_load_bio</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">bio</var>,
- <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps buffers pointed to by <var class="Fa">bio</var> for DMA transfers.
- <var class="Fa">bio</var> may point to either a mapped or unmapped
- buffer.</dd>
- <dt><code class="Fn">bus_dmamap_load_ccb</code>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">ccb</var>,
- <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps data pointed to by <var class="Fa">ccb</var> for DMA transfers. The
- data for <var class="Fa">ccb</var> may be any of the following types:
- <dl class="Bl-tag">
- <dt>CAM_DATA_VADDR</dt>
- <dd>The data is a single KVA buffer.</dd>
- <dt>CAM_DATA_PADDR</dt>
- <dd>The data is a single bus address range.</dd>
- <dt>CAM_DATA_SG</dt>
- <dd>The data is a scatter/gather list of KVA buffers.</dd>
- <dt>CAM_DATA_SG_PADDR</dt>
- <dd>The data is a scatter/gather list of bus address ranges.</dd>
- <dt>CAM_DATA_BIO</dt>
- <dd>The data is contained in a <var class="Vt">struct bio</var> attached
- to the CCB.</dd>
- </dl>
- <p class="Pp" id="bus_dmamap_load_ccb"><a class="permalink" href="#bus_dmamap_load_ccb"><code class="Fn">bus_dmamap_load_ccb</code></a>()
- supports the following CCB XPT function codes:</p>
- <p class="Pp"></p>
- <ul class="Bl-item Bd-indent Bl-compact">
- <li>XPT_ATA_IO</li>
- <li>XPT_CONT_TARGET_IO</li>
- <li>XPT_SCSI_IO</li>
- </ul>
- </dd>
- <dt id="bus_dmamap_load_crp"><a class="permalink" href="#bus_dmamap_load_crp"><code class="Fn">bus_dmamap_load_crp</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">crp</var>,
- <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps the input buffer pointed to by <var class="Fa">crp</var> for DMA
- transfers. The <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied,
- thus no callback deferral will happen.</dd>
- <dt id="bus_dmamap_load_crp_buffer"><a class="permalink" href="#bus_dmamap_load_crp_buffer"><code class="Fn">bus_dmamap_load_crp_buffer</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">cb</var>,
- <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps the crypto data buffer pointed to by <var class="Fa">cb</var> for DMA
- transfers. The <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied,
- thus no callback deferral will happen.</dd>
- <dt><code class="Fn">bus_dmamap_load_mbuf</code>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">mbuf</var>,
- <var class="Fa">callback2</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps mbuf chains for DMA transfers. A <var class="Vt">bus_size_t</var>
- argument is also passed to the callback routine, which contains the mbuf
- chain's packet header length. The <code class="Dv">BUS_DMA_NOWAIT</code>
- flag is implied, thus no callback deferral will happen.
- <p class="Pp">Mbuf chains are assumed to be in kernel virtual address
- space.</p>
- <p class="Pp" id="bus_dmamap_load~5">Beside the error values listed for
- <a class="permalink" href="#bus_dmamap_load~5"><code class="Fn">bus_dmamap_load</code></a>(),
- <code class="Er">EINVAL</code> will be returned if the size of the mbuf
- chain exceeds the maximum limit of the DMA tag.</p>
- </dd>
- <dt id="bus_dmamap_load_mbuf_sg"><a class="permalink" href="#bus_dmamap_load_mbuf_sg"><code class="Fn">bus_dmamap_load_mbuf_sg</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">mbuf</var>,
- <var class="Fa">segs</var>, <var class="Fa">nsegs</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is just like <code class="Fn">bus_dmamap_load_mbuf</code>() except
- that it returns immediately without calling a callback function. It is
- provided for efficiency. The scatter/gather segment array
- <var class="Va">segs</var> is provided by the caller and filled in
- directly by the function. The <var class="Va">nsegs</var> argument is
- returned with the number of segments filled in. Returns the same errors as
- <code class="Fn">bus_dmamap_load_mbuf</code>().</dd>
- <dt><code class="Fn">bus_dmamap_load_uio</code>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">uio</var>,
- <var class="Fa">callback2</var>, <var class="Fa">callback_arg</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which
- maps buffers pointed to by <var class="Fa">uio</var> for DMA transfers. A
- <var class="Vt">bus_size_t</var> argument is also passed to the callback
- routine, which contains the size of <var class="Fa">uio</var>, i.e.
- <var class="Fa">uio-&gt;uio_resid</var>. The
- <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied, thus no callback
- deferral will happen. Returns the same errors as
- <code class="Fn">bus_dmamap_load</code>().
- <p class="Pp">If <var class="Fa">uio-&gt;uio_segflg</var> is
- <code class="Dv">UIO_USERSPACE</code>, then it is assumed that the
- buffer, <var class="Fa">uio</var> is in
- <var class="Fa">uio-&gt;uio_td-&gt;td_proc</var>'s address space. User
- space memory must be in-core and wired prior to attempting a map load
- operation. Pages may be locked using <a class="Xr">vslock(9)</a>.</p>
- </dd>
- <dt id="bus_dmamap_unload~2"><a class="permalink" href="#bus_dmamap_unload~2"><code class="Fn">bus_dmamap_unload</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>)</dt>
- <dd>Unloads a DMA map. Arguments are as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>The DMA map that is to be unloaded.</dd>
- </dl>
- <p class="Pp" id="bus_dmamap_unload~3"><a class="permalink" href="#bus_dmamap_unload~3"><code class="Fn">bus_dmamap_unload</code></a>()
- will not perform any implicit synchronization of DMA buffers. This must
- be done explicitly by a call to
- <code class="Fn">bus_dmamap_sync</code>() prior to unloading the
- map.</p>
- </dd>
- <dt><code class="Fn">bus_dmamap_sync</code>(<var class="Fa">dmat</var>,
- <var class="Fa">map</var>, <var class="Fa">op</var>)</dt>
- <dd>Performs synchronization of a device visible mapping with the CPU visible
- memory referenced by that mapping. Arguments are as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>The DMA mapping to be synchronized.</dd>
- <dt><var class="Fa">op</var></dt>
- <dd>Type of synchronization operation to perform. See the definition of
- <var class="Vt">bus_dmasync_op_t</var> for a description of the
- acceptable values for <var class="Fa">op</var>.</dd>
- </dl>
- <p class="Pp" id="bus_dmamap_sync~3">The
- <a class="permalink" href="#bus_dmamap_sync~3"><code class="Fn">bus_dmamap_sync</code></a>()
- function is the method used to ensure that CPU's and device's direct
- memory access (DMA) to shared memory is coherent. For example, the CPU
- might be used to set up the contents of a buffer that is to be made
- available to a device. To ensure that the data are visible via the
- device's mapping of that memory, the buffer must be loaded and a DMA
- sync operation of <code class="Dv">BUS_DMASYNC_PREWRITE</code> must be
- performed after the CPU has updated the buffer and before the device
- access is initiated. If the CPU modifies this buffer again later,
- another <code class="Dv">BUS_DMASYNC_PREWRITE</code> sync operation must
- be performed before an additional device access. Conversely, suppose a
- device updates memory that is to be read by a CPU. In this case, the
- buffer must be loaded, and a DMA sync operation of
- <code class="Dv">BUS_DMASYNC_PREREAD</code> must be performed before the
- device access is initiated. The CPU will only be able to see the results
- of this memory update once the DMA operation has completed and a
- <code class="Dv">BUS_DMASYNC_POSTREAD</code> sync operation has been
- performed.</p>
- <p class="Pp">If read and write operations are not preceded and followed by
- the appropriate synchronization operations, behavior is undefined.</p>
- </dd>
- <dt id="bus_dmamem_alloc~3"><a class="permalink" href="#bus_dmamem_alloc~3"><code class="Fn">bus_dmamem_alloc</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">**vaddr</var>, <var class="Fa">flags</var>,
- <var class="Fa">*mapp</var>)</dt>
- <dd>Allocates memory that is mapped into KVA at the address returned in
- <var class="Fa">vaddr</var> and that is permanently loaded into the newly
- created <var class="Vt">bus_dmamap_t</var> returned via
- <var class="Fa">mapp</var>. Arguments are as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag describing the constraints of the DMA mapping.</dd>
- <dt><var class="Fa">vaddr</var></dt>
- <dd>Pointer to a pointer that will hold the returned KVA mapping of the
- allocated region.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Flags are defined as follows:
- <dl class="Bl-tag">
- <dt id="BUS_DMA_WAITOK"><a class="permalink" href="#BUS_DMA_WAITOK"><code class="Dv">BUS_DMA_WAITOK</code></a></dt>
- <dd>The routine can safely wait (sleep) for resources.</dd>
- <dt id="BUS_DMA_NOWAIT~2"><a class="permalink" href="#BUS_DMA_NOWAIT~2"><code class="Dv">BUS_DMA_NOWAIT</code></a></dt>
- <dd>The routine is not allowed to wait for resources. If resources are
- not available, <code class="Dv">ENOMEM</code> is returned.</dd>
- <dt id="BUS_DMA_COHERENT~3"><a class="permalink" href="#BUS_DMA_COHERENT~3"><code class="Dv">BUS_DMA_COHERENT</code></a></dt>
- <dd>Attempt to map this memory in a coherent fashion. See
- <a class="permalink" href="#bus_dmamap_create"><code class="Fn" id="bus_dmamap_create">bus_dmamap_create</code></a>()
- above for a description of this flag. For
- <code class="Fn">bus_dmamem_alloc</code>(), the
- <code class="Dv">BUS_DMA_COHERENT</code> flag is currently
- implemented on arm and arm64.</dd>
- <dt id="BUS_DMA_ZERO"><a class="permalink" href="#BUS_DMA_ZERO"><code class="Dv">BUS_DMA_ZERO</code></a></dt>
- <dd>Causes the allocated memory to be set to all zeros.</dd>
- <dt id="BUS_DMA_NOCACHE~2"><a class="permalink" href="#BUS_DMA_NOCACHE~2"><code class="Dv">BUS_DMA_NOCACHE</code></a></dt>
- <dd>The allocated memory will not be cached in the processor caches.
- All memory accesses appear on the bus and are executed without
- reordering. For <code class="Fn">bus_dmamem_alloc</code>(), the
- <code class="Dv">BUS_DMA_NOCACHE</code> flag is currently
- implemented on amd64 and i386 where it results in the Strong
- Uncacheable PAT to be set for the allocated virtual address
- range.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">mapp</var></dt>
- <dd>Pointer to a <var class="Vt">bus_dmamap_t</var> where the resulting
- DMA map will be stored.</dd>
- </dl>
- <p class="Pp" id="bus_dma_tag_create~2">The size of memory to be allocated
- is <var class="Fa">maxsize</var> as specified in the call to
- <a class="permalink" href="#bus_dma_tag_create~2"><code class="Fn">bus_dma_tag_create</code></a>()
- for <var class="Fa">dmat</var>.</p>
- <p class="Pp" id="bus_dmamem_alloc~4">The current implementation of
- <a class="permalink" href="#bus_dmamem_alloc~4"><code class="Fn">bus_dmamem_alloc</code></a>()
- will allocate all requests as a single segment.</p>
- <p class="Pp" id="bus_dmamem_free">An initial load operation is required to
- obtain the bus address of the allocated memory, and an unload operation
- is required before freeing the memory, as described below in
- <a class="permalink" href="#bus_dmamem_free"><code class="Fn">bus_dmamem_free</code></a>().
- Maps are automatically handled by this function and should not be
- explicitly allocated or destroyed.</p>
- <p class="Pp" id="bus_dmamap_sync~4">Although an explicit load is not
- required for each access to the memory referenced by the returned map,
- the synchronization requirements as described in the
- <a class="permalink" href="#bus_dmamap_sync~4"><code class="Fn">bus_dmamap_sync</code></a>()
- section still apply and should be used to achieve portability on
- architectures without coherent buses.</p>
- <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is
- not available for completing the operation.</p>
- </dd>
- <dt id="bus_dmamem_free~2"><a class="permalink" href="#bus_dmamem_free~2"><code class="Fn">bus_dmamem_free</code></a>(<var class="Fa">dmat</var>,
- <var class="Fa">*vaddr</var>, <var class="Fa">map</var>)</dt>
- <dd>Frees memory previously allocated by
- <code class="Fn">bus_dmamem_alloc</code>(). Any mappings will be
- invalidated. Arguments are as follows:
- <dl class="Bl-tag">
- <dt><var class="Fa">dmat</var></dt>
- <dd>DMA tag.</dd>
- <dt><var class="Fa">vaddr</var></dt>
- <dd>Kernel virtual address of the memory.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>DMA map to be invalidated.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Behavior is undefined if invalid arguments are passed to any of
- the above functions. If sufficient resources cannot be allocated for a given
- transaction, <code class="Er">ENOMEM</code> is returned. All routines that
- are not of type <var class="Vt">void</var> will return 0 on success or an
- error code on failure as discussed above.</p>
-<p class="Pp">All <var class="Vt">void</var> routines will succeed if provided
- with valid arguments.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKING"><a class="permalink" href="#LOCKING">LOCKING</a></h1>
-<p class="Pp">Two locking protocols are used by <code class="Nm">bus_dma</code>.
- The first is a private global lock that is used to synchronize access to the
- bounce buffer pool on the architectures that make use of them. This lock is
- strictly a leaf lock that is only used internally to
- <code class="Nm">bus_dma</code> and is not exposed to clients of the
- API.</p>
-<p class="Pp" id="bus_dmamap_load~6">The second protocol involves protecting
- various resources stored in the tag. Since almost all
- <code class="Nm">bus_dma</code> operations are done through requests from
- the driver that created the tag, the most efficient way to protect the tag
- resources is through the lock that the driver uses. In cases where
- <code class="Nm">bus_dma</code> acts on its own without being called by the
- driver, the lock primitive specified in the tag is acquired and released
- automatically. An example of this is when the
- <a class="permalink" href="#bus_dmamap_load~6"><code class="Fn">bus_dmamap_load</code></a>()
- callback function is called from a deferred context instead of the driver
- context. This means that certain <code class="Nm">bus_dma</code> functions
- must always be called with the same lock held that is specified in the tag.
- These functions include:</p>
-<p class="Pp"></p>
-<ul class="Bl-item Bd-indent Bl-compact">
- <li id="bus_dmamap_load~7"><a class="permalink" href="#bus_dmamap_load~7"><code class="Fn">bus_dmamap_load</code></a>()</li>
- <li><code class="Fn">bus_dmamap_load_bio</code>()</li>
- <li><code class="Fn">bus_dmamap_load_ccb</code>()</li>
- <li><code class="Fn">bus_dmamap_load_mbuf</code>()</li>
- <li><code class="Fn">bus_dmamap_load_mbuf_sg</code>()</li>
- <li><code class="Fn">bus_dmamap_load_uio</code>()</li>
- <li><code class="Fn">bus_dmamap_unload</code>()</li>
- <li><code class="Fn">bus_dmamap_sync</code>()</li>
-</ul>
-<p class="Pp">There is one exception to this rule. It is common practice to call
- some of these functions during driver start-up without any locks held. So
- long as there is a guarantee of no possible concurrent use of the tag by
- different threads during this operation, it is safe to not hold a lock for
- these functions.</p>
-<p class="Pp">Certain <code class="Nm">bus_dma</code> operations should not be
- called with the driver lock held, either because they are already protected
- by an internal lock, or because they might sleep due to memory or resource
- allocation. The following functions must not be called with any
- non-sleepable locks held:</p>
-<p class="Pp"></p>
-<ul class="Bl-item Bd-indent Bl-compact">
- <li id="bus_dma_tag_create~3"><a class="permalink" href="#bus_dma_tag_create~3"><code class="Fn">bus_dma_tag_create</code></a>()</li>
- <li id="bus_dmamap_create~2"><a class="permalink" href="#bus_dmamap_create~2"><code class="Fn">bus_dmamap_create</code></a>()</li>
- <li><code class="Fn">bus_dmamem_alloc</code>()</li>
-</ul>
-<p class="Pp">All other functions do not have a locking protocol and can thus be
- called with or without any system or driver locks held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a>, <a class="Xr">rman(9)</a>,
- <a class="Xr">vslock(9)</a></p>
-<p class="Pp"></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Jason R. Thorpe</span>,
- <span class="RsT">A Machine-Independent DMA Framework for NetBSD</span>,
- <i class="RsJ">Proceedings of the Summer 1998 USENIX Technical
- Conference</i>, <span class="RsQ">USENIX Association</span>,
- <span class="RsD">June 1998</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">bus_dma</code> interface first appeared in
- <span class="Ux">NetBSD 1.3</span>.</p>
-<p class="Pp">The <code class="Nm">bus_dma</code> API was adopted from
- <span class="Ux">NetBSD</span> for use in the CAM SCSI subsystem. The
- alterations to the original API were aimed to remove the need for a
- <var class="Vt">bus_dma_segment_t</var> array stored in each
- <var class="Vt">bus_dmamap_t</var> while allowing callers to queue up on
- scarce resources.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bus_dma</code> interface was designed and
- implemented by <span class="An">Jason R. Thorpe</span> of the Numerical
- Aerospace Simulation Facility, NASA Ames Research Center. Additional input
- on the <code class="Nm">bus_dma</code> design was provided by
- <span class="An">Chris Demetriou</span>, <span class="An">Charles
- Hannum</span>, <span class="An">Ross Harvey</span>, <span class="An">Matthew
- Jacob</span>, <span class="An">Jonathan Stone</span>, and
- <span class="An">Matt Thomas</span>.</p>
-<p class="Pp">The <code class="Nm">bus_dma</code> interface in
- <span class="Ux">FreeBSD</span> benefits from the contributions of
- <span class="An">Justin T. Gibbs</span>, <span class="An">Peter Wemm</span>,
- <span class="An">Doug Rabson</span>, <span class="An">Matthew N.
- Dodd</span>, <span class="An">Sam Leffler</span>, <span class="An">Maxime
- Henrion</span>, <span class="An">Jake Burkholder</span>,
- <span class="An">Takahashi Yoshihiro</span>, <span class="An">Scott
- Long</span> and many others.</p>
-<p class="Pp">This manual page was written by <span class="An">Hiten M.
- Pandya</span> and <span class="An">Justin T. Gibbs</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 25, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_generic_detach.9 4.html b/static/freebsd/man9/bus_generic_detach.9 4.html
deleted file mode 100644
index 1f468de0..00000000
--- a/static/freebsd/man9/bus_generic_detach.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GENERIC_DETACH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GENERIC_DETACH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_generic_detach</code> &#x2014;
- <span class="Nd">generic implementation of
- <code class="Dv">DEVICE_DETACH</code> for buses</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_generic_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function provides an implementation of the
- <a class="Xr">DEVICE_DETACH(9)</a> method which can be used by most bus
- code. It uses <a class="Xr">bus_detach_children(9)</a> to detach drivers
- from all child devices giving them a chance to veto the detach request. If
- <a class="permalink" href="#bus_detach_children"><code class="Fn" id="bus_detach_children">bus_detach_children</code></a>()
- succeeds,
- <a class="permalink" href="#bus_generic_detach"><code class="Fn" id="bus_generic_detach">bus_generic_detach</code></a>()
- calls <a class="Xr">device_delete_children(9)</a> to delete all child
- devices.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_detach_children(9)</a>,
- <a class="Xr">device(9)</a>, <a class="Xr">device_delete_children(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_generic_new_pass.9 4.html b/static/freebsd/man9/bus_generic_new_pass.9 4.html
deleted file mode 100644
index c25b1be7..00000000
--- a/static/freebsd/man9/bus_generic_new_pass.9 4.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GENERIC_NEW_PASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GENERIC_NEW_PASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_generic_new_pass</code> &#x2014;
- <span class="Nd">generic implementation of BUS_NEW_PASS for bus
- devices</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_generic_new_pass</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function provides an implementation of the
- <a class="Xr">BUS_NEW_PASS(9)</a> method which can be used by bus drivers.
- It first invokes the <a class="Xr">DEVICE_IDENTIFY(9)</a> method for any
- drivers whose pass level is equal to the new pass level. Then, for each
- attached child device it calls <a class="Xr">BUS_NEW_PASS(9)</a> to rescan
- child buses, and for each unattached child device it calls
- <a class="Xr">device_probe_and_attach(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_NEW_PASS(9)</a>,
- <a class="Xr">bus_set_pass(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">DEVICE_IDENTIFY(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 15, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_generic_print_child.9 3.html b/static/freebsd/man9/bus_generic_print_child.9 3.html
deleted file mode 100644
index d77797f1..00000000
--- a/static/freebsd/man9/bus_generic_print_child.9 3.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GENERIC_PRINT_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GENERIC_PRINT_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_generic_print_child</code>,
- <code class="Nm">bus_print_child_domain</code>,
- <code class="Nm">bus_print_child_footer</code>,
- <code class="Nm">bus_print_child_header</code> &#x2014;
- <span class="Nd">generic implementation of
- <a class="Xr">BUS_PRINT_CHILD(9)</a></span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_generic_print_child</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_print_child_domain</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_print_child_footer</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_print_child_header</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#bus_generic_print_child"><code class="Fn" id="bus_generic_print_child">bus_generic_print_child</code></a>()
- prints out the default device announcement message. Given device
- &#x2018;foo0&#x2019; on bus &#x2018;bar0&#x2019; where foo0 has the
- description &#x201C;FooCard 1234&#x201D; and is associated with the NUMA
- domain 1, the following would be printed:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>foo0: &lt;FooCard 1234&gt; numa-domain 1 on bar0</pre>
-</div>
-<p class="Pp" id="bus_generic_print_child~2"><a class="permalink" href="#bus_generic_print_child~2"><code class="Fn">bus_generic_print_child</code></a>()
- calls the three helper functions
- <code class="Fn">bus_print_child_header</code>(),
- <code class="Fn">bus_print_child_domain</code>(), and
- <code class="Fn">bus_print_child_footer</code>().</p>
-<p class="Pp" id="bus_print_child_header"><a class="permalink" href="#bus_print_child_header"><code class="Fn">bus_print_child_header</code></a>()
- outputs the device name and unit followed by the device description in angle
- brackets (&#x201C;foo0: &lt;FooCard 1234&gt;&#x201D;).</p>
-<p class="Pp" id="bus_print_child_domain"><a class="permalink" href="#bus_print_child_domain"><code class="Fn">bus_print_child_domain</code></a>()
- outputs &#x201C; numa-domain&#x201D; followed by the domain number if
- <a class="permalink" href="#bus_get_domain"><code class="Fn" id="bus_get_domain">bus_get_domain</code></a>()
- returns a valid domain for the device (&#x201C;numa-domain 1&#x201D;). If
- <var class="Fa">dev</var> is not associated witha valid domain, nothing is
- output.</p>
-<p class="Pp" id="bus_print_child_footer"><a class="permalink" href="#bus_print_child_footer"><code class="Fn">bus_print_child_footer</code></a>()
- outputs the string &#x201C; on&#x201D; followed by the parent device's name
- and unit (&#x201C; on bar0&#x201D;).</p>
-<p class="Pp" id="bus_generic_print_child~3">These functions can be used to
- implement <a class="Xr">BUS_PRINT_CHILD(9)</a> in a bus driver if
- <a class="permalink" href="#bus_generic_print_child~3"><code class="Fn">bus_generic_print_child</code></a>()
- is not sufficient.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The number of characters output.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_PRINT_CHILD(9)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_generic_read_ivar.9 4.html b/static/freebsd/man9/bus_generic_read_ivar.9 4.html
deleted file mode 100644
index 4eefb5f9..00000000
--- a/static/freebsd/man9/bus_generic_read_ivar.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GENERIC_READ_IVAR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GENERIC_READ_IVAR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_generic_read_ivar</code>,
- <code class="Nm">bus_generic_write_ivar</code> &#x2014;
- <span class="Nd">generic implementation of
- <code class="Dv">BUS_READ_IVAR</code> and
- <code class="Dv">BUS_WRITE_IVAR</code> for buses</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_generic_read_ivar</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>,
- <var class="Fa" style="white-space: nowrap;">uintptr_t *result</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_generic_write_ivar</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>,
- <var class="Fa" style="white-space: nowrap;">uintptr_t value</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions simply return <code class="Er">ENOENT</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 15, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_generic_shutdown.9 4.html b/static/freebsd/man9/bus_generic_shutdown.9 4.html
deleted file mode 100644
index e09ca54f..00000000
--- a/static/freebsd/man9/bus_generic_shutdown.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GENERIC_SHUTDOWN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GENERIC_SHUTDOWN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_generic_shutdown</code> &#x2014;
- <span class="Nd">generic implementation of
- <code class="Dv">DEVICE_SHUTDOWN</code> for buses</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_generic_shutdown</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function provides an implementation of the
- <a class="Xr">DEVICE_SHUTDOWN(9)</a> method which can be used by most bus
- code. It simply calls the <a class="Xr">DEVICE_SHUTDOWN(9)</a> method of
- each child device attached to the bus.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 15, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_get_resource.9 4.html b/static/freebsd/man9/bus_get_resource.9 4.html
deleted file mode 100644
index 9e11492a..00000000
--- a/static/freebsd/man9/bus_get_resource.9 4.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_GET_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_GET_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_get_resource</code> &#x2014;
- <span class="Nd">read a resource range/value with a given resource
- ID</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_get_resource</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">rman_res_t *startp</var>, <var class="Fa">rman_res_t
- *countp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#bus_get_resource"><code class="Fn" id="bus_get_resource">bus_get_resource</code></a>()
- function reads the range or value of the resource
- <var class="Fa">type</var>, <var class="Fa">rid</var> pair and stores it in
- the <var class="Fa">startp</var> and <var class="Fa">countp</var>
- arguments.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device to read the resource from.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of resource you want to read. It is one of:
- <p class="Pp"></p>
- <dl class="Bl-tag Bl-compact">
- <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt>
- <dd>for IRQs</dd>
- <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt>
- <dd>for ISA DMA lines</dd>
- <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt>
- <dd>for I/O memory</dd>
- <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt>
- <dd>for I/O ports</dd>
- </dl>
- </dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>A bus-specific handle that identifies the resource being read.</dd>
- <dt><var class="Fa">startp</var></dt>
- <dd>A pointer to the start address of this resource.</dd>
- <dt><var class="Fa">countp</var></dt>
- <dd>A pointer to the length of the resource. For example, the size of the
- memory in bytes.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_set_resource(9)</a>,
- <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Sascha
- Wildner</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 26, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_map_resource.9 3.html b/static/freebsd/man9/bus_map_resource.9 3.html
deleted file mode 100644
index 54ae36f4..00000000
--- a/static/freebsd/man9/bus_map_resource.9 3.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_MAP_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_MAP_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_map_resource</code>,
- <code class="Nm">bus_unmap_resource</code>,
- <code class="Nm">resource_init_map_request</code> &#x2014;
- <span class="Nd">map or unmap an active resource</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_map_resource</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">struct resource *r</var>, <var class="Fa">struct
- resource_map_request *args</var>, <var class="Fa">struct resource_map
- *map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_unmap_resource</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">struct resource *r</var>, <var class="Fa">struct
- resource_map *map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">resource_init_map_request</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource_map_request *args</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions create or destroy a mapping of a previously
- activated resource. Mappings permit CPU access to the resource via the
- <a class="Xr">bus_space(9)</a> API.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device that owns the resource.</dd>
- <dt><var class="Fa">r</var></dt>
- <dd>A pointer to the <var class="Vt">struct resource</var> returned by
- <a class="Xr">bus_alloc_resource(9)</a>.</dd>
- <dt><var class="Fa">args</var></dt>
- <dd>A set of optional properties to apply when creating a mapping. This
- argument can be set to <code class="Dv">NULL</code> to request a mapping
- of the entire resource with the default properties.</dd>
- <dt><var class="Fa">map</var></dt>
- <dd>The resource mapping to create or destroy.</dd>
-</dl>
-<section class="Ss">
-<h2 class="Ss" id="Resource_Mappings"><a class="permalink" href="#Resource_Mappings">Resource
- Mappings</a></h2>
-<p class="Pp">Resource mappings are described by a <var class="Vt">struct
- resource_map</var> object. This structure contains a
- <a class="Xr">bus_space(9)</a> tag and handle in the
- <var class="Va">r_bustag</var> and <var class="Va">r_bushandle</var> members
- that can be used for CPU access to the mapping. The structure also contains
- a <var class="Va">r_vaddr</var> member which contains the virtual address of
- the mapping if one exists.</p>
-<p class="Pp" id="bus_read_4">The wrapper API for <var class="Vt">struct
- resource</var> objects described in
- <a class="Xr">bus_activate_resource(9)</a> can also be used with
- <var class="Vt">struct resource_map</var>. For example, a pointer to a
- mapping object can be passed as the first argument to
- <a class="permalink" href="#bus_read_4"><code class="Fn">bus_read_4</code></a>().
- This wrapper API is preferred over using the <var class="Va">r_bustag</var>
- and <var class="Va">r_bushandle</var> members directly.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Optional_Mapping_Properties"><a class="permalink" href="#Optional_Mapping_Properties">Optional
- Mapping Properties</a></h2>
-<p class="Pp">The <var class="Vt">struct resource_map_request</var> object
- passed in <var class="Fa">args</var> can be used to specify optional
- properties of a mapping. The structure must be initialized by invoking
- <a class="permalink" href="#resource_init_map_request"><code class="Fn" id="resource_init_map_request">resource_init_map_request</code></a>().
- Properties are then specified by setting one or more of these members:</p>
-<dl class="Bl-tag">
- <dt id="offset"><var class="Va">offset</var>,
- <var class="Va">length</var></dt>
- <dd>These two members specify a region of the resource to map. By default a
- mapping is created for the entire resource. The
- <var class="Va">offset</var> is relative to the start of the
- resource.</dd>
- <dt id="memattr"><var class="Va">memattr</var></dt>
- <dd>Specifies a memory attribute to use when mapping the resource. By default
- memory mappings use the <code class="Dv">VM_MEMATTR_UNCACHEABLE</code>
- attribute.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This maps a PCI memory BAR with the write-combining memory
- attribute and reads the first 32-bit word:</p>
-<div class="Bd Pp Li">
-<pre> struct resource *r;
- struct resource_map map;
- struct resource_map_request req;
- uint32_t val;
- int rid;
-
- rid = PCIR_BAR(0);
- r = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &amp;rid, RF_ACTIVE |
- RF_UNMAPPED);
- resource_init_map_request(&amp;req);
- req.memattr = VM_MEMATTR_WRITE_COMBINING;
- bus_map_resource(dev, SYS_RES_MEMORY, r, &amp;req, &amp;map);
- val = bus_read_4(&amp;map, 0);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>,
- <a class="Xr">bus_alloc_resource(9)</a>, <a class="Xr">bus_space(9)</a>,
- <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">John
- Baldwin</span>
- &lt;<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_release_resource.9 4.html b/static/freebsd/man9/bus_release_resource.9 4.html
deleted file mode 100644
index fbaa4611..00000000
--- a/static/freebsd/man9/bus_release_resource.9 4.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_RELEASE_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_RELEASE_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_release_resource</code> &#x2014;
- <span class="Nd">release resources on a bus</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_release_resource</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource
- *r</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Free a resource allocated by
- <a class="Xr">bus_alloc_resource(9)</a>. The resource must not be in use on
- release, i.e., call an appropriate function before (e.g.
- <a class="Xr">bus_teardown_intr(9)</a> for IRQs).</p>
-<ul class="Bl-item">
- <li><var class="Fa">dev</var> is the device that owns the resource.</li>
- <li><var class="Fa">r</var> is the pointer to <var class="Va">struct
- resource</var>, i.e., the resource itself, returned by
- <a class="Xr">bus_alloc_resource(9)</a>.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Er">EINVAL</code> is returned, if the device
- <var class="Fa">dev</var> has no parent, <code class="Dv">0</code>
- otherwise. The kernel will panic, if it cannot release the resource.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre> /* deactivate IRQ */
- bus_teardown_intr(dev, foosoftc-&gt;irqres, foosoftc-&gt;irqid);
-
- /* release IRQ resource */
- bus_release_resource(dev, foosoftc-&gt;irqres);
-
- /* release I/O port resource */
- bus_release_resource(dev, foosoftc-&gt;portres);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@big.endian.de">alex@big.endian.de</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_set_pass.9 4.html b/static/freebsd/man9/bus_set_pass.9 4.html
deleted file mode 100644
index 4df5f01d..00000000
--- a/static/freebsd/man9/bus_set_pass.9 4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_SET_PASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_SET_PASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_set_pass</code> &#x2014;
- <span class="Nd">raise the bus pass level</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_set_pass</code>(<var class="Fa" style="white-space: nowrap;">int
- pass</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">bus_set_pass</code> function is called during
- boot to raise the bus pass level to <var class="Fa">pass</var>. The function
- will rescan the device tree for each pass level between the current pass
- level and the new level that has at least one associated driver. The device
- tree rescans are implemented by invoking the
- <a class="Xr">BUS_NEW_PASS(9)</a> method on the root bus device.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_NEW_PASS(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 8, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_set_resource.9 4.html b/static/freebsd/man9/bus_set_resource.9 4.html
deleted file mode 100644
index a24aad50..00000000
--- a/static/freebsd/man9/bus_set_resource.9 4.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_SET_RESOURCE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_SET_RESOURCE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_set_resource</code> &#x2014;
- <span class="Nd">associate a definite resource with a given resource
- ID</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">machine/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">machine/resource.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_set_resource</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">int type</var>, <var class="Fa">int rid</var>,
- <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t
- count</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#bus_set_resource"><code class="Fn" id="bus_set_resource">bus_set_resource</code></a>()
- function sets the start address of the resource <var class="Fa">type</var>,
- <var class="Fa">rid</var> pair to be <var class="Fa">count</var> long.
- Typically, client drivers do not use this interface. Bus drivers, however,
- often use it to set up the resources a client driver uses.</p>
-<p class="Pp">The arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device to set the resource on.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>The type of resource you want to allocate. It is one of:
- <p class="Pp"></p>
- <dl class="Bl-tag Bl-compact">
- <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt>
- <dd>for IRQs</dd>
- <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt>
- <dd>for ISA DMA lines</dd>
- <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt>
- <dd>for I/O ports</dd>
- <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt>
- <dd>for I/O memory</dd>
- </dl>
- </dd>
- <dt><var class="Fa">rid</var></dt>
- <dd>A bus-specific handle that identifies the resource being allocated.</dd>
- <dt><var class="Fa">start</var></dt>
- <dd>The start address of this resource.</dd>
- <dt><var class="Fa">count</var></dt>
- <dd>The length of the resource. For example, the size of the memory in
- bytes.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">bus_get_resource(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 29, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/bus_space.9 3.html b/static/freebsd/man9/bus_space.9 3.html
deleted file mode 100644
index e2f00da9..00000000
--- a/static/freebsd/man9/bus_space.9 3.html
+++ /dev/null
@@ -1,1712 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_SPACE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_SPACE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_space</code>,
- <code class="Nm">bus_space_barrier</code>,
- <code class="Nm">bus_space_copy_region_1</code>,
- <code class="Nm">bus_space_copy_region_2</code>,
- <code class="Nm">bus_space_copy_region_4</code>,
- <code class="Nm">bus_space_copy_region_8</code>,
- <code class="Nm">bus_space_copy_region_stream_1</code>,
- <code class="Nm">bus_space_copy_region_stream_2</code>,
- <code class="Nm">bus_space_copy_region_stream_4</code>,
- <code class="Nm">bus_space_copy_region_stream_8</code>,
- <code class="Nm">bus_space_free</code>,
- <code class="Nm">bus_space_map</code>,
- <code class="Nm">bus_space_peek_1</code>,
- <code class="Nm">bus_space_peek_2</code>,
- <code class="Nm">bus_space_peek_4</code>,
- <code class="Nm">bus_space_peek_8</code>,
- <code class="Nm">bus_space_poke_1</code>,
- <code class="Nm">bus_space_poke_2</code>,
- <code class="Nm">bus_space_poke_4</code>,
- <code class="Nm">bus_space_poke_8</code>,
- <code class="Nm">bus_space_read_1</code>,
- <code class="Nm">bus_space_read_2</code>,
- <code class="Nm">bus_space_read_4</code>,
- <code class="Nm">bus_space_read_8</code>,
- <code class="Nm">bus_space_read_multi_1</code>,
- <code class="Nm">bus_space_read_multi_2</code>,
- <code class="Nm">bus_space_read_multi_4</code>,
- <code class="Nm">bus_space_read_multi_8</code>,
- <code class="Nm">bus_space_read_multi_stream_1</code>,
- <code class="Nm">bus_space_read_multi_stream_2</code>,
- <code class="Nm">bus_space_read_multi_stream_4</code>,
- <code class="Nm">bus_space_read_multi_stream_8</code>,
- <code class="Nm">bus_space_read_region_1</code>,
- <code class="Nm">bus_space_read_region_2</code>,
- <code class="Nm">bus_space_read_region_4</code>,
- <code class="Nm">bus_space_read_region_8</code>,
- <code class="Nm">bus_space_read_region_stream_1</code>,
- <code class="Nm">bus_space_read_region_stream_2</code>,
- <code class="Nm">bus_space_read_region_stream_4</code>,
- <code class="Nm">bus_space_read_region_stream_8</code>,
- <code class="Nm">bus_space_read_stream_1</code>,
- <code class="Nm">bus_space_read_stream_2</code>,
- <code class="Nm">bus_space_read_stream_4</code>,
- <code class="Nm">bus_space_read_stream_8</code>,
- <code class="Nm">bus_space_set_multi_1</code>,
- <code class="Nm">bus_space_set_multi_2</code>,
- <code class="Nm">bus_space_set_multi_4</code>,
- <code class="Nm">bus_space_set_multi_8</code>,
- <code class="Nm">bus_space_set_multi_stream_1</code>,
- <code class="Nm">bus_space_set_multi_stream_2</code>,
- <code class="Nm">bus_space_set_multi_stream_4</code>,
- <code class="Nm">bus_space_set_multi_stream_8</code>,
- <code class="Nm">bus_space_set_region_1</code>,
- <code class="Nm">bus_space_set_region_2</code>,
- <code class="Nm">bus_space_set_region_4</code>,
- <code class="Nm">bus_space_set_region_8</code>,
- <code class="Nm">bus_space_set_region_stream_1</code>,
- <code class="Nm">bus_space_set_region_stream_2</code>,
- <code class="Nm">bus_space_set_region_stream_4</code>,
- <code class="Nm">bus_space_set_region_stream_8</code>,
- <code class="Nm">bus_space_subregion</code>,
- <code class="Nm">bus_space_unmap</code>,
- <code class="Nm">bus_space_write_1</code>,
- <code class="Nm">bus_space_write_2</code>,
- <code class="Nm">bus_space_write_4</code>,
- <code class="Nm">bus_space_write_8</code>,
- <code class="Nm">bus_space_write_multi_1</code>,
- <code class="Nm">bus_space_write_multi_2</code>,
- <code class="Nm">bus_space_write_multi_4</code>,
- <code class="Nm">bus_space_write_multi_8</code>,
- <code class="Nm">bus_space_write_multi_stream_1</code>,
- <code class="Nm">bus_space_write_multi_stream_2</code>,
- <code class="Nm">bus_space_write_multi_stream_4</code>,
- <code class="Nm">bus_space_write_multi_stream_8</code>,
- <code class="Nm">bus_space_write_region_1</code>,
- <code class="Nm">bus_space_write_region_2</code>,
- <code class="Nm">bus_space_write_region_4</code>,
- <code class="Nm">bus_space_write_region_8</code>,
- <code class="Nm">bus_space_write_region_stream_1</code>,
- <code class="Nm">bus_space_write_region_stream_2</code>,
- <code class="Nm">bus_space_write_region_stream_4</code>,
- <code class="Nm">bus_space_write_region_stream_8</code>,
- <code class="Nm">bus_space_write_stream_1</code>,
- <code class="Nm">bus_space_write_stream_2</code>,
- <code class="Nm">bus_space_write_stream_4</code>,
- <code class="Nm">bus_space_write_stream_8</code> &#x2014;
- <span class="Nd">bus space manipulation functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_map</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_addr_t address</var>,
- <var class="Fa">bus_size_t size</var>, <var class="Fa">int flags</var>,
- <var class="Fa">bus_space_handle_t *handlep</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_unmap</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_subregion</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t
- size</var>, <var class="Fa">bus_space_handle_t *nhandlep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_alloc</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_addr_t reg_start</var>,
- <var class="Fa">bus_addr_t reg_end</var>, <var class="Fa">bus_size_t
- size</var>, <var class="Fa">bus_size_t alignment</var>,
- <var class="Fa">bus_size_t boundary</var>, <var class="Fa">int flags</var>,
- <var class="Fa">bus_addr_t *addrp</var>, <var class="Fa">bus_space_handle_t
- *handlep</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_free</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bus_space_read_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bus_space_read_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bus_space_read_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">bus_space_read_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_barrier</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t
- length</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> functions exist to allow
- device drivers machine-independent access to bus memory and register areas.
- All of the functions and types described in this document can be used by
- including the
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> header
- file.</p>
-<p class="Pp">Many common devices are used on multiple architectures, but are
- accessed differently on each because of architectural constraints. For
- instance, a device which is mapped in one system's I/O space may be mapped
- in memory space on a second system. On a third system, architectural
- limitations might change the way registers need to be accessed (e.g.
- creating a non-linear register space). In some cases, a single driver may
- need to access the same type of device in multiple ways in a single system
- or architecture. The goal of the <code class="Nm">bus_space</code> functions
- is to allow a single driver source file to manipulate a set of devices on
- different system architectures, and to allow a single driver object file to
- manipulate a set of devices on multiple bus types on a single
- architecture.</p>
-<p class="Pp">Not all buses have to implement all functions described in this
- document, though that is encouraged if the operations are logically
- supported by the bus. Unimplemented functions should cause compile-time
- errors if possible.</p>
-<p class="Pp">All of the interface definitions described in this document are
- shown as function prototypes and discussed as if they were required to be
- functions. Implementations are encouraged to implement prototyped
- (type-checked) versions of these interfaces, but may implement them as
- macros if appropriate. Machine-dependent types, variables, and functions
- should be marked clearly in
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> to avoid
- confusion with the machine-independent types and functions, and, if
- possible, should be given names which make the machine-dependence clear.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONCEPTS_AND_GUIDELINES"><a class="permalink" href="#CONCEPTS_AND_GUIDELINES">CONCEPTS
- AND GUIDELINES</a></h1>
-<p class="Pp">Bus spaces are described by bus space tags, which can be created
- only by machine-dependent code. A given machine may have several different
- types of bus space (e.g. memory space and I/O space), and thus may provide
- multiple different bus space tags. Individual buses or devices on a machine
- may use more than one bus space tag. For instance, ISA devices are given an
- ISA memory space tag and an ISA I/O space tag. Architectures may have
- several different tags which represent the same type of space, for instance
- because of multiple different host bus interface chipsets.</p>
-<p class="Pp">A range in bus space is described by a bus address and a bus size.
- The bus address describes the start of the range in bus space. The bus size
- describes the size of the range in bytes. Buses which are not byte
- addressable may require use of bus space ranges with appropriately aligned
- addresses and properly rounded sizes.</p>
-<p class="Pp">Access to regions of bus space is facilitated by use of bus space
- handles, which are usually created by mapping a specific range of a bus
- space. Handles may also be created by allocating and mapping a range of bus
- space, the actual location of which is picked by the implementation within
- bounds specified by the caller of the allocation function.</p>
-<p class="Pp">All of the bus space access functions require one bus space tag
- argument, at least one handle argument, and at least one offset argument (a
- bus size). The bus space tag specifies the space, each handle specifies a
- region in the space, and each offset specifies the offset into the region of
- the actual location(s) to be accessed. Offsets are given in bytes, though
- buses may impose alignment constraints. The offset used to access data
- relative to a given handle must be such that all of the data being accessed
- is in the mapped region that the handle describes. Trying to access data
- outside that region is an error.</p>
-<p class="Pp">Because some architectures' memory systems use buffering to
- improve memory and device access performance, there is a mechanism which can
- be used to create &#x201C;barriers&#x201D; in the bus space read and write
- stream. There are three types of barriers: read, write, and read/write. All
- reads started to the region before a read barrier must complete before any
- reads after the read barrier are started. (The analogous requirement is true
- for write barriers.) Read/write barriers force all reads and writes started
- before the barrier to complete before any reads or writes after the barrier
- are started. Correctly-written drivers will include all appropriate
- barriers, and assume only the read/write ordering imposed by the barrier
- operations.</p>
-<p class="Pp">People trying to write portable drivers with the
- <code class="Nm">bus_space</code> functions should try to make minimal
- assumptions about what the system allows. In particular, they should expect
- that the system requires bus space addresses being accessed to be naturally
- aligned (i.e., base address of handle added to offset is a multiple of the
- access size), and that the system does alignment checking on pointers (i.e.,
- pointer to objects being read and written must point to properly-aligned
- data).</p>
-<p class="Pp">The descriptions of the <code class="Nm">bus_space</code>
- functions given below all assume that they are called with proper arguments.
- If called with invalid arguments or arguments that are out of range (e.g.
- trying to access data outside of the region mapped when a given handle was
- created), undefined behaviour results. In that case, they may cause the
- system to halt, either intentionally (via panic) or unintentionally (by
- causing a fatal trap of by some other means) or may cause improper operation
- which is not immediately fatal. Functions which return
- <var class="Ft">void</var> or which return data read from bus space (i.e.,
- functions which do not obviously return an error code) do not fail. They
- could only fail if given invalid arguments, and in that case their behaviour
- is undefined. Functions which take a count of bytes have undefined results
- if the specified <var class="Fa">count</var> is zero.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="TYPES"><a class="permalink" href="#TYPES">TYPES</a></h1>
-<p class="Pp">Several types are defined in
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> to
- facilitate use of the <code class="Nm">bus_space</code> functions by
- drivers.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_addr_t"><a class="permalink" href="#bus_addr_t"><var class="Vt">bus_addr_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_addr_t</var> type is used to describe bus
- addresses. It must be an unsigned integral type capable of holding the
- largest bus address usable by the architecture. This type is primarily used
- when mapping and unmapping bus space.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_size_t"><a class="permalink" href="#bus_size_t"><var class="Vt">bus_size_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_size_t</var> type is used to describe
- sizes of ranges in bus space. It must be an unsigned integral type capable
- of holding the size of the largest bus address range usable on the
- architecture. This type is used by virtually all of the
- <code class="Nm">bus_space</code> functions, describing sizes when mapping
- regions and offsets into regions when performing space access
- operations.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_tag_t"><a class="permalink" href="#bus_space_tag_t"><var class="Vt">bus_space_tag_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_space_tag_t</var> type is used to describe
- a particular bus space on a machine. Its contents are machine-dependent and
- should be considered opaque by machine-independent code. This type is used
- by all <code class="Nm">bus_space</code> functions to name the space on
- which they are operating.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_handle_t"><a class="permalink" href="#bus_space_handle_t"><var class="Vt">bus_space_handle_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_space_handle_t</var> type is used to
- describe a mapping of a range of bus space. Its contents are
- machine-dependent and should be considered opaque by machine-independent
- code. This type is used when performing bus space access operations.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MAPPING_AND_UNMAPPING_BUS_SPACE"><a class="permalink" href="#MAPPING_AND_UNMAPPING_BUS_SPACE">MAPPING
- AND UNMAPPING BUS SPACE</a></h1>
-<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span>
- version of these functions and may or may not apply to the
- <span class="Ux">FreeBSD</span> version.</p>
-<p class="Pp" id="bus_space_map">Bus space must be mapped before it can be used,
- and should be unmapped when it is no longer needed. The
- <a class="permalink" href="#bus_space_map"><code class="Fn">bus_space_map</code></a>()
- and <code class="Fn">bus_space_unmap</code>() functions provide these
- capabilities.</p>
-<p class="Pp" id="bus_space_subregion">Some drivers need to be able to pass a
- subregion of already-mapped bus space to another driver or module within a
- driver. The
- <a class="permalink" href="#bus_space_subregion"><code class="Fn">bus_space_subregion</code></a>()
- function allows such subregions to be created.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_map_space_address_size_flags_handlep"><a class="permalink" href="#bus_space_map_space_address_size_flags_handlep"><code class="Fn">bus_space_map</code>(<var class="Fa">space</var>,
- <var class="Fa">address</var>, <var class="Fa">size</var>,
- <var class="Fa">flags</var>, <var class="Fa">handlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_map</code>() function maps the
- region of bus space named by the <var class="Fa">space</var>,
- <var class="Fa">address</var>, and <var class="Fa">size</var> arguments. If
- successful, it returns zero and fills in the bus space handle pointed to by
- <var class="Fa">handlep</var> with the handle that can be used to access the
- mapped region. If unsuccessful, it will return non-zero and leave the bus
- space handle pointed to by <var class="Fa">handlep</var> in an undefined
- state.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument controls how the space is
- to be mapped. Supported flags include:</p>
-<dl class="Bl-tag">
- <dt id="BUS_SPACE_MAP_CACHEABLE"><a class="permalink" href="#BUS_SPACE_MAP_CACHEABLE"><code class="Dv">BUS_SPACE_MAP_CACHEABLE</code></a></dt>
- <dd>Try to map the space so that accesses can be cached and/or prefetched by
- the system. If this flag is not specified, the implementation should map
- the space so that it will not be cached or prefetched.
- <p class="Pp">This flag must have a value of 1 on all implementations for
- backward compatibility.</p>
- </dd>
- <dt id="BUS_SPACE_MAP_LINEAR"><a class="permalink" href="#BUS_SPACE_MAP_LINEAR"><code class="Dv">BUS_SPACE_MAP_LINEAR</code></a></dt>
- <dd>Try to map the space so that its contents can be accessed linearly via
- normal memory access methods (e.g. pointer dereferencing and structure
- accesses). This is useful when software wants to do direct access to a
- memory device, e.g. a frame buffer. If this flag is specified and linear
- mapping is not possible, the
- <a class="permalink" href="#bus_space_map~2"><code class="Fn" id="bus_space_map~2">bus_space_map</code></a>()
- call should fail. If this flag is not specified, the system may map the
- space in whatever way is most convenient.</dd>
- <dt id="BUS_SPACE_MAP_NONPOSTED"><a class="permalink" href="#BUS_SPACE_MAP_NONPOSTED"><code class="Dv">BUS_SPACE_MAP_NONPOSTED</code></a></dt>
- <dd>Try to map the space using non-posted device memory. This is to support
- buses and devices where mapping with posted device memory is unsupported
- or broken. This flag is currently only available on arm64.</dd>
-</dl>
-<p class="Pp">Not all combinations of flags make sense or are supported with all
- spaces. For instance, <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may be
- meaningless when used on many systems' I/O port spaces, and on some systems
- <code class="Dv">BUS_SPACE_MAP_LINEAR</code> without
- <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may never work. When the
- system hardware or firmware provides hints as to how spaces should be mapped
- (e.g. the PCI memory mapping registers' &#x201C;prefetchable&#x201D; bit),
- those hints should be followed for maximum compatibility. On some systems,
- requesting a mapping that cannot be satisfied (e.g. requesting a
- non-cacheable mapping when the system can only provide a cacheable one) will
- cause the request to fail.</p>
-<p class="Pp">Some implementations may keep track of use of bus space for some
- or all bus spaces and refuse to allow duplicate allocations. This is
- encouraged for bus spaces which have no notion of slot-specific space
- addressing, such as ISA, and for spaces which coexist with those spaces
- (e.g. PCI memory and I/O spaces co-existing with ISA memory and I/O
- spaces).</p>
-<p class="Pp">Mapped regions may contain areas for which there is no device on
- the bus. If space in those areas is accessed, the results are
- bus-dependent.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap"><code class="Fn" id="bus_space_unmap">bus_space_unmap</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_unmap</code>() function unmaps a
- region of bus space mapped with <code class="Fn">bus_space_map</code>().
- When unmapping a region, the <var class="Fa">size</var> specified should be
- the same as the size given to <code class="Fn">bus_space_map</code>() when
- mapping that region.</p>
-<p class="Pp" id="bus_space_unmap~2">After
- <a class="permalink" href="#bus_space_unmap~2"><code class="Fn">bus_space_unmap</code></a>()
- is called on a handle, that handle is no longer valid. (If copies were made
- of the handle they are no longer valid, either.)</p>
-<p class="Pp" id="bus_space_unmap~3">This function will never fail. If it would
- fail (e.g. because of an argument error), that indicates a software bug
- which should cause a panic. In that case,
- <a class="permalink" href="#bus_space_unmap~3"><code class="Fn">bus_space_unmap</code></a>()
- will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_subregion_space_handle_offset_size_nhandlep"><a class="permalink" href="#bus_space_subregion_space_handle_offset_size_nhandlep"><code class="Fn">bus_space_subregion</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">size</var>, <var class="Fa">nhandlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_subregion</code>() function is a
- convenience function which makes a new handle to some subregion of an
- already-mapped region of bus space. The subregion described by the new
- handle starts at byte offset <var class="Fa">offset</var> into the region
- described by <var class="Fa">handle</var>, with the size give by
- <var class="Fa">size</var>, and must be wholly contained within the original
- region.</p>
-<p class="Pp" id="bus_space_subregion~2">If successful,
- <a class="permalink" href="#bus_space_subregion~2"><code class="Fn">bus_space_subregion</code></a>()
- returns zero and fills in the bus space handle pointed to by
- <var class="Fa">nhandlep</var>. If unsuccessful, it returns non-zero and
- leaves the bus space handle pointed to by <var class="Fa">nhandlep</var> in
- an undefined state. In either case, the handle described by
- <var class="Fa">handle</var> remains valid and is unmodified.</p>
-<p class="Pp" id="bus_space_subregion~3">When done with a handle created by
- <a class="permalink" href="#bus_space_subregion~3"><code class="Fn">bus_space_subregion</code></a>(),
- the handle should be thrown away. Under no circumstances should
- <code class="Fn">bus_space_unmap</code>() be used on the handle. Doing so
- may confuse any resource management being done on the space, and will result
- in undefined behaviour. When <code class="Fn">bus_space_unmap</code>() or
- <code class="Fn">bus_space_free</code>() is called on a handle, all
- subregions of that handle become invalid.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ALLOCATING_AND_FREEING_BUS_SPACE"><a class="permalink" href="#ALLOCATING_AND_FREEING_BUS_SPACE">ALLOCATING
- AND FREEING BUS SPACE</a></h1>
-<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span>
- version of these functions and may or may not apply to the
- <span class="Ux">FreeBSD</span> version.</p>
-<p class="Pp" id="bus_space_alloc">Some devices require or allow bus space to be
- allocated by the operating system for device use. When the devices no longer
- need the space, the operating system should free it for use by other
- devices. The
- <a class="permalink" href="#bus_space_alloc"><code class="Fn">bus_space_alloc</code></a>()
- and <code class="Fn">bus_space_free</code>() functions provide these
- capabilities.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><a class="permalink" href="#bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><code class="Fn">bus_space_alloc</code>(<var class="Fa">space</var>,
- <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>,
- <var class="Fa">size</var>, <var class="Fa">alignment</var>,
- <var class="Fa">boundary</var>, <var class="Fa">flags</var>,
- <var class="Fa">addrp</var>, <var class="Fa">handlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_alloc</code>() function allocates
- and maps a region of bus space with the size given by
- <var class="Fa">size</var>, corresponding to the given constraints. If
- successful, it returns zero, fills in the bus address pointed to by
- <var class="Fa">addrp</var> with the bus space address of the allocated
- region, and fills in the bus space handle pointed to by
- <var class="Fa">handlep</var> with the handle that can be used to access
- that region. If unsuccessful, it returns non-zero and leaves the bus address
- pointed to by <var class="Fa">addrp</var> and the bus space handle pointed
- to by <var class="Fa">handlep</var> in an undefined state.</p>
-<p class="Pp" id="bus_space_alloc~2">Constraints on the allocation are given by
- the <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>,
- <var class="Fa">alignment</var>, and <var class="Fa">boundary</var>
- parameters. The allocated region will start at or after
- <var class="Fa">reg_start</var> and end before or at
- <var class="Fa">reg_end</var>. The <var class="Fa">alignment</var>
- constraint must be a power of two, and the allocated region will start at an
- address that is an even multiple of that power of two. The
- <var class="Fa">boundary</var> constraint, if non-zero, ensures that the
- region is allocated so that <var class="Fa">first address in region</var> /
- <var class="Fa">boundary</var> has the same value as <var class="Fa">last
- address in region</var> / <var class="Fa">boundary</var>. If the constraints
- cannot be met,
- <a class="permalink" href="#bus_space_alloc~2"><code class="Fn">bus_space_alloc</code></a>()
- will fail. It is an error to specify a set of constraints that can never be
- met (for example, <var class="Fa">size</var> greater than
- <var class="Fa">boundary</var>).</p>
-<p class="Pp" id="bus_space_map~3">The <var class="Fa">flags</var> parameter is
- the same as the like-named parameter to
- <a class="permalink" href="#bus_space_map~3"><code class="Fn">bus_space_map</code></a>(),
- the same flag values should be used, and they have the same meanings.</p>
-<p class="Pp" id="bus_space_alloc~3">Handles created by
- <a class="permalink" href="#bus_space_alloc~3"><code class="Fn">bus_space_alloc</code></a>()
- should only be freed with <code class="Fn">bus_space_free</code>(). Trying
- to use <code class="Fn">bus_space_unmap</code>() on them causes undefined
- behaviour. The <code class="Fn">bus_space_subregion</code>() function can be
- used on handles created by <code class="Fn">bus_space_alloc</code>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_free_space_handle_size"><a class="permalink" href="#bus_space_free_space_handle_size"><code class="Fn">bus_space_free</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_free</code>() function unmaps and
- frees a region of bus space mapped and allocated with
- <code class="Fn">bus_space_alloc</code>(). When unmapping a region, the
- <var class="Fa">size</var> specified should be the same as the size given to
- <code class="Fn">bus_space_alloc</code>() when allocating the region.</p>
-<p class="Pp" id="bus_space_free">After
- <a class="permalink" href="#bus_space_free"><code class="Fn">bus_space_free</code></a>()
- is called on a handle, that handle is no longer valid. (If copies were made
- of the handle, they are no longer valid, either.)</p>
-<p class="Pp" id="bus_space_free~2">This function will never fail. If it would
- fail (e.g. because of an argument error), that indicates a software bug
- which should cause a panic. In that case,
- <a class="permalink" href="#bus_space_free~2"><code class="Fn">bus_space_free</code></a>()
- will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="READING_AND_WRITING_SINGLE_DATA_ITEMS"><a class="permalink" href="#READING_AND_WRITING_SINGLE_DATA_ITEMS">READING
- AND WRITING SINGLE DATA ITEMS</a></h1>
-<p class="Pp">The simplest way to access bus space is to read or write a single
- data item. The <code class="Fn">bus_space_read_N</code>() and
- <code class="Fn">bus_space_write_N</code>() families of functions provide
- the ability to read and write 1, 2, 4, and 8 byte data items on buses which
- support those access sizes.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1"><code class="Fn" id="bus_space_read_1">bus_space_read_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2"><code class="Fn" id="bus_space_read_2">bus_space_read_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4"><code class="Fn" id="bus_space_read_4">bus_space_read_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8"><code class="Fn" id="bus_space_read_8">bus_space_read_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_N</code>() family of functions
- reads a 1, 2, 4, or 8 byte data item from the offset specified by
- <var class="Fa">offset</var> into the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The location being read must lie within the bus
- space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data item being read. On some systems, not obeying this requirement
- may cause incorrect data to be read, on others it may cause a system
- crash.</p>
-<p class="Pp" id="bus_space_read_N">Read operations done by the
- <a class="permalink" href="#bus_space_read_N"><code class="Fn">bus_space_read_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1"><code class="Fn" id="bus_space_write_1">bus_space_write_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2"><code class="Fn" id="bus_space_write_2">bus_space_write_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4"><code class="Fn" id="bus_space_write_4">bus_space_write_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8"><code class="Fn" id="bus_space_write_8">bus_space_write_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_N</code>() family of
- functions writes a 1, 2, 4, or 8 byte data item to the offset specified by
- <var class="Fa">offset</var> into the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The location being written must lie within the
- bus space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data item being written. On some systems, not obeying this
- requirement may cause incorrect data to be written, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_write_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_N"><code class="Fn">bus_space_write_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND"><a class="permalink" href="#PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND">PROBING
- BUS SPACE FOR HARDWARE WHICH MAY NOT RESPOND</a></h1>
-<p class="Pp">One problem with the
- <a class="permalink" href="#bus_space_read_N~2"><code class="Fn" id="bus_space_read_N~2">bus_space_read_N</code></a>()
- and <code class="Fn">bus_space_write_N</code>() family of functions is that
- they provide no protection against exceptions which can occur when no
- physical hardware or device responds to the read or write cycles. In such a
- situation, the system typically would panic due to a kernel-mode bus error.
- The <code class="Fn">bus_space_peek_N</code>() and
- <code class="Fn">bus_space_poke_N</code>() family of functions provide a
- mechanism to handle these exceptions gracefully without the risk of crashing
- the system.</p>
-<p class="Pp" id="bus_space_read_N~3">As with
- <a class="permalink" href="#bus_space_read_N~3"><code class="Fn">bus_space_read_N</code></a>()
- and <code class="Fn">bus_space_write_N</code>(), the peek and poke functions
- provide the ability to read and write 1, 2, 4, and 8 byte data items on
- busses which support those access sizes. All of the constraints specified in
- the descriptions of the <code class="Fn">bus_space_read_N</code>() and
- <code class="Fn">bus_space_write_N</code>() functions also apply to
- <code class="Fn">bus_space_peek_N</code>() and
- <code class="Fn">bus_space_poke_N</code>().</p>
-<p class="Pp" id="bus_space_barrier">In addition, explicit calls to the
- <a class="permalink" href="#bus_space_barrier"><code class="Fn">bus_space_barrier</code></a>()
- function are not required as the implementation will ensure all pending
- operations complete before the peek or poke operation starts. The
- implementation will also ensure that the peek or poke operations complete
- before returning.</p>
-<p class="Pp" id="bus_space_peek_N">The return value indicates the outcome of
- the peek or poke operation. A return value of zero implies that a hardware
- device is responding to the operation at the specified offset in the bus
- space. A non-zero return value indicates that the kernel intercepted a
- hardware exception (e.g., bus error) when the peek or poke operation was
- attempted. Note that some busses are incapable of generating exceptions when
- non-existent hardware is accessed. In such cases, these functions will
- always return zero and the value of the data read by
- <a class="permalink" href="#bus_space_peek_N"><code class="Fn">bus_space_peek_N</code></a>()
- will be unspecified.</p>
-<p class="Pp" id="bus_space_peek_N~2">Finally, it should be noted that at this
- time the
- <a class="permalink" href="#bus_space_peek_N~2"><code class="Fn">bus_space_peek_N</code></a>()
- and <code class="Fn">bus_space_poke_N</code>() functions are not re-entrant
- and should not, therefore, be used from within an interrupt service routine.
- This constraint may be removed at some point in the future.</p>
-<p class="Pp"></p>
-<dl class="Bl-ohang Bl-compact">
- <dt id="bus_space_peek_1"><a class="permalink" href="#bus_space_peek_1"><code class="Fn">bus_space_peek_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_2"><a class="permalink" href="#bus_space_peek_2"><code class="Fn">bus_space_peek_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_4"><a class="permalink" href="#bus_space_peek_4"><code class="Fn">bus_space_peek_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_8"><a class="permalink" href="#bus_space_peek_8"><code class="Fn">bus_space_peek_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd>
- <p class="Pp" id="bus_space_peek_N~3">The
- <a class="permalink" href="#bus_space_peek_N~3"><code class="Fn">bus_space_peek_N</code></a>()
- family of functions cautiously read a 1, 2, 4, or 8 byte data item from
- the offset specified by <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The data item read is stored in the
- location pointed to by <var class="Fa">datap</var>. It is permissible
- for <var class="Fa">datap</var> to be NULL, in which case the data item
- will be discarded after being read.</p>
- <p class="Pp"></p>
- </dd>
- <dt id="bus_space_poke_1"><a class="permalink" href="#bus_space_poke_1"><code class="Fn">bus_space_poke_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_2"><a class="permalink" href="#bus_space_poke_2"><code class="Fn">bus_space_poke_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_4"><a class="permalink" href="#bus_space_poke_4"><code class="Fn">bus_space_poke_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_8"><a class="permalink" href="#bus_space_poke_8"><code class="Fn">bus_space_poke_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd>
- <p class="Pp" id="bus_space_poke_N">The
- <a class="permalink" href="#bus_space_poke_N"><code class="Fn">bus_space_poke_N</code></a>()
- family of functions cautiously write a 1, 2, 4, or 8 byte data item
- specified by <var class="Fa">value</var> to the offset specified by
- <var class="Fa">offset</var> in the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BARRIERS"><a class="permalink" href="#BARRIERS">BARRIERS</a></h1>
-<p class="Pp">In order to allow high-performance buffering implementations to
- avoid bus activity on every operation, read and write ordering should be
- specified explicitly by drivers when necessary. The
- <code class="Fn">bus_space_barrier</code>() function provides that
- ability.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_barrier_space_handle_offset_length_flags"><a class="permalink" href="#bus_space_barrier_space_handle_offset_length_flags"><code class="Fn">bus_space_barrier</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">length</var>, <var class="Fa">flags</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_barrier</code>() function enforces
- ordering of bus space read and write operations for the specified subregion
- (described by the <var class="Fa">offset</var> and
- <var class="Fa">length</var> parameters) of the region named by
- <var class="Fa">handle</var> in the space named by
- <var class="Fa">space</var>.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument controls what types of
- operations are to be ordered. Supported flags are:</p>
-<dl class="Bl-tag">
- <dt id="BUS_SPACE_BARRIER_READ"><a class="permalink" href="#BUS_SPACE_BARRIER_READ"><code class="Dv">BUS_SPACE_BARRIER_READ</code></a></dt>
- <dd>Synchronize read operations.</dd>
- <dt id="BUS_SPACE_BARRIER_WRITE"><a class="permalink" href="#BUS_SPACE_BARRIER_WRITE"><code class="Dv">BUS_SPACE_BARRIER_WRITE</code></a></dt>
- <dd>Synchronize write operations.</dd>
-</dl>
-<p class="Pp">Those flags can be combined (or-ed together) to enforce ordering
- on both read and write operations.</p>
-<p class="Pp">All of the specified type(s) of operation which are done to the
- region before the barrier operation are guaranteed to complete before any of
- the specified type(s) of operation done after the barrier.</p>
-<p class="Pp">Example: Consider a hypothetical device with two single-byte
- ports, one write-only input port (at offset 0) and a read-only output port
- (at offset 1). Operation of the device is as follows: data bytes are written
- to the input port, and are placed by the device on a stack, the top of which
- is read by reading from the output port. The sequence to correctly write two
- data bytes to the device then read those two data bytes back would be:</p>
-<div class="Bd Pp Li">
-<pre>/*
- * t and h are the tag and handle for the mapped device's
- * space.
- */
-bus_space_write_1(t, h, 0, data0);
-bus_space_barrier(t, h, 0, 1, BUS_SPACE_BARRIER_WRITE); /* 1 */
-bus_space_write_1(t, h, 0, data1);
-bus_space_barrier(t, h, 0, 2,
- BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); /* 2 */
-ndata1 = bus_space_read_1(t, h, 1);
-bus_space_barrier(t, h, 1, 1, BUS_SPACE_BARRIER_READ); /* 3 */
-ndata0 = bus_space_read_1(t, h, 1);
-/* data0 == ndata0, data1 == ndata1 */</pre>
-</div>
-<p class="Pp">The first barrier makes sure that the first write finishes before
- the second write is issued, so that two writes to the input port are done in
- order and are not collapsed into a single write. This ensures that the data
- bytes are written to the device correctly and in order.</p>
-<p class="Pp">The second barrier makes sure that the writes to the output port
- finish before any of the reads to the input port are issued, thereby making
- sure that all of the writes are finished before data is read. This ensures
- that the first byte read from the device really is the last one that was
- written.</p>
-<p class="Pp">The third barrier makes sure that the first read finishes before
- the second read is issued, ensuring that data is read correctly and in
- order.</p>
-<p class="Pp">The barriers in the example above are specified to cover the
- absolute minimum number of bus space locations. It is correct (and often
- easier) to make barrier operations cover the device's whole range of bus
- space, that is, to specify an offset of zero and the size of the whole
- region.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="REGION_OPERATIONS"><a class="permalink" href="#REGION_OPERATIONS">REGION
- OPERATIONS</a></h1>
-<p class="Pp">Some devices use buffers which are mapped as regions in bus space.
- Often, drivers want to copy the contents of those buffers to or from memory,
- e.g. into mbufs which can be passed to higher levels of the system or from
- mbufs to be output to a network. In order to allow drivers to do this as
- efficiently as possible, the
- <a class="permalink" href="#bus_space_read_region_N"><code class="Fn" id="bus_space_read_region_N">bus_space_read_region_N</code></a>()
- and <code class="Fn">bus_space_write_region_N</code>() families of functions
- are provided.</p>
-<p class="Pp" id="bus_space_copy_region_N">Drivers occasionally need to copy one
- region of a bus space to another, or to set all locations in a region of bus
- space to contain a single value. The
- <a class="permalink" href="#bus_space_copy_region_N"><code class="Fn">bus_space_copy_region_N</code></a>()
- family of functions and the <code class="Fn">bus_space_set_region_N</code>()
- family of functions allow drivers to perform these operations.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1"><code class="Fn" id="bus_space_read_region_1">bus_space_read_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2"><code class="Fn" id="bus_space_read_region_2">bus_space_read_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4"><code class="Fn" id="bus_space_read_region_4">bus_space_read_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8"><code class="Fn" id="bus_space_read_region_8">bus_space_read_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_region_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from bus space starting at byte offset <var class="Fa">offset</var> in the
- region specified by <var class="Fa">handle</var> of the bus space specified
- by <var class="Fa">space</var> and writes them into the array specified by
- <var class="Fa">datap</var>. Each successive data item is read from an
- offset 1, 2, 4, or 8 bytes after the previous data item (depending on which
- function is used). All locations being read must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being read and the data array pointer should be properly
- aligned. On some systems, not obeying these requirements may cause incorrect
- data to be read, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_read_region_N~2">Read operations done by the
- <a class="permalink" href="#bus_space_read_region_N~2"><code class="Fn">bus_space_read_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between reads of individual bus
- space locations executed by the
- <code class="Fn">bus_space_read_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1"><code class="Fn" id="bus_space_write_region_1">bus_space_write_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2"><code class="Fn" id="bus_space_write_region_2">bus_space_write_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4"><code class="Fn" id="bus_space_write_region_4">bus_space_write_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8"><code class="Fn" id="bus_space_write_region_8">bus_space_write_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_region_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from the array specified by <var class="Fa">datap</var> and writes them to
- bus space starting at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item is written to an
- offset 1, 2, 4, or 8 bytes after the previous data item (depending on which
- function is used). All locations being written must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_write_region_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_region_N"><code class="Fn">bus_space_write_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between writes of individual
- bus space locations executed by the
- <code class="Fn">bus_space_write_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1"><code class="Fn" id="bus_space_copy_region_1">bus_space_copy_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2"><code class="Fn" id="bus_space_copy_region_2">bus_space_copy_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4"><code class="Fn" id="bus_space_copy_region_4">bus_space_copy_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8"><code class="Fn" id="bus_space_copy_region_8">bus_space_copy_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_copy_region_N</code>() family of
- functions copies <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- in bus space from the area starting at byte offset
- <var class="Fa">srcoffset</var> in the region specified by
- <var class="Fa">srchandle</var> of the bus space specified by
- <var class="Fa">space</var> to the area starting at byte offset
- <var class="Fa">dstoffset</var> in the region specified by
- <var class="Fa">dsthandle</var> in the same bus space. Each successive data
- item read or written has an offset 1, 2, 4, or 8 bytes after the previous
- data item (depending on which function is used). All locations being read
- and written must lie within the bus space region specified by their
- respective handles.</p>
-<p class="Pp">For portability, the starting addresses of the regions specified
- by the each handle plus its respective offset should be a multiple of the
- size of data items being copied. On some systems, not obeying this
- requirement may cause incorrect data to be copied, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_copy_region_N~2">Read and write operations done by
- the
- <a class="permalink" href="#bus_space_copy_region_N~2"><code class="Fn">bus_space_copy_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between reads or writes of
- individual bus space locations executed by the
- <code class="Fn">bus_space_copy_region_N</code>() functions.</p>
-<p class="Pp" id="bus_space_copy_region_N~3">Overlapping copies between
- different subregions of a single region of bus space are handled correctly
- by the
- <a class="permalink" href="#bus_space_copy_region_N~3"><code class="Fn">bus_space_copy_region_N</code></a>()
- functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1"><code class="Fn" id="bus_space_set_region_1">bus_space_set_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2"><code class="Fn" id="bus_space_set_region_2">bus_space_set_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4"><code class="Fn" id="bus_space_set_region_4">bus_space_set_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8"><code class="Fn" id="bus_space_set_region_8">bus_space_set_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_set_region_N</code>() family of
- functions writes the given <var class="Fa">value</var> to
- <var class="Fa">count</var> 1, 2, 4, or 8 byte data items in bus space
- starting at byte offset <var class="Fa">offset</var> in the region specified
- by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item has an offset 1, 2,
- 4, or 8 bytes after the previous data item (depending on which function is
- used). All locations being written must lie within the bus space region
- specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written. On some systems, not obeying this
- requirement may cause incorrect data to be written, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_set_region_N">Write operations done by the
- <a class="permalink" href="#bus_space_set_region_N"><code class="Fn">bus_space_set_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between writes of individual
- bus space locations executed by the
- <code class="Fn">bus_space_set_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES"><a class="permalink" href="#READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES">READING
- AND WRITING A SINGLE LOCATION MULTIPLE TIMES</a></h1>
-<p class="Pp">Some devices implement single locations in bus space which are to
- be read or written multiple times to communicate data, e.g. some ethernet
- devices' packet buffer FIFOs. In order to allow drivers to manipulate these
- types of devices as efficiently as possible, the
- <a class="permalink" href="#bus_space_read_multi_N"><code class="Fn" id="bus_space_read_multi_N">bus_space_read_multi_N</code></a>(),
- <code class="Fn">bus_space_set_multi_N</code>(), and
- <code class="Fn">bus_space_write_multi_N</code>() families of functions are
- provided.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1"><code class="Fn" id="bus_space_read_multi_1">bus_space_read_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2"><code class="Fn" id="bus_space_read_multi_2">bus_space_read_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4"><code class="Fn" id="bus_space_read_multi_4">bus_space_read_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8"><code class="Fn" id="bus_space_read_multi_8">bus_space_read_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_multi_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from bus space at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var> and writes them into the array specified by
- <var class="Fa">datap</var>. Each successive data item is read from the same
- location in bus space. The location being read must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being read and the data array pointer should be properly
- aligned. On some systems, not obeying these requirements may cause incorrect
- data to be read, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_read_multi_N~2">Read operations done by the
- <a class="permalink" href="#bus_space_read_multi_N~2"><code class="Fn">bus_space_read_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_read_multi_N</code>() functions read the same bus
- space location multiple times, they place an implicit read barrier between
- each successive read of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1"><code class="Fn" id="bus_space_write_multi_1">bus_space_write_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2"><code class="Fn" id="bus_space_write_multi_2">bus_space_write_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4"><code class="Fn" id="bus_space_write_multi_4">bus_space_write_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8"><code class="Fn" id="bus_space_write_multi_8">bus_space_write_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_multi_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from the array specified by <var class="Fa">datap</var> and writes them into
- bus space at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item is written to the
- same location in bus space. The location being written must lie within the
- bus space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_write_multi_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_multi_N"><code class="Fn">bus_space_write_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_write_multi_N</code>() functions write the same
- bus space location multiple times, they place an implicit write barrier
- between each successive write of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1"><code class="Fn" id="bus_space_set_multi_1">bus_space_set_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2"><code class="Fn" id="bus_space_set_multi_2">bus_space_set_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4"><code class="Fn" id="bus_space_set_multi_4">bus_space_set_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8"><code class="Fn" id="bus_space_set_multi_8">bus_space_set_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_set_multi_N</code>() writes
- <var class="Fa">value</var> into bus space at byte offset
- <var class="Fa">offset</var> in the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>, <var class="Fa">count</var> times. The location
- being written must lie within the bus space region specified by
- <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_set_multi_N">Write operations done by the
- <a class="permalink" href="#bus_space_set_multi_N"><code class="Fn">bus_space_set_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_set_multi_N</code>() functions write the same bus
- space location multiple times, they place an implicit write barrier between
- each successive write of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STREAM_FUNCTIONS"><a class="permalink" href="#STREAM_FUNCTIONS">STREAM
- FUNCTIONS</a></h1>
-<p class="Pp">Most of the <code class="Nm">bus_space</code> functions imply a
- host byte-order and a bus byte-order and take care of any translation for
- the caller. In some cases, however, hardware may map a FIFO or some other
- memory region for which the caller may want to use multi-word, yet
- untranslated access. Access to these types of memory regions should be with
- the
- <a class="permalink" href="#bus_space_*_stream_N"><code class="Fn" id="bus_space_*_stream_N">bus_space_*_stream_N</code></a>()
- functions.</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt id="bus_space_read_stream_1"><a class="permalink" href="#bus_space_read_stream_1"><code class="Fn">bus_space_read_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_2"><a class="permalink" href="#bus_space_read_stream_2"><code class="Fn">bus_space_read_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_4"><a class="permalink" href="#bus_space_read_stream_4"><code class="Fn">bus_space_read_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_8"><a class="permalink" href="#bus_space_read_stream_8"><code class="Fn">bus_space_read_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_1"><a class="permalink" href="#bus_space_read_multi_stream_1"><code class="Fn">bus_space_read_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_2"><a class="permalink" href="#bus_space_read_multi_stream_2"><code class="Fn">bus_space_read_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_4"><a class="permalink" href="#bus_space_read_multi_stream_4"><code class="Fn">bus_space_read_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_8"><a class="permalink" href="#bus_space_read_multi_stream_8"><code class="Fn">bus_space_read_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_1"><a class="permalink" href="#bus_space_read_region_stream_1"><code class="Fn">bus_space_read_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_2"><a class="permalink" href="#bus_space_read_region_stream_2"><code class="Fn">bus_space_read_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_4"><a class="permalink" href="#bus_space_read_region_stream_4"><code class="Fn">bus_space_read_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_8"><a class="permalink" href="#bus_space_read_region_stream_8"><code class="Fn">bus_space_read_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_1"><a class="permalink" href="#bus_space_write_stream_1"><code class="Fn">bus_space_write_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_2"><a class="permalink" href="#bus_space_write_stream_2"><code class="Fn">bus_space_write_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_4"><a class="permalink" href="#bus_space_write_stream_4"><code class="Fn">bus_space_write_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_8"><a class="permalink" href="#bus_space_write_stream_8"><code class="Fn">bus_space_write_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_1"><a class="permalink" href="#bus_space_write_multi_stream_1"><code class="Fn">bus_space_write_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_2"><a class="permalink" href="#bus_space_write_multi_stream_2"><code class="Fn">bus_space_write_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_4"><a class="permalink" href="#bus_space_write_multi_stream_4"><code class="Fn">bus_space_write_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_8"><a class="permalink" href="#bus_space_write_multi_stream_8"><code class="Fn">bus_space_write_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_1"><a class="permalink" href="#bus_space_write_region_stream_1"><code class="Fn">bus_space_write_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_2"><a class="permalink" href="#bus_space_write_region_stream_2"><code class="Fn">bus_space_write_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_4"><a class="permalink" href="#bus_space_write_region_stream_4"><code class="Fn">bus_space_write_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_8"><a class="permalink" href="#bus_space_write_region_stream_8"><code class="Fn">bus_space_write_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_1"><a class="permalink" href="#bus_space_copy_region_stream_1"><code class="Fn">bus_space_copy_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_2"><a class="permalink" href="#bus_space_copy_region_stream_2"><code class="Fn">bus_space_copy_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_4"><a class="permalink" href="#bus_space_copy_region_stream_4"><code class="Fn">bus_space_copy_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_8"><a class="permalink" href="#bus_space_copy_region_stream_8"><code class="Fn">bus_space_copy_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_1"><a class="permalink" href="#bus_space_set_multi_stream_1"><code class="Fn">bus_space_set_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_2"><a class="permalink" href="#bus_space_set_multi_stream_2"><code class="Fn">bus_space_set_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_4"><a class="permalink" href="#bus_space_set_multi_stream_4"><code class="Fn">bus_space_set_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_8"><a class="permalink" href="#bus_space_set_multi_stream_8"><code class="Fn">bus_space_set_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_1"><a class="permalink" href="#bus_space_set_region_stream_1"><code class="Fn">bus_space_set_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_2"><a class="permalink" href="#bus_space_set_region_stream_2"><code class="Fn">bus_space_set_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_4"><a class="permalink" href="#bus_space_set_region_stream_4"><code class="Fn">bus_space_set_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_8"><a class="permalink" href="#bus_space_set_region_stream_8"><code class="Fn">bus_space_set_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-<p class="Pp">These functions are defined just as their non-stream counterparts,
- except that they provide no byte-order translation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1>
-<p class="Pp">The current <span class="Ux">NetBSD</span> version of the
- <code class="Nm">bus_space</code> interface specification differs slightly
- from the original specification that came into wide use and
- <span class="Ux">FreeBSD</span> adopted. A few of the function names and
- arguments have changed for consistency and increased functionality.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_dma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> functions were introduced in
- a different form (memory and I/O spaces were accessed via different sets of
- functions) in <span class="Ux">NetBSD 1.2</span>. The functions were merged
- to work on generic &#x201C;spaces&#x201D; early in the
- <span class="Ux">NetBSD 1.3</span> development cycle, and many drivers were
- converted to use them. This document was written later during the
- <span class="Ux">NetBSD 1.3</span> development cycle, and the specification
- was updated to fix some consistency problems and to add some missing
- functionality.</p>
-<p class="Pp">The manual page was then adapted to the version of the interface
- that <span class="Ux">FreeBSD</span> imported for the CAM SCSI drivers, plus
- subsequent evolution. The <span class="Ux">FreeBSD</span>
- <code class="Nm">bus_space</code> version was imported in
- <span class="Ux">FreeBSD 3.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> interfaces were designed and
- implemented by the <span class="Ux">NetBSD</span> developer community.
- Primary contributors and implementors were <span class="An">Chris
- Demetriou</span>, <span class="An">Jason Thorpe</span>, and
- <span class="An">Charles Hannum</span>, but the rest of the
- <span class="Ux">NetBSD</span> developers and the user community played a
- significant role in development.</p>
-<p class="Pp"><span class="An">Justin Gibbs</span> ported these interfaces to
- <span class="Ux">FreeBSD</span>.</p>
-<p class="Pp"><span class="An">Chris Demetriou</span> wrote this manual
- page.</p>
-<p class="Pp"><span class="An">Warner Losh</span> modified it for the
- <span class="Ux">FreeBSD</span> implementation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">This manual may not completely and accurately document the
- interface, and many parts of the interface are unspecified.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 1, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/byteorder.9 4.html b/static/freebsd/man9/byteorder.9 4.html
deleted file mode 100644
index 84a05bb1..00000000
--- a/static/freebsd/man9/byteorder.9 4.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BYTEORDER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BYTEORDER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bswap16</code>, <code class="Nm">bswap32</code>,
- <code class="Nm">bswap64</code>, <code class="Nm">be16toh</code>,
- <code class="Nm">be32toh</code>, <code class="Nm">be64toh</code>,
- <code class="Nm">htobe16</code>, <code class="Nm">htobe32</code>,
- <code class="Nm">htobe64</code>, <code class="Nm">htole16</code>,
- <code class="Nm">htole32</code>, <code class="Nm">htole64</code>,
- <code class="Nm">le16toh</code>, <code class="Nm">le32toh</code>,
- <code class="Nm">le64toh</code>, <code class="Nm">be16enc</code>,
- <code class="Nm">be16dec</code>, <code class="Nm">be32enc</code>,
- <code class="Nm">be32dec</code>, <code class="Nm">be64enc</code>,
- <code class="Nm">be64dec</code>, <code class="Nm">le16enc</code>,
- <code class="Nm">le16dec</code>, <code class="Nm">le32enc</code>,
- <code class="Nm">le32dec</code>, <code class="Nm">le64enc</code>,
- <code class="Nm">le64dec</code> &#x2014; <span class="Nd">byte order
- operations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/endian.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bswap16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- int16</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bswap32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- int32</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">bswap64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- int64</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">be16toh</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- big16</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">be32toh</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- big32</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">be64toh</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- big64</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">htobe16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- host16</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">htobe32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- host32</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">htobe64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- host64</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">htole16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- host16</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">htole32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- host32</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">htole64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- host64</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">le16toh</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- little16</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">le32toh</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- little32</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">le64toh</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- little64</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">be16dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">be32dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">be64dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">le16dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">le32dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">le64dec</code>(<var class="Fa" style="white-space: nowrap;">const
- void *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">be16enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint16_t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">be32enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint32_t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">be64enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint64_t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">le16enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint16_t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">le32enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint32_t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">le64enc</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>, <var class="Fa" style="white-space: nowrap;">uint64_t</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#bswap16"><code class="Fn" id="bswap16">bswap16</code></a>(),
- <a class="permalink" href="#bswap32"><code class="Fn" id="bswap32">bswap32</code></a>(),
- and
- <a class="permalink" href="#bswap64"><code class="Fn" id="bswap64">bswap64</code></a>()
- functions return a byte order swapped integer. On big endian systems, the
- number is converted to little endian byte order. On little endian systems,
- the number is converted to big endian byte order.</p>
-<p class="Pp" id="be16toh">The
- <a class="permalink" href="#be16toh"><code class="Fn">be16toh</code></a>(),
- <a class="permalink" href="#be32toh"><code class="Fn" id="be32toh">be32toh</code></a>(),
- and
- <a class="permalink" href="#be64toh"><code class="Fn" id="be64toh">be64toh</code></a>()
- functions return a big endian byte ordered integer converted to the system's
- native byte order. The return value will be the same as the argument on big
- endian systems.</p>
-<p class="Pp" id="le16toh">The
- <a class="permalink" href="#le16toh"><code class="Fn">le16toh</code></a>(),
- <a class="permalink" href="#le32toh"><code class="Fn" id="le32toh">le32toh</code></a>(),
- and
- <a class="permalink" href="#le64toh"><code class="Fn" id="le64toh">le64toh</code></a>()
- functions return a little endian byte ordered integer converted to the
- system's native byte order. The return value will be the same as the
- argument on little endian systems.</p>
-<p class="Pp" id="htobe16">The
- <a class="permalink" href="#htobe16"><code class="Fn">htobe16</code></a>(),
- <a class="permalink" href="#htobe32"><code class="Fn" id="htobe32">htobe32</code></a>(),
- and
- <a class="permalink" href="#htobe64"><code class="Fn" id="htobe64">htobe64</code></a>()
- functions return an integer in the system's native byte order converted to
- big endian byte order. The return value will be the same as the argument on
- big endian systems.</p>
-<p class="Pp" id="htole16">The
- <a class="permalink" href="#htole16"><code class="Fn">htole16</code></a>(),
- <a class="permalink" href="#htole32"><code class="Fn" id="htole32">htole32</code></a>(),
- and
- <a class="permalink" href="#htole64"><code class="Fn" id="htole64">htole64</code></a>()
- functions return a integer in the system's native byte order converted to
- little endian byte order. The return value will be the same as the argument
- on little endian systems.</p>
-<p class="Pp" id="be16enc">The
- <a class="permalink" href="#be16enc"><code class="Fn">be16enc</code></a>(),
- <a class="permalink" href="#be16dec"><code class="Fn" id="be16dec">be16dec</code></a>(),
- <a class="permalink" href="#be32enc"><code class="Fn" id="be32enc">be32enc</code></a>(),
- <a class="permalink" href="#be32dec"><code class="Fn" id="be32dec">be32dec</code></a>(),
- <a class="permalink" href="#be64enc"><code class="Fn" id="be64enc">be64enc</code></a>(),
- <a class="permalink" href="#be64dec"><code class="Fn" id="be64dec">be64dec</code></a>(),
- <a class="permalink" href="#le16enc"><code class="Fn" id="le16enc">le16enc</code></a>(),
- <a class="permalink" href="#le16dec"><code class="Fn" id="le16dec">le16dec</code></a>(),
- <a class="permalink" href="#le32enc"><code class="Fn" id="le32enc">le32enc</code></a>(),
- <a class="permalink" href="#le32dec"><code class="Fn" id="le32dec">le32dec</code></a>(),
- <a class="permalink" href="#le64enc"><code class="Fn" id="le64enc">le64enc</code></a>(),
- and
- <a class="permalink" href="#le64dec"><code class="Fn" id="le64dec">le64dec</code></a>()
- functions encode and decode integers to/from byte strings on any alignment
- in big/little endian format.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">byteorder(3)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">hto*</code>() and
- <code class="Fn">*toh</code>() functions first appeared in
- <span class="Ux">FreeBSD 5.0</span>, and were originally developed by the
- <span class="Ux">NetBSD</span> project.</p>
-<p class="Pp">The encode/decode functions first appeared in
- <span class="Ux">FreeBSD 5.1</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 29, 2002</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/callout.9 3.html b/static/freebsd/man9/callout.9 3.html
deleted file mode 100644
index e2951509..00000000
--- a/static/freebsd/man9/callout.9 3.html
+++ /dev/null
@@ -1,614 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CALLOUT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CALLOUT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">callout_active</code>,
- <code class="Nm">callout_deactivate</code>,
- <code class="Nm">callout_drain</code>, <code class="Nm">callout_init</code>,
- <code class="Nm">callout_init_mtx</code>,
- <code class="Nm">callout_init_rm</code>,
- <code class="Nm">callout_init_rw</code>,
- <code class="Nm">callout_pending</code>,
- <code class="Nm">callout_reset</code>,
- <code class="Nm">callout_reset_curcpu</code>,
- <code class="Nm">callout_reset_on</code>,
- <code class="Nm">callout_reset_sbt</code>,
- <code class="Nm">callout_reset_sbt_curcpu</code>,
- <code class="Nm">callout_reset_sbt_on</code>,
- <code class="Nm">callout_schedule</code>,
- <code class="Nm">callout_schedule_curcpu</code>,
- <code class="Nm">callout_schedule_on</code>,
- <code class="Nm">callout_schedule_sbt</code>,
- <code class="Nm">callout_schedule_sbt_curcpu</code>,
- <code class="Nm">callout_schedule_sbt_on</code>,
- <code class="Nm">callout_stop</code>, <code class="Nm">callout_when</code>
- &#x2014; <span class="Nd">execute a function after a specified length of
- time</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/callout.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>typedef void callout_func_t (void *);</pre>
-</div>
-<br/>
-<var class="Ft">int</var>
-<br/>
-<code class="Fn">callout_active</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>);
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">callout_deactivate</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_drain</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">callout_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">int
- mpsafe</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">callout_init_mtx</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">callout_init_rm</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct rmlock
- *rm</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">callout_init_rw</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock
- *rw</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_pending</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset</code>(<var class="Fa">struct callout *c</var>,
- <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t *func</var>,
- <var class="Fa">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset_curcpu</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t
- *func</var>, <var class="Fa">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset_on</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t
- *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int
- cpu</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset_sbt</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t
- pr</var>, <var class="Fa">callout_func_t *func</var>, <var class="Fa">void
- *arg</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset_sbt_curcpu</code>(<var class="Fa">struct
- callout *c</var>, <var class="Fa">sbintime_t sbt</var>,
- <var class="Fa">sbintime_t pr</var>, <var class="Fa">callout_func_t
- *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_reset_sbt_on</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t
- pr</var>, <var class="Fa">callout_func_t *func</var>, <var class="Fa">void
- *arg</var>, <var class="Fa">int cpu</var>, <var class="Fa">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">int
- ticks</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule_curcpu</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">int
- ticks</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule_on</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>, <var class="Fa" style="white-space: nowrap;">int
- ticks</var>, <var class="Fa" style="white-space: nowrap;">int
- cpu</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule_sbt</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t
- pr</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule_sbt_curcpu</code>(<var class="Fa">struct
- callout *c</var>, <var class="Fa">sbintime_t sbt</var>,
- <var class="Fa">sbintime_t pr</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_schedule_sbt_on</code>(<var class="Fa">struct callout
- *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t
- pr</var>, <var class="Fa">int cpu</var>, <var class="Fa">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">callout_stop</code>(<var class="Fa" style="white-space: nowrap;">struct
- callout *c</var>);</p>
-<p class="Pp"><var class="Ft">sbintime_t</var>
- <br/>
- <code class="Fn">callout_when</code>(<var class="Fa">sbintime_t sbt</var>,
- <var class="Fa">sbintime_t precision</var>, <var class="Fa">int flags</var>,
- <var class="Fa">sbintime_t *sbt_res</var>, <var class="Fa">sbintime_t
- *precision_res</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">callout</code> API is used to schedule a call
- to an arbitrary function at a specific time in the future. Consumers of this
- API are required to allocate a callout structure (struct callout) for each
- pending function invocation. This structure stores state about the pending
- function invocation including the function to be called and the time at
- which the function should be invoked. Pending function calls can be
- cancelled or rescheduled to a different time. In addition, a callout
- structure may be reused to schedule a new function call after a scheduled
- call is completed.</p>
-<p class="Pp">Callouts only provide a single-shot mode. If a consumer requires a
- periodic timer, it must explicitly reschedule each function call. This is
- normally done by rescheduling the subsequent call within the called
- function.</p>
-<p class="Pp">Callout functions must not sleep. They may not acquire sleepable
- locks, wait on condition variables, perform blocking allocation requests, or
- invoke any other action that might sleep.</p>
-<p class="Pp" id="callout_init">Each callout structure must be initialized by
- <a class="permalink" href="#callout_init"><code class="Fn">callout_init</code></a>(),
- <code class="Fn">callout_init_mtx</code>(),
- <code class="Fn">callout_init_rm</code>(), or
- <code class="Fn">callout_init_rw</code>() before it is passed to any of the
- other callout functions. The <code class="Fn">callout_init</code>() function
- initializes a callout structure in <var class="Fa">c</var> that is not
- associated with a specific lock. If the <var class="Fa">mpsafe</var>
- argument is zero, the callout structure is not considered to be
- &#x201C;multi-processor safe&#x201D;; and the Giant lock will be acquired
- before calling the callout function and released when the callout function
- returns.</p>
-<p class="Pp" id="callout_init_mtx">The
- <a class="permalink" href="#callout_init_mtx"><code class="Fn">callout_init_mtx</code></a>(),
- <code class="Fn">callout_init_rm</code>(), and
- <a class="permalink" href="#callout_init_rw"><code class="Fn" id="callout_init_rw">callout_init_rw</code></a>()
- functions initialize a callout structure in <var class="Fa">c</var> that is
- associated with a specific lock. The lock is specified by the
- <var class="Fa">mtx</var>, <var class="Fa">rm</var>, or
- <var class="Fa">rw</var> parameter. The associated lock must be held while
- stopping or rescheduling the callout. The callout subsystem acquires the
- associated lock before calling the callout function and releases it after
- the function returns. If the callout was cancelled while the callout
- subsystem waited for the associated lock, the callout function is not
- called, and the associated lock is released. This ensures that stopping or
- rescheduling the callout will abort any previously scheduled invocation.</p>
-<p class="Pp" id="callout_init_rm">A sleepable read-mostly lock (one initialized
- with the <code class="Dv">RM_SLEEPABLE</code> flag) may not be used with
- <a class="permalink" href="#callout_init_rm"><code class="Fn">callout_init_rm</code></a>().
- Similarly, other sleepable lock types such as <a class="Xr">sx(9)</a> and
- <a class="Xr">lockmgr(9)</a> cannot be used with callouts because sleeping
- is not permitted in the callout subsystem.</p>
-<p class="Pp" id="callout_init_mtx~2">These <var class="Fa">flags</var> may be
- specified for
- <a class="permalink" href="#callout_init_mtx~2"><code class="Fn">callout_init_mtx</code></a>(),
- <code class="Fn">callout_init_rm</code>(), or
- <a class="permalink" href="#callout_init_rw~2"><code class="Fn" id="callout_init_rw~2">callout_init_rw</code></a>():</p>
-<dl class="Bl-tag">
- <dt id="CALLOUT_RETURNUNLOCKED"><a class="permalink" href="#CALLOUT_RETURNUNLOCKED"><code class="Dv">CALLOUT_RETURNUNLOCKED</code></a></dt>
- <dd>The callout function will release the associated lock itself, so the
- callout subsystem should not attempt to unlock it after the callout
- function returns.</dd>
- <dt id="CALLOUT_SHAREDLOCK"><a class="permalink" href="#CALLOUT_SHAREDLOCK"><code class="Dv">CALLOUT_SHAREDLOCK</code></a></dt>
- <dd>The lock is only acquired in read mode when running the callout handler.
- This flag is ignored by <code class="Fn">callout_init_mtx</code>().</dd>
-</dl>
-<p class="Pp" id="callout_stop">The function
- <a class="permalink" href="#callout_stop"><code class="Fn">callout_stop</code></a>()
- cancels a callout <var class="Fa">c</var> if it is currently pending. If the
- callout is pending and successfully stopped, then
- <code class="Fn">callout_stop</code>() returns a value of one. If the
- callout is not set, or has already been serviced, then negative one is
- returned. If the callout is currently being serviced and cannot be stopped,
- then zero will be returned. If the callout is currently being serviced and
- cannot be stopped, and at the same time a next invocation of the same
- callout is also scheduled, then <code class="Fn">callout_stop</code>()
- unschedules the next run and returns zero. If the callout has an associated
- lock, then that lock must be held when this function is called.</p>
-<p class="Pp" id="callout_drain">The function
- <a class="permalink" href="#callout_drain"><code class="Fn">callout_drain</code></a>()
- is identical to <code class="Fn">callout_stop</code>() except that it will
- wait for the callout <var class="Fa">c</var> to complete if it is already in
- progress. This function MUST NOT be called while holding any locks on which
- the callout might block, or deadlock will result. Note that if the callout
- subsystem has already begun processing this callout, then the callout
- function may be invoked before <code class="Fn">callout_drain</code>()
- returns. However, the callout subsystem does guarantee that the callout will
- be fully stopped before <code class="Fn">callout_drain</code>() returns.</p>
-<p class="Pp" id="callout_reset">The
- <a class="permalink" href="#callout_reset"><code class="Fn">callout_reset</code></a>()
- and
- <a class="permalink" href="#callout_schedule"><code class="Fn" id="callout_schedule">callout_schedule</code></a>()
- function families schedule a future function invocation for callout
- <var class="Fa">c</var>. If <var class="Fa">c</var> already has a pending
- callout, it is cancelled before the new invocation is scheduled. These
- functions return a value of one if a pending callout was cancelled and zero
- if there was no pending callout. If the callout has an associated lock, then
- that lock must be held when any of these functions are called.</p>
-<p class="Pp">The time at which the callout function will be invoked is
- determined by either the <var class="Fa">ticks</var> argument or the
- <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and
- <var class="Fa">flags</var> arguments. When <var class="Fa">ticks</var> is
- used, the callout is scheduled to execute after
- <var class="Fa">ticks</var><span class="No">/hz</span> seconds. Non-positive
- values of <var class="Fa">ticks</var> are silently converted to the value
- &#x2018;1&#x2019;.</p>
-<p class="Pp">The <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and
- <var class="Fa">flags</var> arguments provide more control over the
- scheduled time including support for higher resolution times, specifying the
- precision of the scheduled time, and setting an absolute deadline instead of
- a relative timeout. The callout is scheduled to execute in a time window
- which begins at the time specified in <var class="Fa">sbt</var> and extends
- for the amount of time specified in <var class="Fa">pr</var>. If
- <var class="Fa">sbt</var> specifies a time in the past, the window is
- adjusted to start at the current time. A non-zero value for
- <var class="Fa">pr</var> allows the callout subsystem to coalesce callouts
- scheduled close to each other into fewer timer interrupts, reducing
- processing overhead and power consumption. These <var class="Fa">flags</var>
- may be specified to adjust the interpretation of <var class="Fa">sbt</var>
- and <var class="Fa">pr</var>:</p>
-<dl class="Bl-tag">
- <dt id="C_ABSOLUTE"><a class="permalink" href="#C_ABSOLUTE"><code class="Dv">C_ABSOLUTE</code></a></dt>
- <dd>Handle the <var class="Fa">sbt</var> argument as an absolute time since
- boot. By default, <var class="Fa">sbt</var> is treated as a relative
- amount of time, similar to <var class="Fa">ticks</var>.</dd>
- <dt id="C_DIRECT_EXEC"><a class="permalink" href="#C_DIRECT_EXEC"><code class="Dv">C_DIRECT_EXEC</code></a></dt>
- <dd>Run the handler directly from hardware interrupt context instead of from
- the softclock thread. This reduces latency and overhead, but puts more
- constraints on the callout function. Callout functions run in this context
- may use only spin mutexes for locking and should be as small as possible
- because they run with absolute priority.</dd>
- <dt id="C_PREL"><a class="permalink" href="#C_PREL"><code class="Fn">C_PREL</code></a>()</dt>
- <dd>Specifies relative event time precision as binary logarithm of time
- interval divided by acceptable time deviation: 1 -- 1/2, 2 -- 1/4, etc.
- Note that the larger of <var class="Fa">pr</var> or this value is used as
- the length of the time window. Smaller values (which result in larger time
- intervals) allow the callout subsystem to aggregate more events in one
- timer interrupt.</dd>
- <dt id="C_PRECALC"><a class="permalink" href="#C_PRECALC"><code class="Dv">C_PRECALC</code></a></dt>
- <dd>The <var class="Fa">sbt</var> argument specifies the absolute time at
- which the callout should be run, and the <var class="Fa">pr</var> argument
- specifies the requested precision, which will not be adjusted during the
- scheduling process. The <var class="Fa">sbt</var> and
- <var class="Fa">pr</var> values should be calculated by an earlier call to
- <code class="Fn">callout_when</code>() which uses the user-supplied
- <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and
- <var class="Fa">flags</var> values.</dd>
- <dt id="C_HARDCLOCK"><a class="permalink" href="#C_HARDCLOCK"><code class="Dv">C_HARDCLOCK</code></a></dt>
- <dd>Align the timeouts to
- <a class="permalink" href="#hardclock"><code class="Fn" id="hardclock">hardclock</code></a>()
- calls if possible.</dd>
-</dl>
-<p class="Pp" id="callout_reset~2">The
- <a class="permalink" href="#callout_reset~2"><code class="Fn">callout_reset</code></a>()
- functions accept a <var class="Fa">func</var> argument which identifies the
- function to be called when the time expires. It must be a pointer to a
- function that takes a single <var class="Fa">void *</var> argument. Upon
- invocation, <var class="Fa">func</var> will receive
- <var class="Fa">arg</var> as its only argument. The
- <a class="permalink" href="#callout_schedule~2"><code class="Fn" id="callout_schedule~2">callout_schedule</code></a>()
- functions reuse the <var class="Fa">func</var> and <var class="Fa">arg</var>
- arguments from the previous callout. Note that one of the
- <code class="Fn">callout_reset</code>() functions must always be called to
- initialize <var class="Fa">func</var> and <var class="Fa">arg</var> before
- one of the <code class="Fn">callout_schedule</code>() functions can be
- used.</p>
-<p class="Pp" id="callout_reset_on">The callout subsystem provides a softclock
- thread for each CPU in the system. Callouts are assigned to a single CPU and
- are executed by the softclock thread for that CPU. Initially, callouts are
- assigned to CPU 0. The
- <a class="permalink" href="#callout_reset_on"><code class="Fn">callout_reset_on</code></a>(),
- <a class="permalink" href="#callout_reset_sbt_on"><code class="Fn" id="callout_reset_sbt_on">callout_reset_sbt_on</code></a>(),
- <a class="permalink" href="#callout_schedule_on"><code class="Fn" id="callout_schedule_on">callout_schedule_on</code></a>()
- and
- <a class="permalink" href="#callout_schedule_sbt_on"><code class="Fn" id="callout_schedule_sbt_on">callout_schedule_sbt_on</code></a>()
- functions assign the callout to CPU <var class="Fa">cpu</var>. The
- <a class="permalink" href="#callout_reset_curcpu"><code class="Fn" id="callout_reset_curcpu">callout_reset_curcpu</code></a>(),
- <a class="permalink" href="#callout_reset_sbt_curpu"><code class="Fn" id="callout_reset_sbt_curpu">callout_reset_sbt_curpu</code></a>(),
- <a class="permalink" href="#callout_schedule_curcpu"><code class="Fn" id="callout_schedule_curcpu">callout_schedule_curcpu</code></a>()
- and
- <a class="permalink" href="#callout_schedule_sbt_curcpu"><code class="Fn" id="callout_schedule_sbt_curcpu">callout_schedule_sbt_curcpu</code></a>()
- functions assign the callout to the current CPU. The
- <code class="Fn">callout_reset</code>(),
- <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>(),
- <code class="Fn">callout_schedule</code>() and
- <a class="permalink" href="#callout_schedule_sbt"><code class="Fn" id="callout_schedule_sbt">callout_schedule_sbt</code></a>()
- functions schedule the callout to execute in the softclock thread of the CPU
- to which it is currently assigned.</p>
-<p class="Pp">Softclock threads are not pinned to their respective CPUs by
- default. The softclock thread for CPU 0 can be pinned to CPU 0 by setting
- the <var class="Va">kern.pin_default_swi</var> loader tunable to a non-zero
- value. Softclock threads for CPUs other than zero can be pinned to their
- respective CPUs by setting the <var class="Va">kern.pin_pcpu_swi</var>
- loader tunable to a non-zero value.</p>
-<p class="Pp" id="callout_pending">The macros
- <a class="permalink" href="#callout_pending"><code class="Fn">callout_pending</code></a>(),
- <code class="Fn">callout_active</code>() and
- <code class="Fn">callout_deactivate</code>() provide access to the current
- state of the callout. The <code class="Fn">callout_pending</code>() macro
- checks whether a callout is <i class="Em">pending</i>; a callout is
- considered <i class="Em">pending</i> when a timeout has been set but the
- time has not yet arrived. Note that once the timeout time arrives and the
- callout subsystem starts to process this callout,
- <code class="Fn">callout_pending</code>() will return
- <code class="Dv">FALSE</code> even though the callout function may not have
- finished (or even begun) executing. The
- <code class="Fn">callout_active</code>() macro checks whether a callout is
- marked as <i class="Em">active</i>, and the
- <code class="Fn">callout_deactivate</code>() macro clears the callout's
- <i class="Em">active</i> flag. The callout subsystem marks a callout as
- <i class="Em">active</i> when a timeout is set and it clears the
- <i class="Em">active</i> flag in <code class="Fn">callout_stop</code>() and
- <code class="Fn">callout_drain</code>(), but it
- <a class="permalink" href="#does"><i class="Em" id="does">does not</i></a>
- clear it when a callout expires normally via the execution of the callout
- function.</p>
-<p class="Pp" id="callout_when">The
- <a class="permalink" href="#callout_when"><code class="Fn">callout_when</code></a>()
- function may be used to pre-calculate the absolute time at which the timeout
- should be run and the precision of the scheduled run time according to the
- required time <var class="Fa">sbt</var>, precision
- <var class="Fa">precision</var>, and additional adjustments requested by the
- <var class="Fa">flags</var> argument. Flags accepted by the
- <code class="Fn">callout_when</code>() function are the same as flags for
- the <code class="Fn">callout_reset</code>() function. The resulting time is
- assigned to the variable pointed to by the <var class="Fa">sbt_res</var>
- argument, and the resulting precision is assigned to
- <var class="Fa">*precision_res</var>. When passing the results to
- <var class="Fa">callout_reset</var>, add the <var class="Va">C_PRECALC</var>
- flag to <var class="Fa">flags</var>, to avoid incorrect re-adjustment. The
- function is intended for situations where precise time of the callout run
- should be known in advance, since trying to read this time from the callout
- structure itself after a <code class="Fn">callout_reset</code>() call is
- racy.</p>
-<section class="Ss">
-<h2 class="Ss" id="Avoiding_Race_Conditions"><a class="permalink" href="#Avoiding_Race_Conditions">Avoiding
- Race Conditions</a></h2>
-<p class="Pp">The callout subsystem invokes callout functions from its own
- thread context. Without some kind of synchronization, it is possible that a
- callout function will be invoked concurrently with an attempt to stop or
- reset the callout by another thread. In particular, since callout functions
- typically acquire a lock as their first action, the callout function may
- have already been invoked, but is blocked waiting for that lock at the time
- that another thread tries to reset or stop the callout.</p>
-<p class="Pp">There are three main techniques for addressing these
- synchronization concerns. The first approach is preferred as it is the
- simplest:</p>
-<ol class="Bl-enum Bd-indent">
- <li id="callout_init_mtx~3">Callouts can be associated with a specific lock
- when they are initialized by
- <a class="permalink" href="#callout_init_mtx~3"><code class="Fn">callout_init_mtx</code></a>(),
- <code class="Fn">callout_init_rm</code>(), or
- <a class="permalink" href="#callout_init_rw~3"><code class="Fn" id="callout_init_rw~3">callout_init_rw</code></a>().
- When a callout is associated with a lock, the callout subsystem acquires
- the lock before the callout function is invoked. This allows the callout
- subsystem to transparently handle races between callout cancellation,
- scheduling, and execution. Note that the associated lock must be acquired
- before calling <code class="Fn">callout_stop</code>() or one of the
- <code class="Fn">callout_reset</code>() or
- <code class="Fn">callout_schedule</code>() functions to provide this
- safety.
- <p class="Pp" id="callout_init~2">A callout initialized via
- <a class="permalink" href="#callout_init~2"><code class="Fn">callout_init</code></a>()
- with <var class="Fa">mpsafe</var> set to zero is implicitly associated
- with the <var class="Va">Giant</var> mutex. If
- <var class="Va">Giant</var> is held when cancelling or rescheduling the
- callout, then its use will prevent races with the callout function.</p>
- </li>
- <li>The return value from <code class="Fn">callout_stop</code>() (or the
- <code class="Fn">callout_reset</code>() and
- <code class="Fn">callout_schedule</code>() function families) indicates
- whether or not the callout was removed. If it is known that the callout
- was set and the callout function has not yet executed, then a return value
- of <code class="Dv">FALSE</code> indicates that the callout function is
- about to be called. For example:
- <div class="Bd Pp Bd-indent Li">
- <pre>if (sc-&gt;sc_flags &amp; SCFLG_CALLOUT_RUNNING) {
- if (callout_stop(&amp;sc-&gt;sc_callout)) {
- sc-&gt;sc_flags &amp;= ~SCFLG_CALLOUT_RUNNING;
- /* successfully stopped */
- } else {
- /*
- * callout has expired and callout
- * function is about to be executed
- */
- }
-}</pre>
- </div>
- </li>
- <li>The <code class="Fn">callout_pending</code>(),
- <code class="Fn">callout_active</code>() and
- <code class="Fn">callout_deactivate</code>() macros can be used together
- to work around the race conditions. When a callout's timeout is set, the
- callout subsystem marks the callout as both <i class="Em">active</i> and
- <i class="Em">pending</i>. When the timeout time arrives, the callout
- subsystem begins processing the callout by first clearing the
- <i class="Em">pending</i> flag. It then invokes the callout function
- without changing the <i class="Em">active</i> flag, and does not clear the
- <i class="Em">active</i> flag even after the callout function returns. The
- mechanism described here requires the callout function itself to clear the
- <i class="Em">active</i> flag using the
- <code class="Fn">callout_deactivate</code>() macro. The
- <code class="Fn">callout_stop</code>() and
- <code class="Fn">callout_drain</code>() functions always clear both the
- <i class="Em">active</i> and <i class="Em">pending</i> flags before
- returning.
- <p class="Pp" id="callout_pending~2">The callout function should first check
- the <i class="Em">pending</i> flag and return without action if
- <a class="permalink" href="#callout_pending~2"><code class="Fn">callout_pending</code></a>()
- returns <code class="Dv">TRUE</code>. This indicates that the callout
- was rescheduled using <code class="Fn">callout_reset</code>() just
- before the callout function was invoked. If
- <code class="Fn">callout_active</code>() returns
- <code class="Dv">FALSE</code> then the callout function should also
- return without action. This indicates that the callout has been stopped.
- Finally, the callout function should call
- <code class="Fn">callout_deactivate</code>() to clear the
- <i class="Em">active</i> flag. For example:</p>
- <div class="Bd Pp Bd-indent Li">
- <pre>mtx_lock(&amp;sc-&gt;sc_mtx);
-if (callout_pending(&amp;sc-&gt;sc_callout)) {
- /* callout was reset */
- mtx_unlock(&amp;sc-&gt;sc_mtx);
- return;
-}
-if (!callout_active(&amp;sc-&gt;sc_callout)) {
- /* callout was stopped */
- mtx_unlock(&amp;sc-&gt;sc_mtx);
- return;
-}
-callout_deactivate(&amp;sc-&gt;sc_callout);
-/* rest of callout function */</pre>
- </div>
- <p class="Pp" id="callout_stop~2">Together with appropriate synchronization,
- such as the mutex used above, this approach permits the
- <a class="permalink" href="#callout_stop~2"><code class="Fn">callout_stop</code></a>()
- and <code class="Fn">callout_reset</code>() functions to be used at any
- time without races. For example:</p>
- <div class="Bd Pp Bd-indent Li">
- <pre>mtx_lock(&amp;sc-&gt;sc_mtx);
-callout_stop(&amp;sc-&gt;sc_callout);
-/* The callout is effectively stopped now. */</pre>
- </div>
- <p class="Pp" id="callout_deactivate">If the callout is still pending then
- these functions operate normally, but if processing of the callout has
- already begun then the tests in the callout function cause it to return
- without further action. Synchronization between the callout function and
- other code ensures that stopping or resetting the callout will never be
- attempted while the callout function is past the
- <a class="permalink" href="#callout_deactivate"><code class="Fn">callout_deactivate</code></a>()
- call.</p>
- <p class="Pp" id="callout_active">The above technique additionally ensures
- that the <i class="Em">active</i> flag always reflects whether the
- callout is effectively enabled or disabled. If
- <a class="permalink" href="#callout_active"><code class="Fn">callout_active</code></a>()
- returns false, then the callout is effectively disabled, since even if
- the callout subsystem is actually just about to invoke the callout
- function, the callout function will return without action.</p>
- </li>
-</ol>
-<p class="Pp" id="callout_drain~2">There is one final race condition that must
- be considered when a callout is being stopped for the last time. In this
- case it may not be safe to let the callout function itself detect that the
- callout was stopped, since it may need to access data objects that have
- already been destroyed or recycled. To ensure that the callout is completely
- finished, a call to
- <a class="permalink" href="#callout_drain~2"><code class="Fn">callout_drain</code></a>()
- should be used. In particular, a callout should always be drained prior to
- destroying its associated lock or releasing the storage for the callout
- structure.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">callout_active</code>() macro returns the
- state of a callout's <i class="Em">active</i> flag.</p>
-<p class="Pp">The <code class="Fn">callout_pending</code>() macro returns the
- state of a callout's <i class="Em">pending</i> flag.</p>
-<p class="Pp">The <code class="Fn">callout_reset</code>() and
- <code class="Fn">callout_schedule</code>() function families return a value
- of one if the callout was pending before the new function invocation was
- scheduled.</p>
-<p class="Pp">The <code class="Fn">callout_stop</code>() and
- <code class="Fn">callout_drain</code>() functions return a value of one if
- the callout was still pending when it was called, a zero if the callout
- could not be stopped and a negative one is it was either not running or has
- already completed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">dtrace_callout_execute(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><span class="Ux">FreeBSD</span> initially used the long standing
- <span class="Ux">BSD</span> linked list callout mechanism which offered O(n)
- insertion and removal running time but did not generate or require handles
- for untimeout operations.</p>
-<p class="Pp"><span class="Ux">FreeBSD 3.0</span> introduced a new set of
- timeout and untimeout routines from <span class="Ux">NetBSD</span> based on
- the work of <span class="An">Adam M. Costello</span> and
- <span class="An">George Varghese</span>, published in a technical report
- entitled <span class="RsT">Redesigning the BSD Callout and Timer
- Facilities</span> and modified for inclusion in
- <span class="Ux">FreeBSD</span> by <span class="An">Justin T. Gibbs</span>.
- The original work on the data structures used in that implementation was
- published by <span class="An">G. Varghese</span> and <span class="An">A.
- Lauck</span> in the paper <span class="RsT">Hashed and Hierarchical Timing
- Wheels: Data Structures for the Efficient Implementation of a Timer
- Facility</span> in the <i class="RsB">Proceedings of the 11th ACM Annual
- Symposium on Operating Systems Principles.</i></p>
-<p class="Pp"><span class="Ux">FreeBSD 3.3</span> introduced the first
- implementations of <code class="Fn">callout_init</code>(),
- <code class="Fn">callout_reset</code>(), and
- <code class="Fn">callout_stop</code>() which permitted callers to allocate
- dedicated storage for callouts. This ensured that a callout would always
- fire unlike <code class="Fn">timeout</code>() which would silently fail if
- it was unable to allocate a callout.</p>
-<p class="Pp"><span class="Ux">FreeBSD 5.0</span> permitted callout handlers to
- be tagged as MPSAFE via <code class="Fn">callout_init</code>().</p>
-<p class="Pp"><span class="Ux">FreeBSD 5.3</span> introduced
- <code class="Fn">callout_drain</code>().</p>
-<p class="Pp"><span class="Ux">FreeBSD 6.0</span> introduced
- <code class="Fn">callout_init_mtx</code>().</p>
-<p class="Pp"><span class="Ux">FreeBSD 8.0</span> introduced per-CPU callout
- wheels, <code class="Fn">callout_init_rw</code>(), and
- <code class="Fn">callout_schedule</code>().</p>
-<p class="Pp"><span class="Ux">FreeBSD 9.0</span> changed the underlying timer
- interrupts used to drive callouts to prefer one-shot event timers instead of
- a periodic timer interrupt.</p>
-<p class="Pp"><span class="Ux">FreeBSD 10.0</span> switched the callout wheel to
- support tickless operation. These changes introduced
- <var class="Vt">sbintime_t</var> and the
- <code class="Fn">callout_reset_sbt*</code>() family of functions.
- <span class="Ux">FreeBSD 10.0</span> also added
- <code class="Dv">C_DIRECT_EXEC</code> and
- <code class="Fn">callout_init_rm</code>().</p>
-<p class="Pp"><span class="Ux">FreeBSD 10.2</span> introduced the
- <code class="Fn">callout_schedule_sbt*</code>() family of functions.</p>
-<p class="Pp"><span class="Ux">FreeBSD 11.0</span> introduced
- <code class="Fn">callout_async_drain</code>(). <span class="Ux">FreeBSD
- 11.1</span> introduced <code class="Fn">callout_when</code>().
- <span class="Ux">FreeBSD 13.0</span> removed
- <var class="Vt">timeout_t</var>, <code class="Fn">timeout</code>(), and
- <code class="Fn">untimeout</code>().</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 4, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/casuword.9 3.html b/static/freebsd/man9/casuword.9 3.html
deleted file mode 100644
index eaa380ab..00000000
--- a/static/freebsd/man9/casuword.9 3.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CASU(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CASU(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">casueword</code>,
- <code class="Nm">casueword32</code>, <code class="Nm">casuword</code>,
- <code class="Nm">casuword32</code> &#x2014; <span class="Nd">fetch, compare
- and store data from user-space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">casueword</code>(<var class="Fa">volatile u_long *base</var>,
- <var class="Fa">u_long oldval</var>, <var class="Fa">u_long *oldvalp</var>,
- <var class="Fa">u_long newval</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">casueword32</code>(<var class="Fa">volatile uint32_t
- *base</var>, <var class="Fa">uint32_t oldval</var>, <var class="Fa">uint32_t
- *oldvalp</var>, <var class="Fa">uint32_t newval</var>);</p>
-<p class="Pp"><var class="Ft">u_long</var>
- <br/>
- <code class="Fn">casuword</code>(<var class="Fa">volatile u_long *base</var>,
- <var class="Fa">u_long oldval</var>, <var class="Fa">u_long
- newval</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">casuword32</code>(<var class="Fa">volatile uint32_t
- *base</var>, <var class="Fa">uint32_t oldval</var>, <var class="Fa">uint32_t
- newval</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">casueword</code> functions are designed to
- perform atomic compare-and-swap operation on the value in the usermode
- memory of the current process.</p>
-<p class="Pp" id="casueword32">The <code class="Nm">casueword</code> routines
- reads the value from user memory with address <span class="Pa">base</span>,
- and compare the value read with <span class="Pa">oldval</span>. If the
- values are equal, <span class="Pa">newval</span> is written to the
- <span class="Pa">*base</span>. In case of
- <a class="permalink" href="#casueword32"><code class="Fn">casueword32</code></a>()
- and
- <a class="permalink" href="#casueword"><code class="Fn" id="casueword">casueword</code></a>(),
- old value is stored into the (kernel-mode) variable pointed by
- <span class="Pa">*oldvalp</span>. The userspace value must be naturally
- aligned.</p>
-<p class="Pp" id="casuword">The callers of
- <a class="permalink" href="#casuword"><code class="Fn">casuword</code></a>()
- and
- <a class="permalink" href="#casuword32"><code class="Fn" id="casuword32">casuword32</code></a>()
- functions cannot distinguish between -1 read from userspace and function
- failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">casuword</code>() and
- <code class="Fn">casuword32</code>() functions return the data fetched or -1
- on failure. The <code class="Fn">casueword</code>() and
- <code class="Fn">casueword32</code>() functions return 0 on success, -1 on
- failure to access memory, and 1 when comparison or store failed. The store
- can fail on load-linked/store-conditional architectures.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">fetch(9)</a>,
- <a class="Xr">store(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 19, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cd.9 3.html b/static/freebsd/man9/cd.9 3.html
deleted file mode 100644
index 344017b2..00000000
--- a/static/freebsd/man9/cd.9 3.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cd</code> &#x2014; <span class="Nd">CDROM driver
- for the CAM SCSI subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">cd</code> device driver provides a read-only
- interface for CDROM drives (SCSI type 5) and WORM drives (SCSI type 4) that
- support CDROM type commands. Some drives do not behave as the driver
- expects. See the <a class="Sx" href="#QUIRKS">QUIRKS</a> section for
- information on possible flags.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="QUIRKS"><a class="permalink" href="#QUIRKS">QUIRKS</a></h1>
-<p class="Pp">Each CD-ROM device can have different interpretations of the SCSI
- spec. This can lead to drives requiring special handling in the driver. The
- following is a list of quirks that the driver recognizes.</p>
-<dl class="Bl-tag">
- <dt id="CD_Q_NO_TOUCH"><a class="permalink" href="#CD_Q_NO_TOUCH"><code class="Dv">CD_Q_NO_TOUCH</code></a></dt>
- <dd>This flag tells the driver not to probe the drive at attach time to see if
- there is a disk in the drive and find out what size it is. This flag is
- currently unimplemented in the CAM <code class="Nm">cd</code> driver.</dd>
- <dt id="CD_Q_BCD_TRACKS"><a class="permalink" href="#CD_Q_BCD_TRACKS"><code class="Dv">CD_Q_BCD_TRACKS</code></a></dt>
- <dd>This flag is for broken drives that return the track numbers in packed BCD
- instead of straight decimal. If the drive seems to skip tracks (tracks
- 10-15 are skipped) then you have a drive that is in need of this
- flag.</dd>
- <dt id="CD_Q_NO_CHANGER"><a class="permalink" href="#CD_Q_NO_CHANGER"><code class="Dv">CD_Q_NO_CHANGER</code></a></dt>
- <dd>This flag tells the driver that the device in question is not a changer.
- This is only necessary for a CDROM device with multiple luns that are not
- a part of a changer.</dd>
- <dt id="CD_Q_CHANGER"><a class="permalink" href="#CD_Q_CHANGER"><code class="Dv">CD_Q_CHANGER</code></a></dt>
- <dd>This flag tells the driver that the given device is a multi-lun changer.
- In general, the driver will figure this out automatically when it sees a
- LUN greater than 0. Setting this flag only has the effect of telling the
- driver to run the initial read capacity command for LUN 0 of the changer
- through the changer scheduling code.</dd>
- <dt id="CD_Q_10_BYTE_ONLY"><a class="permalink" href="#CD_Q_10_BYTE_ONLY"><code class="Dv">CD_Q_10_BYTE_ONLY</code></a></dt>
- <dd>This flag tells the driver that the given device only accepts 10 byte MODE
- SENSE/MODE SELECT commands. In general these types of quirks should not be
- added to the <a class="Xr">cd(4)</a> driver. The reason is that the driver
- does several things to attempt to determine whether the drive in question
- needs 10 byte commands. First, it issues a CAM Path Inquiry command to
- determine whether the protocol that the drive speaks typically only allows
- 10 byte commands. (ATAPI and USB are two prominent examples of protocols
- where you generally only want to send 10 byte commands.) Then, if it gets
- an ILLEGAL REQUEST error back from a 6 byte MODE SENSE or MODE SELECT
- command, it attempts to send the 10 byte version of the command instead.
- The only reason you would need a quirk is if your drive uses a protocol
- (e.g., SCSI) that typically does not have a problem with 6 byte
- commands.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag Bl-compact">
- <dt><span class="Pa">/sys/cam/scsi/scsi_cd.c</span></dt>
- <dd>is the driver source file.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cd(4)</a>, <a class="Xr">scsi(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">cd</code> manual page first appeared in
- <span class="Ux">FreeBSD 2.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">John-Mark
- Gurney</span>
- &lt;<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>&gt;. It
- was updated for CAM and <span class="Ux">FreeBSD 3.0</span> by
- <span class="An">Kenneth Merry</span>
- &lt;<a class="Mt" href="mailto:ken@FreeBSD.org">ken@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 25, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cdefs.9 3.html b/static/freebsd/man9/cdefs.9 3.html
deleted file mode 100644
index 7c6680b3..00000000
--- a/static/freebsd/man9/cdefs.9 3.html
+++ /dev/null
@@ -1,937 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CDEFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CDEFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cdefs</code> &#x2014; <span class="Nd">compiler
- portability macro definitions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="In">&lt;<a class="In">sys/cdefs.h</a>&gt;</code>
- defines macros for compiler, C language standard portability, POSIX
- standards compliance and symbol visibility. It defines programming
- interfaces for the system header files to adopt to the many environments
- <span class="Ux">FreeBSD</span> supports compilation for. It defines
- convenience macros for the <span class="Ux">FreeBSD</span> sources, tailored
- to the base system's needs.</p>
-<p class="Pp">Most of these macros are for use inside the
- <span class="Ux">FreeBSD</span> sources only. They are not intended as a
- general portability layer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="Supported_Compilers"><a class="permalink" href="#Supported_Compilers">Supported
- Compilers</a></h1>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt>Compilers supported for building programs on
- <span class="Ux">FreeBSD</span>:</dt>
- <dd>
- <table class="Bl-column Bd-indent">
- <tr id="Compiler">
- <td><a class="permalink" href="#Compiler"><b class="Sy">Compiler</b></a></td>
- <td><a class="permalink" href="#Versions"><b class="Sy" id="Versions">Versions</b></a></td>
- </tr>
- <tr>
- <td>gcc</td>
- <td>9, 10, 11, 12, 13, 14</td>
- </tr>
- <tr>
- <td>clang</td>
- <td>10, 11, 12, 13, 14, 15, 16, 17, 18</td>
- </tr>
- <tr>
- <td>TinyC (tcc)</td>
- <td>0.9</td>
- </tr>
- <tr>
- <td>pcc</td>
- <td>1.1</td>
- </tr>
- </table>
- <p class="Pp">Due to testing constraints, tcc and pcc may not always
- work.</p>
- </dd>
- <dt>Compilers supported for building <span class="Ux">FreeBSD
- itself:</span></dt>
- <dd>
- <table class="Bl-column Bd-indent">
- <tr id="Compiler~2">
- <td><a class="permalink" href="#Compiler~2"><b class="Sy">Compiler</b></a></td>
- <td><a class="permalink" href="#Major"><b class="Sy" id="Major">Major
- Versions Supported</b></a></td>
- </tr>
- <tr>
- <td>gcc</td>
- <td>12, 13, 14</td>
- </tr>
- <tr>
- <td>clang</td>
- <td>16, 17, 18</td>
- </tr>
- </table>
- <p class="Pp">Please note: Not every single minor versions of these
- compilers will work or are supported.</p>
- </dd>
-</dl>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="Macros_and_Magic_for_Programming_Environment"><a class="permalink" href="#Macros_and_Magic_for_Programming_Environment">Macros
- and Magic for Programming Environment</a></h1>
-<p class="Pp"><code class="Nm">cdefs</code> defines (or refrains from defining)
- a number of macros to increase portability of compiled programs. These are
- to allow more advanced language features to appear in header files. The
- header files assume a compiler that accepts C prototype function
- declarations. They also assume that the compiler accepts ANSI C89 keywords
- for all language dialects.</p>
-<section class="Ss">
-<h2 class="Ss" id="General_Macros"><a class="permalink" href="#General_Macros">General
- Macros</a></h2>
-<p class="Pp">General macros that facilitate multiple language environments and
- language dialects.</p>
-<table class="Bl-column">
- <tr id="Macro">
- <td><a class="permalink" href="#Macro"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td>
- </tr>
- <tr id="__volatile">
- <td><a class="permalink" href="#__volatile"><code class="Dv">__volatile</code></a></td>
- <td>expands to volatile in C++ and C89 and newer environments, __volatile in
- pre-ANSI environments that support this extension or nothing
- otherwise.</td>
- </tr>
- <tr id="__inline">
- <td><a class="permalink" href="#__inline"><code class="Dv">__inline</code></a></td>
- <td>expands to inline in C++ and C89 and newer environments, __inline in
- pre-ANSI environments that support this extension or nothing
- otherwise.</td>
- </tr>
- <tr id="__restrict">
- <td><a class="permalink" href="#__restrict"><code class="Dv">__restrict</code></a></td>
- <td>expands to restrict in C99 and newer environments, or __restrict
- otherwise.</td>
- </tr>
- <tr id="__CONCAT">
- <td><a class="permalink" href="#__CONCAT"><code class="Dv">__CONCAT</code></a></td>
- <td>used to paste two pre-processor tokens.</td>
- </tr>
- <tr id="__STRING">
- <td><a class="permalink" href="#__STRING"><code class="Dv">__STRING</code></a></td>
- <td>used to convert the argument to a string.</td>
- </tr>
- <tr id="__BEGIN_DECLS">
- <td><a class="permalink" href="#__BEGIN_DECLS"><code class="Dv">__BEGIN_DECLS</code></a></td>
- <td>Start a group of functions.</td>
- </tr>
- <tr id="__END_DECLS">
- <td><a class="permalink" href="#__END_DECLS"><code class="Dv">__END_DECLS</code></a></td>
- <td>End a group of functions. In a C environment, these are defined as
- nothing. In a C++ environment, these declare the functions to have
- &#x201C;C&#x201D; linkage.</td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Function,_Structure_and_Variable_Modifiers"><a class="permalink" href="#Function,_Structure_and_Variable_Modifiers">Function,
- Structure and Variable Modifiers</a></h2>
-<table class="Bl-column">
- <tr id="Macro~2">
- <td><a class="permalink" href="#Macro~2"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description~2"><b class="Sy" id="Description~2">Description</b></a></td>
- </tr>
- <tr id="__weak_symbol">
- <td><a class="permalink" href="#__weak_symbol"><b class="Sy">__weak_symbol</b></a></td>
- <td>Declare the symbol to be a weak symbol</td>
- </tr>
- <tr id="__dead2">
- <td><a class="permalink" href="#__dead2"><b class="Sy">__dead2</b></a></td>
- <td>Function will not return</td>
- </tr>
- <tr id="__pure2">
- <td><a class="permalink" href="#__pure2"><b class="Sy">__pure2</b></a></td>
- <td>Function has no side effects</td>
- </tr>
- <tr id="__unused">
- <td><a class="permalink" href="#__unused"><b class="Sy">__unused</b></a></td>
- <td>To Variable may be unused (usually arguments), so do not warn about
- it</td>
- </tr>
- <tr id="__used">
- <td><a class="permalink" href="#__used"><b class="Sy">__used</b></a></td>
- <td>Function really is used, so emit it even if it appears unused.</td>
- </tr>
- <tr id="__deprecated">
- <td><a class="permalink" href="#__deprecated"><b class="Sy">__deprecated</b></a></td>
- <td>Function interface has been deprecated, and clients should migrate to a
- new interface. A warning will be issued for clients of this
- interface.</td>
- </tr>
- <tr id="__deprecated1(msg)">
- <td><a class="permalink" href="#__deprecated1(msg)"><b class="Sy">__deprecated1(msg)</b></a></td>
- <td>Function interface has been deprecated, and clients should migrate to a
- new interface. The string <var class="Fa">msg</var> will be included in a
- warning issued for clients of this interface.</td>
- </tr>
- <tr id="__packed">
- <td><a class="permalink" href="#__packed"><b class="Sy">__packed</b></a></td>
- <td>Do not have space between structure elements for natural alignment. Used
- when communicating with external protocols.</td>
- </tr>
- <tr id="__aligned(x)">
- <td><a class="permalink" href="#__aligned(x)"><b class="Sy">__aligned(x)</b></a></td>
- <td>Specify in bytes the minimum alignment for the specified field,
- structure or variable</td>
- </tr>
- <tr id="__section(x)">
- <td><a class="permalink" href="#__section(x)"><b class="Sy">__section(x)</b></a></td>
- <td>Place function or variable in section <var class="Fa">x</var></td>
- </tr>
- <tr id="__writeonly">
- <td><a class="permalink" href="#__writeonly"><b class="Sy">__writeonly</b></a></td>
- <td>Hint that the variable is only assigned to, but do not warn about it.
- Useful for macros and other places the eventual use of the result is
- unknown.</td>
- </tr>
- <tr id="__alloc_size(x)">
- <td><a class="permalink" href="#__alloc_size(x)"><b class="Sy">__alloc_size(x)</b></a></td>
- <td>The function always returns at least the number of bytes determined by
- argument number Fa x</td>
- </tr>
- <tr id="__alloc_size2(x,n)">
- <td><a class="permalink" href="#__alloc_size2(x,n)"><b class="Sy">__alloc_size2(x,n)</b></a></td>
- <td>The function always returns an array, whose size is at least the number
- of bytes determined by argument number Fa x times the number of elements
- specified by argument number Fa n</td>
- </tr>
- <tr id="__alloc_align(x)">
- <td><a class="permalink" href="#__alloc_align(x)"><b class="Sy">__alloc_align(x)</b></a></td>
- <td>Function either returns a pointer aligned to <var class="Fa">x
- bytes</var> or Dv NULL.</td>
- </tr>
- <tr id="__min_size">
- <td><a class="permalink" href="#__min_size"><b class="Sy">__min_size</b></a></td>
- <td>Declare the array to have a certain, minimum size</td>
- </tr>
- <tr id="__malloc_like">
- <td><a class="permalink" href="#__malloc_like"><b class="Sy">__malloc_like</b></a></td>
- <td>Function behaves like the &#x201C;malloc&#x201D; family of
- functions.</td>
- </tr>
- <tr id="__pure">
- <td><a class="permalink" href="#__pure"><b class="Sy">__pure</b></a></td>
- <td>Function has no side effects</td>
- </tr>
- <tr id="__always_inline">
- <td><a class="permalink" href="#__always_inline"><b class="Sy">__always_inline</b></a></td>
- <td>Always inline this function when called</td>
- </tr>
- <tr id="__fastcall">
- <td><a class="permalink" href="#__fastcall"><b class="Sy">__fastcall</b></a></td>
- <td>Use the &#x201C;fastcall&#x201D; ABI to call and name mangle this
- function.</td>
- </tr>
- <tr id="__result_use_check">
- <td><a class="permalink" href="#__result_use_check"><b class="Sy">__result_use_check</b></a></td>
- <td>Warn if function caller does not use its return value</td>
- </tr>
- <tr id="__nodiscard">
- <td><a class="permalink" href="#__nodiscard"><b class="Sy">__nodiscard</b></a></td>
- <td>Equivalent to the standard &#x201C;[[nodiscard]]&#x201D; attribute. If
- applied to a function, warn if function caller does not use its return
- value. The warning may be silenced using a cast to
- <var class="Vt">void</var>, or in C++, using an assignment to
- <var class="Va">std::ignore</var>. If applied to a struct, C++ class or
- enum, this applies to all functions returning values of that type. If
- applied to a C++ constructor, this applies to creating instances of the
- class using that constructor.</td>
- </tr>
- <tr id="__returns_twice">
- <td><a class="permalink" href="#__returns_twice"><b class="Sy">__returns_twice</b></a></td>
- <td>Returns multiple times, like <a class="Xr">fork(2)</a></td>
- </tr>
- <tr id="__unreachable">
- <td><a class="permalink" href="#__unreachable"><b class="Sy">__unreachable</b></a></td>
- <td>This code is not reachable at runtime</td>
- </tr>
- <tr id="__predict_true(x)">
- <td><a class="permalink" href="#__predict_true(x)"><b class="Sy">__predict_true(x)</b></a></td>
- <td>Hint to the compiler that <var class="Fa">x</var> is true most of the
- time. Should only be used when performance is improved for a frequently
- called bit of code.</td>
- </tr>
- <tr id="__predict_false(x)">
- <td><a class="permalink" href="#__predict_false(x)"><b class="Sy">__predict_false(x)</b></a></td>
- <td>Hint to the compiler that <var class="Fa">x</var> is false most of the
- time. Should only be used when performance is improved for a frequently
- called bit of code.</td>
- </tr>
- <tr id="__null_sentinel">
- <td><a class="permalink" href="#__null_sentinel"><b class="Sy">__null_sentinel</b></a></td>
- <td>The varadic function contains a parameter that is a NULL sentinel to
- mark the end of its arguments.</td>
- </tr>
- <tr id="__exported">
- <td><a class="permalink" href="#__exported"><b class="Sy">__exported</b></a></td>
- <td></td>
- </tr>
- <tr id="__hidden">
- <td><a class="permalink" href="#__hidden"><b class="Sy">__hidden</b></a></td>
- <td></td>
- </tr>
- <tr id="__printflike(fmtarg,firstvararg)">
- <td><a class="permalink" href="#__printflike(fmtarg,firstvararg)"><b class="Sy">__printflike(fmtarg,firstvararg)</b></a></td>
- <td>Function is similar to
- <a class="permalink" href="#printf"><code class="Fn" id="printf">printf</code></a>()
- which specifies the format argument with <var class="Fa">fmtarg</var> and
- where the arguments formatted by that format start with the
- <var class="Fa">firstvararg</var>, with 0 meaning that
- <code class="Dv">va_arg</code> is used and cannot be checked.</td>
- </tr>
- <tr id="__scanflike(fmtarg,firstvararg)">
- <td><a class="permalink" href="#__scanflike(fmtarg,firstvararg)"><b class="Sy">__scanflike(fmtarg,firstvararg)</b></a></td>
- <td>Function is similar to
- <a class="permalink" href="#scanf"><code class="Fn" id="scanf">scanf</code></a>()
- which specifies the format argument with <var class="Fa">fmtarg</var> and
- where the arguments formatted by that format start with the
- <var class="Fa">firstvararg</var>, with 0 meaning that
- <code class="Dv">va_arg</code> is used and cannot be checked.</td>
- </tr>
- <tr id="__format_arg(f)">
- <td><a class="permalink" href="#__format_arg(f)"><b class="Sy">__format_arg(f)</b></a></td>
- <td>Specifies that arg <var class="Fa">f</var> contains a string that will
- be passed to a function like <code class="Fn">printf</code>() or
- <var class="Fa">scanf</var> after being translated in some way.</td>
- </tr>
- <tr id="__strfmonlike(fmtarg,firstvararg)">
- <td><a class="permalink" href="#__strfmonlike(fmtarg,firstvararg)"><b class="Sy">__strfmonlike(fmtarg,firstvararg)</b></a></td>
- <td>Function is similar to <code class="Fn">scanf</code>() which specifies
- the format argument with <var class="Fa">fmtarg</var> and where the
- arguments formatted by that format start with the
- <var class="Fa">firstvararg</var>, with 0 meaning that
- <code class="Dv">va_arg</code> is used and cannot be checked.</td>
- </tr>
- <tr id="__strtimelike(fmtarg,firstvararg)">
- <td><a class="permalink" href="#__strtimelike(fmtarg,firstvararg)"><b class="Sy">__strtimelike(fmtarg,firstvararg)</b></a></td>
- <td>Function is similar to <code class="Fn">scanf</code>() which specifies
- the format argument with <var class="Fa">fmtarg</var> and where the
- arguments formatted by that format start with the
- <var class="Fa">firstvararg</var>, with 0 meaning that
- <code class="Dv">va_arg</code> is used and cannot be checked.</td>
- </tr>
- <tr id="__printf0like(fmtarg,firstvararg)">
- <td><a class="permalink" href="#__printf0like(fmtarg,firstvararg)"><b class="Sy">__printf0like(fmtarg,firstvararg)</b></a></td>
- <td>Exactly the same as
- <a class="permalink" href="#__printflike"><b class="Sy" id="__printflike">__printflike</b></a>
- except <var class="Fa">fmtarg</var> may be
- <code class="Dv">NULL.</code></td>
- </tr>
- <tr id="__strong_reference(sym,aliassym)">
- <td><a class="permalink" href="#__strong_reference(sym,aliassym)"><b class="Sy">__strong_reference(sym,aliassym)</b></a></td>
- <td></td>
- </tr>
- <tr id="__weak_reference(sym,alias)">
- <td><a class="permalink" href="#__weak_reference(sym,alias)"><b class="Sy">__weak_reference(sym,alias)</b></a></td>
- <td></td>
- </tr>
- <tr id="__warn_references(sym,msg)">
- <td><a class="permalink" href="#__warn_references(sym,msg)"><b class="Sy">__warn_references(sym,msg)</b></a></td>
- <td></td>
- </tr>
- <tr id="__sym_compat(sym,impl,verid)">
- <td><a class="permalink" href="#__sym_compat(sym,impl,verid)"><b class="Sy">__sym_compat(sym,impl,verid)</b></a></td>
- <td></td>
- </tr>
- <tr id="__sym_default(sym,impl,verid)">
- <td><a class="permalink" href="#__sym_default(sym,impl,verid)"><b class="Sy">__sym_default(sym,impl,verid)</b></a></td>
- <td></td>
- </tr>
- <tr id="__GLOBAL(sym)">
- <td><a class="permalink" href="#__GLOBAL(sym)"><b class="Sy">__GLOBAL(sym)</b></a></td>
- <td></td>
- </tr>
- <tr id="__WEAK(sym)">
- <td><a class="permalink" href="#__WEAK(sym)"><b class="Sy">__WEAK(sym)</b></a></td>
- <td></td>
- </tr>
- <tr id="__DECONST(type,var)">
- <td><a class="permalink" href="#__DECONST(type,var)"><b class="Sy">__DECONST(type,var)</b></a></td>
- <td></td>
- </tr>
- <tr id="__DEVOLATILE(type,var)">
- <td><a class="permalink" href="#__DEVOLATILE(type,var)"><b class="Sy">__DEVOLATILE(type,var)</b></a></td>
- <td></td>
- </tr>
- <tr id="__DEQUALIFY(type,var)">
- <td><a class="permalink" href="#__DEQUALIFY(type,var)"><b class="Sy">__DEQUALIFY(type,var)</b></a></td>
- <td></td>
- </tr>
- <tr id="__RENAME(x)">
- <td><a class="permalink" href="#__RENAME(x)"><b class="Sy">__RENAME(x)</b></a></td>
- <td></td>
- </tr>
- <tr id="__arg_type_tag">
- <td><a class="permalink" href="#__arg_type_tag"><b class="Sy">__arg_type_tag</b></a></td>
- <td></td>
- </tr>
- <tr id="__datatype_type_tag">
- <td><a class="permalink" href="#__datatype_type_tag"><b class="Sy">__datatype_type_tag</b></a></td>
- <td></td>
- </tr>
- <tr id="__align_up(x,y)">
- <td><a class="permalink" href="#__align_up(x,y)"><b class="Sy">__align_up(x,y)</b></a></td>
- <td></td>
- </tr>
- <tr id="__align_down(x,y)">
- <td><a class="permalink" href="#__align_down(x,y)"><b class="Sy">__align_down(x,y)</b></a></td>
- <td></td>
- </tr>
- <tr id="__is_aligned(x,y)">
- <td><a class="permalink" href="#__is_aligned(x,y)"><b class="Sy">__is_aligned(x,y)</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking_and_Debugging_Macros"><a class="permalink" href="#Locking_and_Debugging_Macros">Locking
- and Debugging Macros</a></h2>
-<p class="Pp">Macros for lock annotation and debugging, as well as some general
- debugging macros for address sanitizers.</p>
-<table class="Bl-column">
- <tr id="__lock_annotate(x)">
- <td><a class="permalink" href="#__lock_annotate(x)"><b class="Sy">__lock_annotate(x)</b></a></td>
- <td></td>
- </tr>
- <tr id="__lockable">
- <td><a class="permalink" href="#__lockable"><b class="Sy">__lockable</b></a></td>
- <td></td>
- </tr>
- <tr id="__locks_exclusive">
- <td><a class="permalink" href="#__locks_exclusive"><b class="Sy">__locks_exclusive</b></a></td>
- <td></td>
- </tr>
- <tr id="__locks_shared">
- <td><a class="permalink" href="#__locks_shared"><b class="Sy">__locks_shared</b></a></td>
- <td></td>
- </tr>
- <tr id="__trylocks_exclusive">
- <td><a class="permalink" href="#__trylocks_exclusive"><b class="Sy">__trylocks_exclusive</b></a></td>
- <td></td>
- </tr>
- <tr id="__trylocks_shared">
- <td><a class="permalink" href="#__trylocks_shared"><b class="Sy">__trylocks_shared</b></a></td>
- <td></td>
- </tr>
- <tr id="__unlocks">
- <td><a class="permalink" href="#__unlocks"><b class="Sy">__unlocks</b></a></td>
- <td></td>
- </tr>
- <tr id="__asserts_exclusive">
- <td><a class="permalink" href="#__asserts_exclusive"><b class="Sy">__asserts_exclusive</b></a></td>
- <td></td>
- </tr>
- <tr id="__asserts_shared">
- <td><a class="permalink" href="#__asserts_shared"><b class="Sy">__asserts_shared</b></a></td>
- <td></td>
- </tr>
- <tr id="__requires_exclusive">
- <td><a class="permalink" href="#__requires_exclusive"><b class="Sy">__requires_exclusive</b></a></td>
- <td></td>
- </tr>
- <tr id="__requires_shared">
- <td><a class="permalink" href="#__requires_shared"><b class="Sy">__requires_shared</b></a></td>
- <td></td>
- </tr>
- <tr id="__requires_unlocked">
- <td><a class="permalink" href="#__requires_unlocked"><b class="Sy">__requires_unlocked</b></a></td>
- <td></td>
- </tr>
- <tr id="__no_lock_analysis">
- <td><a class="permalink" href="#__no_lock_analysis"><b class="Sy">__no_lock_analysis</b></a></td>
- <td></td>
- </tr>
- <tr id="__nosanitizeaddress">
- <td><a class="permalink" href="#__nosanitizeaddress"><b class="Sy">__nosanitizeaddress</b></a></td>
- <td></td>
- </tr>
- <tr id="__nosanitizememory">
- <td><a class="permalink" href="#__nosanitizememory"><b class="Sy">__nosanitizememory</b></a></td>
- <td></td>
- </tr>
- <tr id="__nosanitizethread">
- <td><a class="permalink" href="#__nosanitizethread"><b class="Sy">__nosanitizethread</b></a></td>
- <td></td>
- </tr>
- <tr id="__nostackprotector">
- <td><a class="permalink" href="#__nostackprotector"><b class="Sy">__nostackprotector</b></a></td>
- <td></td>
- </tr>
- <tr id="__guarded_by(x)">
- <td><a class="permalink" href="#__guarded_by(x)"><b class="Sy">__guarded_by(x)</b></a></td>
- <td></td>
- </tr>
- <tr id="__pt_guarded_by(x)">
- <td><a class="permalink" href="#__pt_guarded_by(x)"><b class="Sy">__pt_guarded_by(x)</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Emulated_Keywords"><a class="permalink" href="#Emulated_Keywords">Emulated
- Keywords</a></h2>
-<p class="Pp">As C evolves, many of the old macros we once used have been
- incorporated into the standard language. As this happens, we add support for
- these keywords as macros for older compilation environments. Sometimes this
- results in a nop in the older environment.</p>
-<table class="Bl-column">
- <tr id="Keyword">
- <td><a class="permalink" href="#Keyword"><b class="Sy">Keyword</b></a></td>
- <td><a class="permalink" href="#Description~3"><b class="Sy" id="Description~3">Description</b></a></td>
- </tr>
- <tr id="_Alignas(x)">
- <td><a class="permalink" href="#_Alignas(x)"><b class="Sy">_Alignas(x)</b></a></td>
- <td></td>
- </tr>
- <tr id="_Alignof(x)">
- <td><a class="permalink" href="#_Alignof(x)"><b class="Sy">_Alignof(x)</b></a></td>
- <td></td>
- </tr>
- <tr id="_Noreturn">
- <td><a class="permalink" href="#_Noreturn"><b class="Sy">_Noreturn</b></a></td>
- <td>Expands to &#x201C;[[noreturn]]&#x201D; in C++-11 and newer compilation
- environments, otherwise &#x201C;__dead2&#x201D;</td>
- </tr>
- <tr id="_Static_assert(x,">
- <td><a class="permalink" href="#_Static_assert(x,"><b class="Sy">_Static_assert(x,
- y)</b></a></td>
- <td>Compile time assertion that <var class="Fa">x</var> is true, otherwise
- emit <var class="Fa">y</var> as the error message.</td>
- </tr>
- <tr id="_Thread_local">
- <td><a class="permalink" href="#_Thread_local"><b class="Sy">_Thread_local</b></a></td>
- <td>Designate variable as thread local storage</td>
- </tr>
- <tr id="__generic">
- <td><a class="permalink" href="#__generic"><b class="Sy">__generic</b></a></td>
- <td>implement _Generic-like features which aren't entirely possible to
- emulate the _Generic keyword</td>
- </tr>
- <tr id="__noexcept">
- <td><a class="permalink" href="#__noexcept"><b class="Sy">__noexcept</b></a></td>
- <td>to emulate the C++11 argument-less noexcept form</td>
- </tr>
- <tr id="__noexcept_if">
- <td><a class="permalink" href="#__noexcept_if"><b class="Sy">__noexcept_if</b></a></td>
- <td>to emulate the C++11 conditional noexcept form</td>
- </tr>
- <tr id="_Nonnull">
- <td><a class="permalink" href="#_Nonnull"><b class="Sy">_Nonnull</b></a></td>
- <td></td>
- </tr>
- <tr id="_Nullable">
- <td><a class="permalink" href="#_Nullable"><b class="Sy">_Nullable</b></a></td>
- <td></td>
- </tr>
- <tr id="_Null_unspecified">
- <td><a class="permalink" href="#_Null_unspecified"><b class="Sy">_Null_unspecified</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Support_Macros"><a class="permalink" href="#Support_Macros">Support
- Macros</a></h2>
-<p class="Pp">The following macros are defined, or have specific values, to
- denote certain things about the build environment.</p>
-<table class="Bl-column">
- <tr id="Macro~3">
- <td><a class="permalink" href="#Macro~3"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description~4"><b class="Sy" id="Description~4">Description</b></a></td>
- </tr>
- <tr id="__LONG_LONG_SUPPORTED">
- <td><a class="permalink" href="#__LONG_LONG_SUPPORTED"><b class="Sy">__LONG_LONG_SUPPORTED</b></a></td>
- <td>Variables may be declared &#x201C;long long&#x201D;. This is defined for
- C99 or newer and C++ environments.</td>
- </tr>
- <tr id="__STDC_LIMIT_MACROS">
- <td><a class="permalink" href="#__STDC_LIMIT_MACROS"><b class="Sy">__STDC_LIMIT_MACROS</b></a></td>
- <td></td>
- </tr>
- <tr id="__STDC_CONSTANT_MACROS">
- <td><a class="permalink" href="#__STDC_CONSTANT_MACROS"><b class="Sy">__STDC_CONSTANT_MACROS</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Convenience_Macros"><a class="permalink" href="#Convenience_Macros">Convenience
- Macros</a></h2>
-<p class="Pp">These macros make it easier to do a number of things, even though
- strictly speaking the standard places their normal form in another
- header.</p>
-<table class="Bl-column">
- <tr id="Macro~4">
- <td><a class="permalink" href="#Macro~4"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description~5"><b class="Sy" id="Description~5">Description</b></a></td>
- </tr>
- <tr id="__offsetof(type,field)">
- <td><a class="permalink" href="#__offsetof(type,field)"><b class="Sy">__offsetof(type,field)</b></a></td>
- <td></td>
- </tr>
- <tr id="__rangeof(type,start,end)">
- <td><a class="permalink" href="#__rangeof(type,start,end)"><b class="Sy">__rangeof(type,start,end)</b></a></td>
- <td></td>
- </tr>
- <tr id="__containerof(x,s,m)">
- <td><a class="permalink" href="#__containerof(x,s,m)"><b class="Sy">__containerof(x,s,m)</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ID_Strings"><a class="permalink" href="#ID_Strings">ID
- Strings</a></h2>
-<p class="Pp">This section is deprecated, but is kept around because too much
- contrib software still uses these.</p>
-<table class="Bl-column">
- <tr id="Macro~5">
- <td><a class="permalink" href="#Macro~5"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description~6"><b class="Sy" id="Description~6">Description</b></a></td>
- </tr>
- <tr id="__IDSTRING(name,string)">
- <td><a class="permalink" href="#__IDSTRING(name,string)"><b class="Sy">__IDSTRING(name,string)</b></a></td>
- <td></td>
- </tr>
- <tr id="__FBSDID(s)">
- <td><a class="permalink" href="#__FBSDID(s)"><b class="Sy">__FBSDID(s)</b></a></td>
- <td></td>
- </tr>
- <tr id="__RCSID(s)">
- <td><a class="permalink" href="#__RCSID(s)"><b class="Sy">__RCSID(s)</b></a></td>
- <td></td>
- </tr>
- <tr id="__RCSID_SOURCE(s)">
- <td><a class="permalink" href="#__RCSID_SOURCE(s)"><b class="Sy">__RCSID_SOURCE(s)</b></a></td>
- <td></td>
- </tr>
- <tr id="__SCCSID(s)">
- <td><a class="permalink" href="#__SCCSID(s)"><b class="Sy">__SCCSID(s)</b></a></td>
- <td></td>
- </tr>
- <tr id="__COPYRIGHT(s)">
- <td><a class="permalink" href="#__COPYRIGHT(s)"><b class="Sy">__COPYRIGHT(s)</b></a></td>
- <td></td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="Supported_C_Environments"><a class="permalink" href="#Supported_C_Environments">Supported
- C Environments</a></h1>
-<p class="Pp"><span class="Ux">FreeBSD</span> supports a number C standard
- environments. Selection of the language dialect is a compiler-dependent
- command line option, though it is usually <code class="Fl">-std=XX</code>
- where XX is the standard to set for compiling, such as c89 or c23.
- <span class="Ux">FreeBSD</span> provides a number of selection macros to
- control visibility of symbols. Please see the section on Selection Macros
- for the specifics.</p>
-<dl class="Bl-tag">
- <dt>K &amp; R</dt>
- <dd>Pre-ANSI Kernighan and Ritchie C. Sometimes called &#x201C;knr&#x201D; or
- &#x201C;C78&#x201D; to distinguish it from newer standards. Support for
- this compilation environment is dependent on compilers supporting this
- configuration. Most of the old forms of C have been deprecated or removed
- in. Compilers make compiling in this mode increasingly difficult and
- support for it may ultimately be removed from the tree.</dd>
- <dt id="__STDC__"><span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></dt>
- <dd><a class="permalink" href="#__STDC__"><code class="Dv">__STDC__</code></a>
- is defined, however <code class="Dv">__STDC_VERSION__</code> is not.
- <p class="Pp">Strict environment selected with
- <code class="Dv">_ANSI_SOURCE</code>.</p>
- </dd>
- <dt id="__STDC_VERSION__"><span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></dt>
- <dd><a class="permalink" href="#__STDC_VERSION__"><code class="Dv">__STDC_VERSION__
- = 199901L</code></a>
- <p class="Pp">Strict environment selected with
- <code class="Dv">_C99_SOURCE</code>.</p>
- </dd>
- <dt id="__STDC_VERSION__~2"><span class="St">ISO/IEC 9899:2011
- (&#x201C;ISO&#x00A0;C11&#x201D;)</span></dt>
- <dd><a class="permalink" href="#__STDC_VERSION__~2"><code class="Dv">__STDC_VERSION__
- = 201112L</code></a>
- <p class="Pp">Strict environment selected with
- <code class="Dv">_C11_SOURCE</code>.</p>
- </dd>
- <dt id="__STDC_VERSION__~3">ISO/IEC 9899:2018 (&#x201C;ISO C17&#x201D;)</dt>
- <dd><a class="permalink" href="#__STDC_VERSION__~3"><code class="Dv">__STDC_VERSION__
- = 201710L</code></a>
- <p class="Pp">Strict environment selected with
- <code class="Dv">_C11_SOURCE</code> since there are no new C17 only
- symbols or macros.</p>
- <p class="Pp">This version of the standard did not introduce any new
- features, only made minor, technical corrections.</p>
- </dd>
- <dt id="__STDC_VERSION__~4"></dt>
- <dd><a class="permalink" href="#__STDC_VERSION__~4"><code class="Dv">__STDC_VERSION__
- = 202311L</code></a> Strict environment selected with
- <code class="Dv">_C23_SOURCE</code> though ISO C23 support is only
- partially implemented.</dd>
-</dl>
-<p class="Pp">For more information on C standards, see
- <a class="Xr">c(7)</a>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Programming_Environment_Selection_Macros"><a class="permalink" href="#Programming_Environment_Selection_Macros">Programming
- Environment Selection Macros</a></h2>
-<p class="Pp">Defining the macros outlined below requests that the system header
- files provide only the functions, structures and macros (symbols) defined by
- the appropriate standard, while suppressing all extensions. However, system
- headers not defined by that standard may define extensions. You may only
- define one of the following for any compilation unit.</p>
-<table class="Bl-column">
- <tr id="Macro~6">
- <td><a class="permalink" href="#Macro~6"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Environment"><b class="Sy" id="Environment">Environment</b></a></td>
- </tr>
- <tr id="_POSIX_SOURCE">
- <td><a class="permalink" href="#_POSIX_SOURCE"><code class="Dv">_POSIX_SOURCE</code></a></td>
- <td><span class="St">IEEE Std 1003.1-1988 (&#x201C;POSIX.1&#x201D;)</span>
- including <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE">
- <td><a class="permalink" href="#_POSIX_C_SOURCE"><code class="Dv">_POSIX_C_SOURCE
- = 1</code></a></td>
- <td><span class="St">IEEE Std 1003.1-1988 (&#x201C;POSIX.1&#x201D;)</span>
- including <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~2">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~2"><code class="Dv">_POSIX_C_SOURCE
- = 2</code></a></td>
- <td><span class="St">IEEE Std 1003.1-1990 (&#x201C;POSIX.1&#x201D;)</span>
- including <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~3">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~3"><code class="Dv">_POSIX_C_SOURCE
- = 199309</code></a></td>
- <td><span class="St">IEEE Std 1003.1b-1993 (&#x201C;POSIX.1b&#x201D;)</span>
- including <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~4">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~4"><code class="Dv">_POSIX_C_SOURCE
- = 199506</code></a></td>
- <td><span class="St">IEEE Std 1003.1c-1995 (&#x201C;POSIX.1c&#x201D;)</span>
- including <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~5">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~5"><code class="Dv">_POSIX_C_SOURCE
- = 200112</code></a></td>
- <td><span class="St">IEEE Std 1003.1-2001 (&#x201C;POSIX.1&#x201D;)</span>
- including <span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~6">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~6"><code class="Dv">_POSIX_C_SOURCE
- = 200809</code></a></td>
- <td><span class="St">IEEE Std 1003.1-2008 (&#x201C;POSIX.1&#x201D;)</span>
- including <span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></td>
- </tr>
- <tr id="_POSIX_C_SOURCE~7">
- <td><a class="permalink" href="#_POSIX_C_SOURCE~7"><code class="Dv">_POSIX_C_SOURCE
- = 202405</code></a></td>
- <td>including ISO/IEC 9899:2018 (&quot;ISO C17&quot;),</td>
- </tr>
- <tr id="_XOPEN_SOURCE">
- <td><a class="permalink" href="#_XOPEN_SOURCE"><code class="Dv">_XOPEN_SOURCE
- defined</code></a></td>
- <td><span class="St">IEEE Std 1003.1-1990 (&#x201C;POSIX.1&#x201D;)</span>
- with XPG Extensions to <span class="St">Version&#x00A0;1 of the Single
- UNIX Specification (&#x201C;SUSv1&#x201D;)</span> including
- <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span>. However,
- <span class="Ux">FreeBSD</span> implements this as a NOP because too much
- software breaks with the correct strict environment.</td>
- </tr>
- <tr id="_XOPEN_SOURCE~2">
- <td><a class="permalink" href="#_XOPEN_SOURCE~2"><code class="Dv">_XOPEN_SOURCE
- = 500</code></a></td>
- <td><span class="St">IEEE Std 1003.1c-1995 (&#x201C;POSIX.1c&#x201D;)</span>
- and XPG extensions to <span class="St">Version&#x00A0;2 of the Single UNIX
- Specification (&#x201C;SUSv2&#x201D;)</span> including
- <span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_XOPEN_SOURCE~3">
- <td><a class="permalink" href="#_XOPEN_SOURCE~3"><code class="Dv">_XOPEN_SOURCE
- = 600</code></a></td>
- <td><span class="St">IEEE Std 1003.1-2001 (&#x201C;POSIX.1&#x201D;)</span>
- and XPG extensions to <span class="St">Version&#x00A0;3 of the Single UNIX
- Specification (&#x201C;SUSv3&#x201D;)</span> including
- <span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></td>
- </tr>
- <tr id="_XOPEN_SOURCE~4">
- <td><a class="permalink" href="#_XOPEN_SOURCE~4"><code class="Dv">_XOPEN_SOURCE
- = 700</code></a></td>
- <td><span class="St">IEEE Std 1003.1-2008 (&#x201C;POSIX.1&#x201D;)</span>
- and XPG extensions to <span class="St">Version&#x00A0;4 of the Single UNIX
- Specification (&#x201C;SUSv4&#x201D;)</span> including
- <span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></td>
- </tr>
- <tr id="_XOPEN_SOURCE~5">
- <td><a class="permalink" href="#_XOPEN_SOURCE~5"><code class="Dv">_XOPEN_SOURCE
- = 800</code></a></td>
- <td>and XPG extensions to Version 5 of the Single UNIX Specification
- (&#x201C;SUSv5&#x201D;) including ISO/IEC 9899:2018 (&#x201C;ISO
- C17&#x201D;)</td>
- </tr>
- <tr id="_ANSI_SOURCE">
- <td><a class="permalink" href="#_ANSI_SOURCE"><code class="Dv">_ANSI_SOURCE</code></a></td>
- <td><span class="St">ANSI X3.159-1989
- (&#x201C;ANSI&#x00A0;C89&#x201D;)</span></td>
- </tr>
- <tr id="_C99_SOURCE">
- <td><a class="permalink" href="#_C99_SOURCE"><code class="Dv">_C99_SOURCE</code></a></td>
- <td><span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span></td>
- </tr>
- <tr id="_C11_SOURCE">
- <td><a class="permalink" href="#_C11_SOURCE"><code class="Dv">_C11_SOURCE</code></a></td>
- <td><span class="St">ISO/IEC 9899:2011
- (&#x201C;ISO&#x00A0;C11&#x201D;)</span></td>
- </tr>
- <tr id="_C23_SOURCE">
- <td><a class="permalink" href="#_C23_SOURCE"><code class="Dv">_C23_SOURCE</code></a></td>
- <td></td>
- </tr>
- <tr id="_BSD_SOURCE">
- <td><a class="permalink" href="#_BSD_SOURCE"><code class="Dv">_BSD_SOURCE</code></a></td>
- <td>Everything, including <span class="Ux">FreeBSD extensions</span></td>
- </tr>
-</table>
-<p class="Pp">Note: and XPG extensions to Version 5 of the Single UNIX
- Specification (&quot;SUSv5&quot;) support is incomplete.</p>
-<p class="Pp">When both POSIX and C environments are selected, the POSIX
- environment selects which C environment is used. However, when C11 dialect
- is selected with <span class="St">IEEE Std 1003.1-2008
- (&#x201C;POSIX.1&#x201D;)</span>, definitions for <span class="St">ISO/IEC
- 9899:2011 (&#x201C;ISO&#x00A0;C11&#x201D;)</span> are also included.
- Likewise, when C23 dialog is selected with <span class="St">IEEE Std
- 1003.1-2008 (&#x201C;POSIX.1&#x201D;)</span> or, definitions for are also
- included.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Header_Visibility_Macros"><a class="permalink" href="#Header_Visibility_Macros">Header
- Visibility Macros</a></h2>
-<p class="Pp">These macros are set by <code class="Nm">cdefs</code> to control
- the visibility of different standards. Users must not define these, and
- doing so will produced undefined results. They are documented here for
- developers working on system's header files.</p>
-<table class="Bl-column">
- <tr id="__XSI_VISIBLE">
- <td><a class="permalink" href="#__XSI_VISIBLE"><code class="Dv">__XSI_VISIBLE</code></a></td>
- <td>Restricts the visibility of XOPEN Single Unix Standard version. Possible
- values are 500, 600, 700 or 800, corresponding to Issue 5, 6, 7, or 8 of
- the Single Unix Standard. These are extra functions in addition to the
- normal POSIX ones.</td>
- </tr>
- <tr id="__POSIX_VISIBLE">
- <td><a class="permalink" href="#__POSIX_VISIBLE"><code class="Dv">__POSIX_VISIBLE</code></a></td>
- <td>Make symbols associated with certain standards versions visible. Set to
- the value assigned to <code class="Dv">_POSIX_C_SOURCE</code> by
- convention with 199009 for <span class="St">IEEE Std 1003.1-1988
- (&#x201C;POSIX.1&#x201D;)</span> and 199209 <span class="St">IEEE Std
- 1003.1-1990 (&#x201C;POSIX.1&#x201D;)</span>.</td>
- </tr>
- <tr id="__ISO_C_VISIBLE">
- <td><a class="permalink" href="#__ISO_C_VISIBLE"><code class="Dv">__ISO_C_VISIBLE</code></a></td>
- <td>The C level that's visible. Possible values include 1990, 1999, 2011,
- 2017 and 2023 for <span class="St">ISO/IEC 9899:1990
- (&#x201C;ISO&#x00A0;C90&#x201D;)</span>, <span class="St">ISO/IEC
- 9899:1999 (&#x201C;ISO&#x00A0;C99&#x201D;)</span>,
- <span class="St">ISO/IEC 9899:2011
- (&#x201C;ISO&#x00A0;C11&#x201D;)</span>, ISO/IEC 9899:2018 (&quot;ISO
- C17&quot;), and, respectively.</td>
- </tr>
- <tr id="__BSD_VISIBLE">
- <td><a class="permalink" href="#__BSD_VISIBLE"><code class="Dv">__BSD_VISIBLE</code></a></td>
- <td>1 if the <span class="Ux">FreeBSD</span> extensions are visible, 0
- otherwise.</td>
- </tr>
- <tr id="__EXT1_VISIBLE">
- <td><a class="permalink" href="#__EXT1_VISIBLE"><code class="Dv">__EXT1_VISIBLE</code></a></td>
- <td>1 if the <span class="St">ISO/IEC 9899:2011
- (&#x201C;ISO&#x00A0;C11&#x201D;)</span> Appendix K 3.7.4.1 extensions are
- visible, 0 otherwise.</td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="Supported_C++_Environments"><a class="permalink" href="#Supported_C++_Environments">Supported
- C++ Environments</a></h1>
-<p class="Pp"><span class="Ux">FreeBSD</span> supports C++11 and newer standards
- fully.</p>
-<dl class="Bl-tag">
- <dt id="__cplusplus">ISO/IEC 14882:1998 (&quot;C++98&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus"><code class="Dv">__cplusplus =
- 199711</code></a>
- <p class="Pp">The first standardized version of C++. Unlike K &amp; R
- support in C, compilers dropped support for versions of the language
- prior to C++98.</p>
- </dd>
- <dt id="__cplusplus~2">ISO/IEC 14882:2003 (&quot;C++03&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~2"><code class="Dv">__cplusplus =
- 199711</code></a>
- <p class="Pp">Note, this is the same value as C++98. C++03 did not define a
- new value for <code class="Dv">__cplusplus</code>. There is no way, at
- compile time, to detect the difference. The standard resolved a number
- of defect reports and slightly expanded value initialization. Most
- compilers support it the same as C++98.</p>
- </dd>
- <dt id="__cplusplus~3">ISO/IEC 14882:2011 (&quot;C++11&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~3"><code class="Dv">__cplusplus =
- 201103</code></a></dd>
- <dt id="__cplusplus~4">ISO/IEC 14882:2014 (&quot;C++14&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~4"><code class="Dv">__cplusplus =
- 201402</code></a></dd>
- <dt id="__cplusplus~5">ISO/IEC 14882:2017 (&quot;C++17&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~5"><code class="Dv">__cplusplus =
- 201703</code></a></dd>
- <dt id="__cplusplus~6">ISO/IEC 14882:2020 (&quot;C++20&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~6"><code class="Dv">__cplusplus =
- 202002</code></a></dd>
- <dt id="__cplusplus~7">ISO/IEC 14882:2023 (&quot;C++23&quot;)</dt>
- <dd><a class="permalink" href="#__cplusplus~7"><code class="Dv">__cplusplus =
- 202302</code></a></dd>
-</dl>
-<p class="Pp"><span class="Ux">FreeBSD</span> uses llvm project's libc++.
- However, they are removing support for C++ prior to C++11. While programs
- can still build with earlier environments for now, these changes mean that
- <code class="Fl">-pedantic-errors</code> cannot be reliably enabled for
- standards older than C++11.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="In">&lt;<a class="In">sys/cdefs.h</a>&gt;</code>
- first appeared in <span class="Ux">4.3BSD-NET/2</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 9, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cnv.9 4.html b/static/freebsd/man9/cnv.9 4.html
deleted file mode 100644
index bca0c09f..00000000
--- a/static/freebsd/man9/cnv.9 4.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CNV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CNV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cnvlist_get</code>,
- <code class="Nm">cnvlist_take</code>, <code class="Nm">cnvlist_free</code>
- &#x2014; <span class="Nd">API for managing name/value pairs by
- cookie</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1>
-<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/cnv.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">cnvlist_name</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cnvlist_type</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">cnvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">cnvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">cnvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">cnvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const void *</var>
- <br/>
- <code class="Fn">cnvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>);</p>
-<p class="Pp"><var class="Ft">const bool *</var>
- <br/>
- <code class="Fn">cnvlist_get_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const uint64_t *</var>
- <br/>
- <code class="Fn">cnvlist_get_number_array</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const char * const *</var>
- <br/>
- <code class="Fn">cnvlist_get_string_array</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t * const *</var>
- <br/>
- <code class="Fn">cnvlist_get_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cnvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const int *</var>
- <br/>
- <code class="Fn">cnvlist_get_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const
- void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">cnvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">cnvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">cnvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">cnvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const void *</var>
- <br/>
- <code class="Fn">cnvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>);</p>
-<p class="Pp"><var class="Ft">const bool *</var>
- <br/>
- <code class="Fn">cnvlist_take_bool_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const uint64_t *</var>
- <br/>
- <code class="Fn">cnvlist_take_number_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const char * const *</var>
- <br/>
- <code class="Fn">cnvlist_take_string_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t * const *</var>
- <br/>
- <code class="Fn">cnvlist_take_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cnvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">const int *</var>
- <br/>
- <code class="Fn">cnvlist_take_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitemsp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_null</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_bool</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_number</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_string</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_nvlist</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_descriptor</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_binary</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_bool_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_number_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_string_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cnvlist_free_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">libnv</code> library permits easy management
- of name/value pairs and can send and receive them over sockets. For more
- information, see <a class="Xr">nv(9)</a>.</p>
-<p class="Pp" id="nvlist_next">The concept of cookies is explained in
- <a class="permalink" href="#nvlist_next"><code class="Fn">nvlist_next</code></a>(),
- <a class="permalink" href="#nvlist_get_parent"><code class="Fn" id="nvlist_get_parent">nvlist_get_parent</code></a>(),
- and
- <a class="permalink" href="#nvlist_get_pararr"><code class="Fn" id="nvlist_get_pararr">nvlist_get_pararr</code></a>()
- from <a class="Xr">nv(9)</a>.</p>
-<p class="Pp" id="cnvlist_name">The
- <a class="permalink" href="#cnvlist_name"><code class="Fn">cnvlist_name</code></a>()
- function returns the name of an element associated with
- <var class="Fa">cookie</var>.</p>
-<p class="Pp" id="cnvlist_type">The
- <a class="permalink" href="#cnvlist_type"><code class="Fn">cnvlist_type</code></a>()
- function returns the type of an element associated with
- <var class="Fa">cookie</var>. Types which can be returned are described in
- <a class="Xr">nv(9)</a>.</p>
-<p class="Pp">The <code class="Nm">cnvlist_get</code> functions return the value
- associated with <var class="Fa">cookie</var>. Returned strings, nvlists,
- descriptors, binaries, or arrays must not be modified by the user since they
- still belong to the nvlist. The nvlist must not be in an error state.</p>
-<p class="Pp" id="free">The <code class="Nm">cnvlist_take</code> functions
- return the value associated with the given cookie and remove the element
- from the nvlist. When the value is a string, binary, or array value, the
- caller is responsible for freeing the returned memory with
- <a class="permalink" href="#free"><code class="Fn">free</code></a>(<var class="Fa">3</var>).
- When the value is an nvlist, the caller is responsible for destroying the
- returned nvlist with
- <a class="permalink" href="#nvlist_destroy"><code class="Fn" id="nvlist_destroy">nvlist_destroy</code></a>().
- When the value is a descriptor, the caller is responsible for closing the
- returned descriptor with
- <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>).</p>
-<p class="Pp">The <code class="Nm">cnvlist_free</code> functions remove the
- element identified by <var class="Fa">cookie</var> and free any associated
- resources. If the element identified by <var class="Fa">cookie</var> has the
- wrong type or does not exist, the program aborts.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following example demonstrates how to deal with the cnvlist
- API.</p>
-<div class="Bd Pp Li">
-<pre>int type;
-void *cookie, *scookie, *bcookie;
-nvlist_t *nvl;
-char *name;
-
-nvl = nvlist_create(0);
-nvlist_add_bool(nvl, &quot;test&quot;, 1 == 2);
-nvlist_add_string(nvl, &quot;test2&quot;, &quot;cnvlist&quot;);
-cookie = NULL;
-
-while (nvlist_next(nvl, &amp;type, &amp;cookie) != NULL) {
- switch (type) {
- case NV_TYPE_BOOL:
- printf(&quot;test: %d\n&quot;, cnvlist_get_bool(cookie));
- bcookie = cookie;
- break;
- case NV_TYPE_STRING:
- printf(&quot;test2: %s\n&quot;, cnvlist_get_string(cookie));
- scookie = cookie;
- break;
- }
-}
-
-name = cnvlist_take_string(scookie);
-cnvlist_free_bool(bcookie);
-
-printf(&quot;test2: %s\n&quot;, name);
-free(name);
-
-printf(&quot;nvlist_empty = %d\n&quot;, nvlist_empty(nvl));
-nvlist_destroy(nvl);
-
-return (0);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">free(3)</a>,
- <a class="Xr">nv(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">cnv</code> API was created during the Google
- Summer Of Code 2016 by <span class="An">Adam Starak</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/condvar.9 4.html b/static/freebsd/man9/condvar.9 4.html
deleted file mode 100644
index 88cf8dc4..00000000
--- a/static/freebsd/man9/condvar.9 4.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CONDVAR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CONDVAR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">condvar</code>, <code class="Nm">cv_init</code>,
- <code class="Nm">cv_destroy</code>, <code class="Nm">cv_wait</code>,
- <code class="Nm">cv_wait_sig</code>, <code class="Nm">cv_wait_unlock</code>,
- <code class="Nm">cv_timedwait</code>,
- <code class="Nm">cv_timedwait_sbt</code>,
- <code class="Nm">cv_timedwait_sig</code>,
- <code class="Nm">cv_timedwait_sig_sbt</code>,
- <code class="Nm">cv_signal</code>, <code class="Nm">cv_broadcast</code>,
- <code class="Nm">cv_broadcastpri</code>, <code class="Nm">cv_wmesg</code>
- &#x2014; <span class="Nd">kernel condition variable</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/condvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_wait</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cv_wait_sig</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_wait_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cv_timedwait</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cv_timedwait_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cv_timedwait_sig</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cv_timedwait_sig_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_signal</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_broadcast</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cv_broadcastpri</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">int
- pri</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">cv_wmesg</code>(<var class="Fa" style="white-space: nowrap;">struct
- cv *cvp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Condition variables are used in conjunction with mutexes to wait
- for conditions to occur. Condition variables are created with
- <a class="permalink" href="#cv_init"><code class="Fn" id="cv_init">cv_init</code></a>(),
- where <var class="Fa">cvp</var> is a pointer to space for a
- <var class="Vt">struct cv</var>, and <var class="Fa">desc</var> is a pointer
- to a null-terminated character string that describes the condition variable.
- Condition variables are destroyed with
- <a class="permalink" href="#cv_destroy"><code class="Fn" id="cv_destroy">cv_destroy</code></a>().
- Threads wait on condition variables by calling
- <code class="Fn">cv_wait</code>(), <code class="Fn">cv_wait_sig</code>(),
- <code class="Fn">cv_wait_unlock</code>(),
- <code class="Fn">cv_timedwait</code>(), or
- <code class="Fn">cv_timedwait_sig</code>(). Threads unblock waiters by
- calling
- <a class="permalink" href="#cv_signal"><code class="Fn" id="cv_signal">cv_signal</code></a>()
- to unblock one waiter, or
- <a class="permalink" href="#cv_broadcast"><code class="Fn" id="cv_broadcast">cv_broadcast</code></a>()
- or
- <a class="permalink" href="#cv_broadcastpri"><code class="Fn" id="cv_broadcastpri">cv_broadcastpri</code></a>()
- to unblock all waiters. In addition to waking waiters,
- <code class="Fn">cv_broadcastpri</code>() ensures that all of the waiters
- have a priority of at least <var class="Fa">pri</var> by raising the
- priority of any threads that do not.
- <a class="permalink" href="#cv_wmesg"><code class="Fn" id="cv_wmesg">cv_wmesg</code></a>()
- returns the description string of <var class="Fa">cvp</var>, as set by the
- initial call to <code class="Fn">cv_init</code>().</p>
-<p class="Pp" id="cv_wait">The <var class="Fa">lock</var> argument is a pointer
- to either a <a class="Xr">mutex(9)</a>, <a class="Xr">rwlock(9)</a>, or
- <a class="Xr">sx(9)</a> lock. A <a class="Xr">mutex(9)</a> argument must be
- initialized with <code class="Dv">MTX_DEF</code> and not
- <code class="Dv">MTX_SPIN</code>. A thread must hold
- <var class="Fa">lock</var> before calling
- <a class="permalink" href="#cv_wait"><code class="Fn">cv_wait</code></a>(),
- <a class="permalink" href="#cv_wait_sig"><code class="Fn" id="cv_wait_sig">cv_wait_sig</code></a>(),
- <a class="permalink" href="#cv_wait_unlock"><code class="Fn" id="cv_wait_unlock">cv_wait_unlock</code></a>(),
- <a class="permalink" href="#cv_timedwait"><code class="Fn" id="cv_timedwait">cv_timedwait</code></a>(),
- or
- <a class="permalink" href="#cv_timedwait_sig"><code class="Fn" id="cv_timedwait_sig">cv_timedwait_sig</code></a>().
- When a thread waits on a condition, <var class="Fa">lock</var> is atomically
- released before the thread is blocked, then reacquired before the function
- call returns. In addition, the thread will fully drop the
- <var class="Va">Giant</var> mutex (even if recursed) while the it is
- suspended and will reacquire the <var class="Va">Giant</var> mutex before
- the function returns. The <code class="Fn">cv_wait_unlock</code>() function
- does not reacquire the lock before returning. Note that the
- <var class="Va">Giant</var> mutex may be specified as
- <var class="Fa">lock</var>. However, <var class="Va">Giant</var> may not be
- used as <var class="Fa">lock</var> for the
- <code class="Fn">cv_wait_unlock</code>() function. All waiters must pass the
- same <var class="Fa">lock</var> in conjunction with
- <var class="Fa">cvp</var>.</p>
-<p class="Pp" id="cv_wait~2">When
- <a class="permalink" href="#cv_wait~2"><code class="Fn">cv_wait</code></a>(),
- <a class="permalink" href="#cv_wait_sig~2"><code class="Fn" id="cv_wait_sig~2">cv_wait_sig</code></a>(),
- <a class="permalink" href="#cv_wait_unlock~2"><code class="Fn" id="cv_wait_unlock~2">cv_wait_unlock</code></a>(),
- <a class="permalink" href="#cv_timedwait~2"><code class="Fn" id="cv_timedwait~2">cv_timedwait</code></a>(),
- and
- <a class="permalink" href="#cv_timedwait_sig~2"><code class="Fn" id="cv_timedwait_sig~2">cv_timedwait_sig</code></a>()
- unblock, their calling threads are made runnable.
- <code class="Fn">cv_timedwait</code>() and
- <code class="Fn">cv_timedwait_sig</code>() wait for at most
- <var class="Fa">timo</var> / <code class="Dv">HZ</code> seconds before being
- unblocked and returning <code class="Er">EWOULDBLOCK</code>; otherwise, they
- return 0. <code class="Fn">cv_wait_sig</code>() and
- <code class="Fn">cv_timedwait_sig</code>() return prematurely with a value
- of <code class="Er">EINTR</code> or <code class="Er">ERESTART</code> if a
- signal is caught, or 0 if signaled via <code class="Fn">cv_signal</code>()
- or <code class="Fn">cv_broadcast</code>().</p>
-<p class="Pp" id="cv_timedwait_sbt"><a class="permalink" href="#cv_timedwait_sbt"><code class="Fn">cv_timedwait_sbt</code></a>()
- and
- <a class="permalink" href="#cv_timedwait_sig_sbt"><code class="Fn" id="cv_timedwait_sig_sbt">cv_timedwait_sig_sbt</code></a>()
- functions take <var class="Fa">sbt</var> argument instead of
- <var class="Fa">timo</var>. It allows to specify relative or absolute
- unblock time with higher resolution in form of
- <var class="Vt">sbintime_t</var>. The parameter <var class="Fa">pr</var>
- allows to specify wanted absolute event precision. The parameter
- <var class="Fa">flags</var> allows to pass additional
- <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>()
- flags.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, <code class="Fn">cv_wait_sig</code>(),
- <code class="Fn">cv_timedwait</code>(), and
- <code class="Fn">cv_timedwait_sig</code>() return 0. Otherwise, a non-zero
- error code is returned.</p>
-<p class="Pp"><code class="Fn">cv_wmesg</code>() returns the description string
- that was passed to <code class="Fn">cv_init</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">cv_wait_sig</code>() and
- <code class="Fn">cv_timedwait_sig</code>() will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt>
- <dd>A signal was caught and the system call should be interrupted.</dd>
- <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt>
- <dd>A signal was caught and the system call should be restarted.</dd>
-</dl>
-<p class="Pp"><code class="Fn">cv_timedwait</code>() and
- <code class="Fn">cv_timedwait_sig</code>() will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>Timeout expired.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>,
- <a class="Xr">sleep(9)</a>, <a class="Xr">sx(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 19, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/config_intrhook.9 3.html b/static/freebsd/man9/config_intrhook.9 3.html
deleted file mode 100644
index a728940d..00000000
--- a/static/freebsd/man9/config_intrhook.9 3.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CONFIG_INTRHOOK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CONFIG_INTRHOOK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">config_intrhook</code> &#x2014;
- <span class="Nd">schedule a function to be run after interrupts have been
- enabled, but before root is mounted</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">typedef void (*ich_func_t)(void *arg);</var></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">config_intrhook_establish</code>(<var class="Fa" style="white-space: nowrap;">struct
- intr_config_hook *hook</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">config_intrhook_disestablish</code>(<var class="Fa" style="white-space: nowrap;">struct
- intr_config_hook *hook</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">config_intrhook_drain</code>(<var class="Fa" style="white-space: nowrap;">struct
- intr_config_hook *hook</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">config_intrhook_oneshot</code>(<var class="Fa" style="white-space: nowrap;">ich_func_t
- func</var>, <var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#config_intrhook_establish"><code class="Fn" id="config_intrhook_establish">config_intrhook_establish</code></a>()
- function schedules a function to be run after interrupts have been enabled,
- but before root is mounted. If the system has already passed this point in
- its initialization, the function is called immediately.</p>
-<p class="Pp" id="config_intrhook_disestablish">The
- <a class="permalink" href="#config_intrhook_disestablish"><code class="Fn">config_intrhook_disestablish</code></a>()
- function removes the entry from the hook queue.</p>
-<p class="Pp" id="config_intrhook_drain">The
- <a class="permalink" href="#config_intrhook_drain"><code class="Fn">config_intrhook_drain</code></a>()
- function removes the entry from the hook queue in a safe way. If the hook is
- not currently active it removes <var class="Fa">hook</var> from the hook
- queue and returns <var class="Vt">ICHS_QUEUED</var>. If the hook is active,
- it waits for the hook to complete before returning
- <var class="Vt">ICHS_RUNNING</var>. If the hook has previously completed, it
- returns <var class="Vt">ICHS_DONE</var>. Because a
- <var class="Vt">config_intrhook</var> is undefined prior to
- <code class="Fn">config_intrhook_establish</code>(), this function may only
- be called after that function has returned.</p>
-<p class="Pp" id="config_intrhook_oneshot">The
- <a class="permalink" href="#config_intrhook_oneshot"><code class="Fn">config_intrhook_oneshot</code></a>()
- function schedules a function to be run as described for
- <code class="Fn">config_intrhook_establish</code>(); the entry is
- automatically removed from the hook queue after that function runs. This is
- appropriate when additional device configuration must be done after
- interrupts are enabled, but there is no need to stall the boot process after
- that. This function allocates memory using M_WAITOK; do not call this while
- holding any non-sleepable locks.</p>
-<p class="Pp" id="config_intrhook_disestablish~2">Before root is mounted, all
- the previously established hooks are run. The boot process is then stalled
- until all handlers remove their hook from the hook queue with
- <a class="permalink" href="#config_intrhook_disestablish~2"><code class="Fn">config_intrhook_disestablish</code></a>().
- The boot process then proceeds to attempt to mount the root file system. Any
- driver that can potentially provide devices they wish to be mounted as root
- must use either this hook, or probe all these devices in the initial probe.
- Since interrupts are disabled during the probe process, many drivers need a
- method to probe for devices with interrupts enabled.</p>
-<p class="Pp">The requests are made with the
- <var class="Vt">intr_config_hook</var> structure. This structure is defined
- as follows:</p>
-<div class="Bd Pp Li">
-<pre>struct intr_config_hook {
- TAILQ_ENTRY(intr_config_hook) ich_links;/* Private */
- ich_func_t ich_func; /* function to call */
- void *ich_arg; /* Argument to call */
-};</pre>
-</div>
-<p class="Pp">Storage for the <var class="Vt">intr_config_hook</var> structure
- must be provided by the driver. It must be stable from just before the hook
- is established until after the hook is disestablished.</p>
-<p class="Pp" id="SI_SUB_INT_CONFIG_HOOKS">Specifically, hooks are run at
- <a class="permalink" href="#SI_SUB_INT_CONFIG_HOOKS"><code class="Fn">SI_SUB_INT_CONFIG_HOOKS</code></a>(),
- which is immediately after the scheduler is started, and just before the
- root file system device is discovered.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A zero return value means the hook was successfully added to the
- queue (with either deferred or immediate execution). A non-zero return value
- means the hook could not be added to the queue because it was already on the
- queue.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DEVICE_ATTACH(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD
- 3.0</span> with the CAM subsystem, but are available for any driver to
- use.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The functions were written by <span class="An">Justin Gibbs</span>
- &lt;<a class="Mt" href="mailto:gibbs@FreeBSD.org">gibbs@FreeBSD.org</a>&gt;.
- This manual page was written by <span class="An">M. Warner Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 8, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/contigmalloc.9 3.html b/static/freebsd/man9/contigmalloc.9 3.html
deleted file mode 100644
index 8bfe5a5d..00000000
--- a/static/freebsd/man9/contigmalloc.9 3.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CONTIGMALLOC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CONTIGMALLOC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">contigmalloc</code> &#x2014;
- <span class="Nd">manage contiguous kernel physical memory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/malloc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">contigmalloc</code>(<var class="Fa">unsigned long size</var>,
- <var class="Fa">struct malloc_type *type</var>, <var class="Fa">int
- flags</var>, <var class="Fa">vm_paddr_t low</var>,
- <var class="Fa">vm_paddr_t high</var>, <var class="Fa">unsigned long
- alignment</var>, <var class="Fa">vm_paddr_t boundary</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/domainset.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">contigmalloc_domainset</code>(<var class="Fa">unsigned long
- size</var>, <var class="Fa">struct malloc_type *type</var>,
- <var class="Fa">struct domainset *ds</var>, <var class="Fa">int flags</var>,
- <var class="Fa">vm_paddr_t low</var>, <var class="Fa">vm_paddr_t high</var>,
- <var class="Fa">unsigned long alignment</var>, <var class="Fa">vm_paddr_t
- boundary</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#contigmalloc"><code class="Fn" id="contigmalloc">contigmalloc</code></a>()
- function allocates <var class="Fa">size</var> bytes of contiguous physical
- memory that is aligned to <var class="Fa">alignment</var> bytes, and which
- does not cross a boundary of <var class="Fa">boundary</var> bytes. If
- successful, the allocation will reside between physical addresses
- <var class="Fa">low</var> and <var class="Fa">high</var>. The returned
- pointer points to a wired kernel virtual address range of
- <var class="Fa">size</var> bytes allocated from the kernel virtual address
- (KVA) map.</p>
-<p class="Pp" id="contigmalloc_domainset">The
- <a class="permalink" href="#contigmalloc_domainset"><code class="Fn">contigmalloc_domainset</code></a>()
- variant allows the caller to additionally specify a
- <a class="Xr">numa(4)</a> domain selection policy. See
- <a class="Xr">domainset(9)</a> for some example policies.</p>
-<p class="Pp" id="contigmalloc~2">The <var class="Fa">flags</var> parameter
- modifies
- <a class="permalink" href="#contigmalloc~2"><code class="Fn">contigmalloc</code></a>()'s
- behaviour as follows:</p>
-<dl class="Bl-tag">
- <dt id="M_ZERO"><a class="permalink" href="#M_ZERO"><code class="Dv">M_ZERO</code></a></dt>
- <dd>Causes the allocated physical memory to be zero filled.</dd>
- <dt id="M_NOWAIT"><a class="permalink" href="#M_NOWAIT"><code class="Dv">M_NOWAIT</code></a></dt>
- <dd>Causes <code class="Fn">contigmalloc</code>() to return
- <code class="Dv">NULL</code> if the request cannot be immediately
- fulfilled due to resource shortage.</dd>
-</dl>
-<p class="Pp">Other flags (if present) are ignored.</p>
-<p class="Pp" id="contigfree">The
- <a class="permalink" href="#contigfree"><code class="Fn">contigfree</code></a>()
- function is deprecated. Use <a class="Xr">free(9)</a> instead.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">contigmalloc</code>() function does not sleep
- waiting for memory resources to be freed up, but instead actively reclaims
- pages before giving up. However, unless <code class="Dv">M_NOWAIT</code> is
- specified, it may select a page for reclamation that must first be written
- to backing storage, causing it to sleep.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">contigmalloc</code>() function returns a
- kernel virtual address if allocation succeeds, or
- <code class="Dv">NULL</code> otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>void *p;
-p = contigmalloc(8192, M_DEVBUF, M_ZERO, 0, (1L &lt;&lt; 22),
- 32 * 1024, 1024 * 1024);</pre>
-</div>
-<p class="Pp">Ask for 8192 bytes of zero-filled memory residing between physical
- address 0 and 4194303 inclusive, aligned to a 32K boundary and not crossing
- a 1M address boundary.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-<p class="Pp">The <code class="Fn">contigmalloc</code>() function will panic if
- <var class="Fa">size</var> is zero, or if <var class="Fa">alignment</var> or
- <var class="Fa">boundary</var> is not a power of two.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">memguard(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 26, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/copy.9 3.html b/static/freebsd/man9/copy.9 3.html
deleted file mode 100644
index 9e2c2554..00000000
--- a/static/freebsd/man9/copy.9 3.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">COPY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">COPY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">copy</code>, <code class="Nm">copyin</code>,
- <code class="Nm">copyin_nofault</code>, <code class="Nm">copyout</code>,
- <code class="Nm">copyout_nofault</code>, <code class="Nm">copystr</code>,
- <code class="Nm">copyinstr</code> &#x2014; <span class="Nd">heterogeneous
- address space copy functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">copyin</code>(<var class="Fa" style="white-space: nowrap;">const
- void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">copyin_nofault</code>(<var class="Fa" style="white-space: nowrap;">const
- void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">copyout</code>(<var class="Fa" style="white-space: nowrap;">const
- void *kaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *uaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">copyout_nofault</code>(<var class="Fa" style="white-space: nowrap;">const
- void *kaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *uaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int __deprecated</var>
- <br/>
- <code class="Fn">copystr</code>(<var class="Fa" style="white-space: nowrap;">const
- void *kfaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *kdaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *done</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">copyinstr</code>(<var class="Fa" style="white-space: nowrap;">const
- void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void
- *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>,
- <var class="Fa" style="white-space: nowrap;">size_t *done</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">copy</code> functions are designed to copy
- contiguous data from one address space to another.</p>
-<p class="Pp" id="copystr"><a class="permalink" href="#copystr"><code class="Fn">copystr</code></a>()
- is deprecated and should be replaced with <a class="Xr">strlcpy(9)</a>. It
- will be removed from <span class="Ux">FreeBSD 13</span>.</p>
-<p class="Pp" id="copyin">The
- <a class="permalink" href="#copyin"><code class="Fn">copyin</code></a>() and
- <code class="Fn">copyin_nofault</code>() functions copy
- <var class="Fa">len</var> bytes of data from the user-space address
- <var class="Fa">uaddr</var> to the kernel-space address
- <var class="Fa">kaddr</var>.</p>
-<p class="Pp" id="copyout">The
- <a class="permalink" href="#copyout"><code class="Fn">copyout</code></a>()
- and
- <a class="permalink" href="#copyout_nofault"><code class="Fn" id="copyout_nofault">copyout_nofault</code></a>()
- functions copy <var class="Fa">len</var> bytes of data from the kernel-space
- address <var class="Fa">kaddr</var> to the user-space address
- <var class="Fa">uaddr</var>.</p>
-<p class="Pp" id="copyin_nofault">The
- <a class="permalink" href="#copyin_nofault"><code class="Fn">copyin_nofault</code></a>()
- and
- <a class="permalink" href="#copyout_nofault~2"><code class="Fn" id="copyout_nofault~2">copyout_nofault</code></a>()
- functions require that the kernel-space and user-space data be accessible
- without incurring a page fault. The source and destination addresses must be
- physically mapped for read and write access, respectively, and neither the
- source nor destination addresses may be pageable.</p>
-<p class="Pp" id="copystr~2">The
- <a class="permalink" href="#copystr~2"><code class="Fn">copystr</code></a>()
- function copies a NUL-terminated string, at most <var class="Fa">len</var>
- bytes long, from kernel-space address <var class="Fa">kfaddr</var> to
- kernel-space address <var class="Fa">kdaddr</var>. The number of bytes
- actually copied, including the terminating NUL, is returned in
- <var class="Fa">*done</var> (if <var class="Fa">done</var> is
- <span class="No">non-</span><code class="Dv">NULL</code>).</p>
-<p class="Pp" id="copyinstr">The
- <a class="permalink" href="#copyinstr"><code class="Fn">copyinstr</code></a>()
- function copies a NUL-terminated string, at most <var class="Fa">len</var>
- bytes long, from user-space address <var class="Fa">uaddr</var> to
- kernel-space address <var class="Fa">kaddr</var>. The number of bytes
- actually copied, including the terminating NUL, is returned in
- <var class="Fa">*done</var> (if <var class="Fa">done</var> is
- <span class="No">non-</span><code class="Dv">NULL</code>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Nm">copy</code> functions return 0 on success.
- All but <code class="Fn">copystr</code>() return
- <code class="Er">EFAULT</code> if a bad address is encountered. The
- <code class="Fn">copyin_nofault</code>() and
- <code class="Fn">copyout_nofault</code>() functions return
- <code class="Er">EFAULT</code> if a page fault occurs. The
- <code class="Fn">copystr</code>() and <code class="Fn">copyinstr</code>()
- functions return <code class="Er">ENAMETOOLONG</code> if the string is
- longer than <var class="Fa">len</var> bytes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fetch(9)</a>, <a class="Xr">store(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 11, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/coredumper_register.9 3.html b/static/freebsd/man9/coredumper_register.9 3.html
deleted file mode 100644
index c63860e1..00000000
--- a/static/freebsd/man9/coredumper_register.9 3.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">COREDUMPER_REGISTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">COREDUMPER_REGISTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">coredumper_register</code>,
- <code class="Nm">coredumper_unregister</code> &#x2014;
- <span class="Nd">loadable user coredumper support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/ucoredump.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">coredumper_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- coredumper *cd</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">coredumper_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- coredumper *cd</var>);</p>
-<p class="Pp">
- <br/>
- <var class="Ft">int</var>
- <br/>
- <code class="Fn">coredumper_probe_fn</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">coredumper_handle_fn</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">off_t
- limit</var>);</p>
-<div class="Bd Pp Li">
-<pre>/* Incomplete, but the useful members are depicted here. */
-struct coredumper {
- const char *cd_name;
- coredumper_probe_fn *cd_probe;
- coredumper_handle_fn *cd_handle;
-};</pre>
-</div>
-<p class="Pp">
- <br/>
- <var class="Ft">int</var>
- <br/>
- <code class="Fn">coredump_init_fn</code>(<var class="Fa" style="white-space: nowrap;">const
- struct coredump_writer *</var>,
- <var class="Fa" style="white-space: nowrap;">const struct coredump_params
- *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">coredump_write_fn</code>(<var class="Fa" style="white-space: nowrap;">const
- struct coredump_writer *</var>,
- <var class="Fa" style="white-space: nowrap;">const void *</var>,
- <var class="Fa" style="white-space: nowrap;">size_t</var>,
- <var class="Fa" style="white-space: nowrap;">off_t</var>,
- <var class="Fa" style="white-space: nowrap;">enum uio_seg</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *</var>,
- <var class="Fa" style="white-space: nowrap;">size_t *</var>,
- <var class="Fa" style="white-space: nowrap;">struct thread *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">coredump_extend_fn</code>(<var class="Fa" style="white-space: nowrap;">const
- struct coredump_writer *</var>,
- <var class="Fa" style="white-space: nowrap;">off_t</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *</var>);</p>
-<div class="Bd Pp Li">
-<pre>struct coredump_writer {
- void *ctx;
- coredump_init_fn *init_fn;
- coredump_write_fn *write_fn;
- coredump_extend_fn *extend_fn;
-};</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">coredumper_register</code> mechanism provides
- a path for kernel modules to register a new user process core dumper. The
- expected use of <code class="Nm">coredumper_register</code> is for a module
- to define the fields of the struct coredumper listed above, then call
- <a class="permalink" href="#coredumper_register"><code class="Fn" id="coredumper_register">coredumper_register</code></a>()
- at <code class="Dv">MOD_LOAD</code> time. A corresponding
- <a class="permalink" href="#coredumper_unregister"><code class="Fn" id="coredumper_unregister">coredumper_unregister</code></a>()
- should be called at <code class="Dv">MOD_UNLOAD</code> time. Note that
- <code class="Fn">coredumper_unregister</code>() will block until the
- specified coredumper is no longer processing coredumps.</p>
-<p class="Pp" id="cd_probe">When a user process is preparing to start dumping
- core, the kernel will execute the
- <a class="permalink" href="#cd_probe"><code class="Fn">cd_probe</code></a>()
- function for each coredumper currently registered. The
- <code class="Fn">cd_probe</code>() function is expected to return either -1
- if it would decline to dump the process, or a priority level greater than 0.
- The coredumper with the highest priority will handle the coredump. The
- following default priorities are defined:</p>
-<dl class="Bl-tag">
- <dt id="COREDUMPER_NOMATCH"><a class="permalink" href="#COREDUMPER_NOMATCH"><code class="Dv">COREDUMPER_NOMATCH</code></a></dt>
- <dd>This dumper declines dumping the process.</dd>
- <dt id="COREDUMPER_GENERIC"><a class="permalink" href="#COREDUMPER_GENERIC"><code class="Dv">COREDUMPER_GENERIC</code></a></dt>
- <dd>This dumper will dump the process at the lowest priority. This priority is
- not recommended, as the default vnode dumper will bid at
- <code class="Dv">COREDUMPER_GENERIC</code> as well.</dd>
- <dt id="COREDUMPER_SPECIAL"><a class="permalink" href="#COREDUMPER_SPECIAL"><code class="Dv">COREDUMPER_SPECIAL</code></a></dt>
- <dd>This dumper provides special behavior, and will dump the process at a
- higher priority.</dd>
- <dt id="COREDUMPER_HIGHPRIORITY"><a class="permalink" href="#COREDUMPER_HIGHPRIORITY"><code class="Dv">COREDUMPER_HIGHPRIORITY</code></a></dt>
- <dd>This dumper would prefer to handle this coredump. This may be used by, for
- instance, a custom or vendor-specific coredump mechanism that wishes to
- preempt others.</dd>
-</dl>
-<p class="Pp" id="cd_probe~2">Note that this system has been designed such that
- the
- <a class="permalink" href="#cd_probe~2"><code class="Fn">cd_probe</code></a>()
- function can examine the process in question and make an informed decision.
- Different processes being dumped could probe at different priorities in the
- same coredumper.</p>
-<p class="Pp" id="cd_handle">Once the highest priority coredumper has been
- selected, the
- <a class="permalink" href="#cd_handle"><code class="Fn">cd_handle</code></a>()
- function will be invoked. The <code class="Fn">cd_handle</code>() will
- receive both the thread and the <code class="Dv">RLIMIT_CORE</code>
- <a class="Xr">setrlimit(2)</a> <var class="Fa">limit</var>. The proc lock
- will be held on entry, and should be unlocked before the handler returns.
- The <var class="Fa">limit</var> is typically passed to the
- <code class="Fn">sv_coredump</code>() that belongs to the process's
- <var class="Va">p_sysent</var>.</p>
-<p class="Pp" id="cd_handle~2">The
- <a class="permalink" href="#cd_handle~2"><code class="Fn">cd_handle</code></a>()
- function should return either 0 if the dump was successful, or an
- appropriate <a class="Xr">errno(2)</a> otherwise.</p>
-<section class="Ss">
-<h2 class="Ss" id="Customized_Coredump_Writers"><a class="permalink" href="#Customized_Coredump_Writers">Customized
- Coredump Writers</a></h2>
-<p class="Pp">Custom coredumpers can define their own
- <code class="Dv">coredump_writer</code> to pass to
- <code class="Fn">sv_coredump</code>().</p>
-<p class="Pp">The <var class="Va">ctx</var> member is opaque and only to be used
- by the coredumper itself.</p>
-<p class="Pp" id="sv_coredump">The <var class="Va">init_fn</var> function, if
- it's provided, will be called by the
- <a class="permalink" href="#sv_coredump"><code class="Fn">sv_coredump</code></a>()
- implementation before any data is to be written. This allows the writer
- implementation to record any coredump parameters that it might need to
- capture, or setup the object to be written to.</p>
-<p class="Pp" id="sv_coredump~2">The <var class="Va">write_fn</var> function
- will be called by the
- <a class="permalink" href="#sv_coredump~2"><code class="Fn">sv_coredump</code></a>()
- implementation to write out data. The <var class="Va">extend_fn</var>
- function will be called to enlarge the coredump, in the sense that a hole is
- created in any difference between the current size and the new size. For
- convenience, the
- <a class="permalink" href="#core_vn_write"><code class="Fn" id="core_vn_write">core_vn_write</code></a>()
- and
- <a class="permalink" href="#core_vn_extend"><code class="Fn" id="core_vn_extend">core_vn_extend</code></a>()
- functions used by the vnode coredumper are exposed in
- <code class="In">&lt;<a class="In">sys/ucordumper.h</a>&gt;</code>, and the
- <code class="Dv">coredump_vnode_ctx</code> defined there should be populated
- with the vnode to write to.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setrlimit(2)</a>, <a class="Xr">core(5)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span>
- &lt;<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 23, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/counter.9 4.html b/static/freebsd/man9/counter.9 4.html
deleted file mode 100644
index b9e32121..00000000
--- a/static/freebsd/man9/counter.9 4.html
+++ /dev/null
@@ -1,282 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">COUNTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">COUNTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">counter</code> &#x2014;
- <span class="Nd">SMP-friendly kernel counter implementation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/counter.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">counter_u64_t</var>
- <br/>
- <code class="Fn">counter_u64_alloc</code>(<var class="Fa" style="white-space: nowrap;">int
- wait</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_u64_free</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_u64_add</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>, <var class="Fa" style="white-space: nowrap;">int64_t v</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_enter</code>();</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_exit</code>();</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_u64_add_protected</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>, <var class="Fa" style="white-space: nowrap;">int64_t v</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">counter_u64_fetch</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_u64_zero</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>);</p>
-<p class="Pp"><var class="Ft">struct counter_rate *</var>
- <br/>
- <code class="Fn">counter_rate_alloc</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">int
- period</var>);</p>
-<p class="Pp"><var class="Ft">int64_t</var>
- <br/>
- <code class="Fn">counter_ratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct
- counter_rate *cr</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- limit</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">counter_rate_get</code>(<var class="Fa" style="white-space: nowrap;">struct
- counter_rate *cr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">counter_rate_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- counter_rate *cr</var>);</p>
-<p class="Pp"><code class="Fn">COUNTER_U64_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>);</p>
-<p class="Pp"><code class="Fn">COUNTER_U64_DEFINE_EARLY</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t
- c</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ADD_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>,
- <var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">len</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>,
- <var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">len</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">counter</code> is a generic facility to create
- counters that can be utilized for any purpose (such as collecting
- statistical data). A <code class="Nm">counter</code> is guaranteed to be
- lossless when several kernel threads do simultaneous updates. However,
- <code class="Nm">counter</code> does not block the calling thread, also no
- <a class="Xr">atomic(9)</a> operations are used for the update, therefore
- the counters can be used in any non-interrupt context. Moreover,
- <code class="Nm">counter</code> has special optimisations for SMP
- environments, making <code class="Nm">counter</code> update faster than
- simple arithmetic on the global variable. Thus
- <code class="Nm">counter</code> is considered suitable for accounting in the
- performance-critical code paths.</p>
-<dl class="Bl-tag">
- <dt id="counter_u64_alloc"><a class="permalink" href="#counter_u64_alloc"><code class="Fn">counter_u64_alloc</code></a>(<var class="Fa">wait</var>)</dt>
- <dd>Allocate a new 64-bit unsigned counter. The <var class="Fa">wait</var>
- argument is the <a class="Xr">malloc(9)</a> wait flag, should be either
- <var class="Va">M_NOWAIT</var> or <var class="Va">M_WAITOK</var>. If
- <var class="Va">M_NOWAIT</var> is specified the operation may fail and
- return <code class="Dv">NULL</code>.</dd>
- <dt id="counter_u64_free"><a class="permalink" href="#counter_u64_free"><code class="Fn">counter_u64_free</code></a>(<var class="Fa">c</var>)</dt>
- <dd>Free the previously allocated counter <var class="Fa">c</var>. It is safe
- to pass <code class="Dv">NULL</code>.</dd>
- <dt id="counter_u64_add"><a class="permalink" href="#counter_u64_add"><code class="Fn">counter_u64_add</code></a>(<var class="Fa">c</var>,
- <var class="Fa">v</var>)</dt>
- <dd>Add <var class="Fa">v</var> to <var class="Fa">c</var>. The KPI does not
- guarantee any protection from wraparound.</dd>
- <dt id="counter_enter"><a class="permalink" href="#counter_enter"><code class="Fn">counter_enter</code></a>()</dt>
- <dd>Enter mode that would allow the safe update of several counters via
- <a class="permalink" href="#counter_u64_add_protected"><code class="Fn" id="counter_u64_add_protected">counter_u64_add_protected</code></a>().
- On some machines this expands to <a class="Xr">critical(9)</a> section,
- while on other is a nop. See
- <a class="Sx" href="#IMPLEMENTATION_DETAILS">IMPLEMENTATION
- DETAILS</a>.</dd>
- <dt id="counter_exit"><a class="permalink" href="#counter_exit"><code class="Fn">counter_exit</code></a>()</dt>
- <dd>Exit mode for updating several counters.</dd>
- <dt><code class="Fn">counter_u64_add_protected</code>(<var class="Fa">c</var>,
- <var class="Fa">v</var>)</dt>
- <dd>Same as <code class="Fn">counter_u64_add</code>(), but should be preceded
- by <code class="Fn">counter_enter</code>().</dd>
- <dt id="counter_u64_fetch"><a class="permalink" href="#counter_u64_fetch"><code class="Fn">counter_u64_fetch</code></a>(<var class="Fa">c</var>)</dt>
- <dd>Take a snapshot of counter <var class="Fa">c</var>. The data obtained is
- not guaranteed to reflect the real cumulative value for any moment.</dd>
- <dt id="counter_u64_zero"><a class="permalink" href="#counter_u64_zero"><code class="Fn">counter_u64_zero</code></a>(<var class="Fa">c</var>)</dt>
- <dd>Clear the counter <var class="Fa">c</var> and set it to zero.</dd>
- <dt id="counter_rate_alloc"><a class="permalink" href="#counter_rate_alloc"><code class="Fn">counter_rate_alloc</code></a>(<var class="Fa">flags</var>,
- <var class="Fa">period</var>)</dt>
- <dd>Allocate a new struct counter_rate. <var class="Fa">flags</var> is passed
- to <a class="Xr">malloc(9)</a>. <var class="Fa">period</var> is the time
- over which the rate is checked.</dd>
- <dt id="counter_ratecheck"><a class="permalink" href="#counter_ratecheck"><code class="Fn">counter_ratecheck</code></a>(<var class="Fa">cr</var>,
- <var class="Fa">limit</var>)</dt>
- <dd>The function is a multiprocessor-friendly version of
- <a class="permalink" href="#ppsratecheck"><code class="Fn" id="ppsratecheck">ppsratecheck</code></a>()
- which uses <code class="Nm">counter</code> internally. Returns
- non-negative value if the rate is not yet reached during the current
- period, and a negative value otherwise. If the limit was reached during
- the previous period, but was just reset back to zero, then
- <code class="Fn">counter_ratecheck</code>() returns number of events since
- previous reset.</dd>
- <dt id="counter_rate_get"><a class="permalink" href="#counter_rate_get"><code class="Fn">counter_rate_get</code></a>(<var class="Fa">cr</var>)</dt>
- <dd>The number of hits to this check within the current period.</dd>
- <dt id="counter_rate_free"><a class="permalink" href="#counter_rate_free"><code class="Fn">counter_rate_free</code></a>(<var class="Fa">cr</var>)</dt>
- <dd>Free the <var class="Fa">cr</var> counter.</dd>
- <dt id="COUNTER_U64_SYSINIT"><a class="permalink" href="#COUNTER_U64_SYSINIT"><code class="Fn">COUNTER_U64_SYSINIT</code></a>(<var class="Fa">c</var>)</dt>
- <dd>Define a <a class="Xr">SYSINIT(9)</a> initializer for the global counter
- <var class="Fa">c</var>.</dd>
- <dt id="COUNTER_U64_DEFINE_EARLY"><a class="permalink" href="#COUNTER_U64_DEFINE_EARLY"><code class="Fn">COUNTER_U64_DEFINE_EARLY</code></a>(<var class="Fa">c</var>)</dt>
- <dd>Define and initialize a global counter <var class="Fa">c</var>. It is
- always safe to increment <var class="Fa">c</var>, though updates prior to
- the <code class="Dv">SI_SUB_COUNTER</code> <a class="Xr">SYSINIT(9)</a>
- event are lost.</dd>
- <dt id="SYSCTL_COUNTER_U64"><a class="permalink" href="#SYSCTL_COUNTER_U64"><code class="Fn">SYSCTL_COUNTER_U64</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">nbr</var>, <var class="Fa">name</var>,
- <var class="Fa">access</var>, <var class="Fa">ptr</var>,
- <var class="Fa">descr</var>)</dt>
- <dd>Declare a static <a class="Xr">sysctl(9)</a> oid that would represent a
- <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument
- should be a pointer to allocated <var class="Vt">counter_u64_t</var>. A
- read of the oid returns value obtained through
- <code class="Fn">counter_u64_fetch</code>(). Any write to the oid zeroes
- it.</dd>
- <dt id="SYSCTL_ADD_COUNTER_U64"><a class="permalink" href="#SYSCTL_ADD_COUNTER_U64"><code class="Fn">SYSCTL_ADD_COUNTER_U64</code></a>(<var class="Fa">ctx</var>,
- <var class="Fa">parent</var>, <var class="Fa">nbr</var>,
- <var class="Fa">name</var>, <var class="Fa">access</var>,
- <var class="Fa">ptr</var>, <var class="Fa">descr</var>)</dt>
- <dd>Create a <a class="Xr">sysctl(9)</a> oid that would represent a
- <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument
- should be a pointer to allocated <var class="Vt">counter_u64_t</var>. A
- read of the oid returns value obtained through
- <code class="Fn">counter_u64_fetch</code>(). Any write to the oid zeroes
- it.</dd>
- <dt id="SYSCTL_COUNTER_U64_ARRAY"><a class="permalink" href="#SYSCTL_COUNTER_U64_ARRAY"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">nbr</var>, <var class="Fa">name</var>,
- <var class="Fa">access</var>, <var class="Fa">ptr</var>,
- <var class="Fa">len</var>, <var class="Fa">descr</var>)</dt>
- <dd>Declare a static <a class="Xr">sysctl(9)</a> oid that would represent an
- array of <code class="Nm">counter</code>. The <var class="Fa">ptr</var>
- argument should be a pointer to allocated array of
- <var class="Vt">counter_u64_t's</var>. The <var class="Fa">len</var>
- argument should specify number of elements in the array. A read of the oid
- returns len-sized array of <var class="Vt">uint64_t</var> values obtained
- through <code class="Fn">counter_u64_fetch</code>(). Any write to the oid
- zeroes all array elements.</dd>
- <dt id="SYSCTL_ADD_COUNTER_U64_ARRAY"><a class="permalink" href="#SYSCTL_ADD_COUNTER_U64_ARRAY"><code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code></a>(<var class="Fa">ctx</var>,
- <var class="Fa">parent</var>, <var class="Fa">nbr</var>,
- <var class="Fa">name</var>, <var class="Fa">access</var>,
- <var class="Fa">ptr</var>, <var class="Fa">len</var>,
- <var class="Fa">descr</var>)</dt>
- <dd>Create a <a class="Xr">sysctl(9)</a> oid that would represent an array of
- <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument
- should be a pointer to allocated array of
- <var class="Vt">counter_u64_t's</var>. The <var class="Fa">len</var>
- argument should specify number of elements in the array. A read of the oid
- returns len-sized array of <var class="Vt">uint64_t</var> values obtained
- through <code class="Fn">counter_u64_fetch</code>(). Any write to the oid
- zeroes all array elements.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_DETAILS"><a class="permalink" href="#IMPLEMENTATION_DETAILS">IMPLEMENTATION
- DETAILS</a></h1>
-<p class="Pp">On all architectures <code class="Nm">counter</code> is
- implemented using per-CPU data fields that are specially aligned in memory,
- to avoid inter-CPU bus traffic due to shared use of the variables between
- CPUs. These are allocated using <var class="Va">UMA_ZONE_PCPU</var>
- <a class="Xr">uma(9)</a> zone. The update operation only touches the field
- that is private to current CPU. Fetch operation loops through all per-CPU
- fields and obtains a snapshot sum of all fields.</p>
-<p class="Pp">On amd64 a <code class="Nm">counter</code> update is implemented
- as a single instruction without lock semantics, operating on the private
- data for the current CPU, which is safe against preemption and
- interrupts.</p>
-<p class="Pp">On i386 architecture, when machine supports the cmpxchg8
- instruction, this instruction is used. The multi-instruction sequence
- provides the same guarantees as the amd64 single-instruction
- implementation.</p>
-<p class="Pp">On some architectures updating a counter require a
- <a class="Xr">critical(9)</a> section.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following example creates a static counter array exported to
- userspace through a sysctl:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>#define MY_SIZE 8
-static counter_u64_t array[MY_SIZE];
-SYSCTL_COUNTER_U64_ARRAY(_debug, OID_AUTO, counter_array, CTLFLAG_RW,
- &amp;array[0], MY_SIZE, &quot;Test counter array&quot;);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">critical(9)</a>,
- <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">ratecheck(9)</a>, <a class="Xr">sysctl(9)</a>,
- <a class="Xr">SYSINIT(9)</a>, <a class="Xr">uma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">counter</code> facility first appeared in
- <span class="Ux">FreeBSD 10.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">counter</code> facility was written by
- <span class="An">Gleb Smirnoff</span> and <span class="An">Konstantin
- Belousov</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 19, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cpu_machdep.9 3.html b/static/freebsd/man9/cpu_machdep.9 3.html
deleted file mode 100644
index a3ce382f..00000000
--- a/static/freebsd/man9/cpu_machdep.9 3.html
+++ /dev/null
@@ -1,334 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">cpu_machdep(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">cpu_machdep(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cpu_machdep</code>,
- <code class="Nm">cpu_copy_thread</code>,
- <code class="Nm">cpu_exec_vmspace_reuse</code>,
- <code class="Nm">cpu_exit</code>,
- <code class="Nm">cpu_fetch_syscall_args</code>,
- <code class="Nm">cpu_fork</code>,
- <code class="Nm">cpu_fork_kthread_handler</code>,
- <code class="Nm">cpu_idle</code>, <code class="Nm">cpu_idle_wakeup</code>,
- <code class="Nm">cpu_procctl</code>,
- <code class="Nm">cpu_set_syscall_retval</code>,
- <code class="Nm">cpu_set_upcall</code>,
- <code class="Nm">cpu_set_user_tls</code>,
- <code class="Nm">cpu_switch</code>, <code class="Nm">cpu_sync_core</code>,
- <code class="Nm">cpu_thread_alloc</code>,
- <code class="Nm">cpu_thread_clean</code>,
- <code class="Nm">cpu_thread_exit</code>,
- <code class="Nm">cpu_thread_free</code>, <code class="Nm">cpu_throw</code>,
- <code class="Nm">cpu_update_pcb</code> &#x2014;
- <span class="Nd">machine-dependent interfaces to handle CPU and thread
- state</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ptrace.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_copy_thread</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td0</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">cpu_exec_vmspace_reuse</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct vm_map
- *map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_exit</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_fetch_syscall_args</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_fork</code>(<var class="Fa">struct thread *td1</var>,
- <var class="Fa">struct proc *p2</var>, <var class="Fa">struct thread
- *td2</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_fork_kthread_handler</code>(<var class="Fa">struct thread
- *td</var>, <var class="Fa">void (*func)(void *)</var>, <var class="Fa">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_idle</code>(<var class="Fa" style="white-space: nowrap;">int
- busy</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_idle_wakeup</code>(<var class="Fa" style="white-space: nowrap;">int
- cpu</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_procctl</code>(<var class="Fa">struct thread *td</var>,
- <var class="Fa">int idtype</var>, <var class="Fa">id_t id</var>,
- <var class="Fa">int com</var>, <var class="Fa">void *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_ptrace</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *_td</var>, <var class="Fa" style="white-space: nowrap;">int
- req</var>, <var class="Fa" style="white-space: nowrap;">void *addr</var>,
- <var class="Fa" style="white-space: nowrap;">int data</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_set_syscall_retval</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- error</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_set_upcall</code>(<var class="Fa">struct thread
- *td</var>, <var class="Fa">void (*entry)(void *)</var>, <var class="Fa">void
- *arg</var>, <var class="Fa">stack_t *stack</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cpu_set_user_tls</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">void
- *tls_base</var>, <var class="Fa" style="white-space: nowrap;">int
- thr_flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_switch</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *old</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *new</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_sync_core</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_thread_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_thread_clean</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_thread_exit</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_thread_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_throw</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *old</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *new</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cpu_update_pcb</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions provide architecture-specific implementations of
- machine-independent abstractions.</p>
-<p class="Pp" id="cpu_exec_vmspace_reuse"><a class="permalink" href="#cpu_exec_vmspace_reuse"><code class="Fn">cpu_exec_vmspace_reuse</code></a>()
- returns true if
- <a class="permalink" href="#exec_new_vmspace"><code class="Fn" id="exec_new_vmspace">exec_new_vmspace</code></a>()
- can reuse an existing <var class="Vt">struct vmspace</var>
- (<var class="Fa">map</var>) for the process <var class="Fa">p</var> during
- <a class="Xr">execve(2)</a>. This is only invoked if
- <var class="Fa">map</var> is not shared with any other consumers. If this
- returns false, <code class="Fn">exec_new_vmspace</code>() will create a new
- <var class="Vt">struct vmspace</var>.</p>
-<p class="Pp" id="cpu_exit"><a class="permalink" href="#cpu_exit"><code class="Fn">cpu_exit</code></a>()
- releases machine-dependent resources other than the address space for the
- process containing <var class="Fa">td</var> during process exit.</p>
-<p class="Pp" id="cpu_fork"><a class="permalink" href="#cpu_fork"><code class="Fn">cpu_fork</code></a>()
- copies and updates machine-dependent state (for example, the pcb and user
- registers) from the forking thread <var class="Fa">td1</var> in an existing
- process to the new thread <var class="Fa">td2</var> in the new process
- <var class="Fa">p2</var>. This function must set up the new thread's kernel
- stack and pcb so that <var class="Fa">td2</var> calls
- <a class="permalink" href="#fork_exit"><code class="Fn" id="fork_exit">fork_exit</code></a>()
- when it begins execution passing a pointer to
- <a class="permalink" href="#fork_return"><code class="Fn" id="fork_return">fork_return</code></a>()
- as the <var class="Fa">callout</var> argument and <var class="Fa">td2</var>
- as the <var class="Fa">arg</var> argument.</p>
-<p class="Pp" id="cpu_fork_kthread_handler"><a class="permalink" href="#cpu_fork_kthread_handler"><code class="Fn">cpu_fork_kthread_handler</code></a>()
- adjusts a new thread's initial pcb and/or kernel stack to pass
- <var class="Fa">func</var> and <var class="Fa">arg</var> as the
- <var class="Fa">callout</var> and <var class="Fa">arg</var> arguments to
- <a class="permalink" href="#fork_exit~2"><code class="Fn" id="fork_exit~2">fork_exit</code></a>().
- This must be called before a new thread is scheduled to run and is used to
- set the &#x201C;main&#x201D; function for kernel threads.</p>
-<p class="Pp" id="cpu_copy_thread"><a class="permalink" href="#cpu_copy_thread"><code class="Fn">cpu_copy_thread</code></a>()
- copies machine-dependent state (for example, the pcb and user registers)
- from <var class="Fa">td</var> to <var class="Fa">td0</var> when creating a
- new thread in the same process. This function must set up the new thread's
- kernel stack and pcb so that <var class="Fa">td0</var> calls
- <a class="permalink" href="#fork_exit~3"><code class="Fn" id="fork_exit~3">fork_exit</code></a>()
- when it begins execution passing a pointer to
- <a class="permalink" href="#fork_return~2"><code class="Fn" id="fork_return~2">fork_return</code></a>()
- as the <var class="Fa">callout</var> argument and <var class="Fa">td0</var>
- as the <var class="Fa">arg</var> argument.</p>
-<p class="Pp" id="cpu_set_upcall"><a class="permalink" href="#cpu_set_upcall"><code class="Fn">cpu_set_upcall</code></a>()
- updates a new thread's initial user register state to call
- <var class="Fa">entry</var> with <var class="Fa">arg</var> as the sole
- argument using the user stack described in <var class="Fa">stack</var>.</p>
-<p class="Pp" id="cpu_set_user_tls"><a class="permalink" href="#cpu_set_user_tls"><code class="Fn">cpu_set_user_tls</code></a>()
- sets a new thread's initial user thread pointer register to reference the
- user TLS base pointer <var class="Fa">tls_base</var>. The
- <var class="Fa">thr_flags</var> argument provides flags bits, from the same
- namespace as <var class="Va">flags</var> member of the
- <var class="Vt">struct thr_param</var> argument to the
- <a class="Xr">thr_new(2)</a> syscall.</p>
-<p class="Pp" id="cpu_update_pcb"><a class="permalink" href="#cpu_update_pcb"><code class="Fn">cpu_update_pcb</code></a>()
- updates the pcb of the current thread with current user register values.
- This is invoked before writing out register notes in a core dump. This
- function typically only has to update user registers for the current thread
- that are saved in the pcb during context switches rather than in the
- trapframe on kernel entry.</p>
-<p class="Pp" id="cpu_update_pcb~2">Note that when
- <a class="permalink" href="#cpu_update_pcb~2"><code class="Fn">cpu_update_pcb</code></a>()
- is used, threads in a process other than the current thread are stopped,
- typically by
- <a class="permalink" href="#thread_single"><code class="Fn" id="thread_single">thread_single</code></a>().
- The pcbs of those stopped threads should already be updated by
- <code class="Fn">cpu_switch</code>().</p>
-<p class="Pp" id="cpu_fetch_syscall_args"><a class="permalink" href="#cpu_fetch_syscall_args"><code class="Fn">cpu_fetch_syscall_args</code></a>()
- fetches the current system call arguments for the native FreeBSD ABI from
- the current thread's user register state and/or user stack. The arguments
- are saved in the <var class="Fa">td_sa</var> member of
- <var class="Fa">td</var>.</p>
-<p class="Pp" id="cpu_set_syscall_retval"><a class="permalink" href="#cpu_set_syscall_retval"><code class="Fn">cpu_set_syscall_retval</code></a>()
- updates the user register state for <var class="Fa">td</var> to store system
- call error and return values. If <var class="Fa">error</var> is 0, indicate
- success and return the two values in <var class="Fa">td_retval</var>. If
- <var class="Fa">error</var> is <code class="Dv">ERESTART,</code> adjust the
- user PC to re-invoke the current system call after returning to user mode.
- If <var class="Fa">error</var> is <code class="Dv">EJUSTRETURN</code>, leave
- the current user register state unchanged. For any other value of
- <var class="Fa">error</var>, indicate error and return
- <var class="Fa">error</var> as the error code.</p>
-<p class="Pp" id="cpu_idle"><a class="permalink" href="#cpu_idle"><code class="Fn">cpu_idle</code></a>()
- waits for the next interrupt to occur on the current CPU. If an architecture
- supports low power idling, this function should place the CPU into a low
- power state while waiting. <var class="Fa">busy</var> is a hint from the
- scheduler. If <var class="Fa">busy</var> is non-zero, the scheduler expects
- a short sleep, so the CPU should prefer low-latency over maximum power
- savings. If <var class="Fa">busy</var> is zero, the CPU should maximumize
- power savings including deferring unnecessary clock interrupts via
- <a class="permalink" href="#cpu_idleclock"><code class="Fn" id="cpu_idleclock">cpu_idleclock</code></a>().</p>
-<p class="Pp" id="cpu_idle_wakeup"><a class="permalink" href="#cpu_idle_wakeup"><code class="Fn">cpu_idle_wakeup</code></a>()
- awakens the idle CPU with the ID <var class="Fa">cpu</var> from a low-power
- state.</p>
-<p class="Pp" id="cpu_procctl"><a class="permalink" href="#cpu_procctl"><code class="Fn">cpu_procctl</code></a>()
- handles any machine-dependent <a class="Xr">procctl(2)</a> requests.</p>
-<p class="Pp" id="cpu_ptrace"><a class="permalink" href="#cpu_ptrace"><code class="Fn">cpu_ptrace</code></a>()
- handles any machine-dependent <a class="Xr">ptrace(2)</a> requests.</p>
-<p class="Pp" id="cpu_switch"><a class="permalink" href="#cpu_switch"><code class="Fn">cpu_switch</code></a>()
- switches the current CPU between threads by swapping register state. This
- function saves the current CPU register state in the pcb of
- <var class="Fa">old</var> and loads register values from the pcb of
- <var class="Fa">new</var> before returning. While the pcb generally contains
- caller-save kernel register state, it can also contain user registers that
- are not saved in the trapframe.</p>
-<p class="Pp" id="cpu_switch~2">After saving the current CPU register state of
- <var class="Fa">old</var>,
- <a class="permalink" href="#cpu_switch~2"><code class="Fn">cpu_switch</code></a>()
- stores <var class="Fa">mtx</var> in the <var class="Fa">td_lock</var> member
- of <var class="Fa">old</var> transferring ownership of the old thread. No
- data belonging to <var class="Fa">old</var> can be accessed after that
- store. Specifically, the old thread's kernel stack must not be accessed
- after this point.</p>
-<p class="Pp">When <code class="Dv">SCHED_ULE</code> is being used, this
- function must wait (via spinning) for the <var class="Fa">td_lock</var>
- member of <var class="Fa">new</var> to change to a value not equal to
- <var class="Va">&amp;blocked_lock</var> before loading register values from
- <var class="Fa">new</var> or accessing its kernel stack.</p>
-<p class="Pp" id="cpu_switch~3">From the caller's perspective,
- <a class="permalink" href="#cpu_switch~3"><code class="Fn">cpu_switch</code></a>()
- returns when <var class="Fa">old</var> is rescheduled in the future,
- possibly on a different CPU. However, the implementation of
- <code class="Fn">cpu_switch</code>() returns immediately on the same CPU
- into the previously-saved context of <var class="Fa">new</var>.</p>
-<p class="Pp" id="cpu_throw"><a class="permalink" href="#cpu_throw"><code class="Fn">cpu_throw</code></a>()
- is similar to <code class="Fn">cpu_switch</code>() but does not save any
- state for <var class="Fa">old</var> or write to the old thread's
- <var class="Fa">td_lock</var> member.</p>
-<p class="Pp" id="cpu_sync_core"><a class="permalink" href="#cpu_sync_core"><code class="Fn">cpu_sync_core</code></a>()
- ensures that all possible speculation and out-of-order execution is
- serialized on the current CPU. Note that this is called from an IPI handler
- so only has to handle additional serialization beyond that provided by
- handling an IPI.</p>
-<section class="Ss">
-<h2 class="Ss" id="Thread_Object_Lifecycle"><a class="permalink" href="#Thread_Object_Lifecycle">Thread
- Object Lifecycle</a></h2>
-<p class="Pp">These functions support the management of machine-dependent thread
- state in conjunction with a thread object's lifecycle.</p>
-<p class="Pp">The general model is that a thread object is allocated each time a
- new kernel thread is created either by system calls like
- <a class="Xr">fork(2)</a> or <a class="Xr">thr_new(2)</a> or when
- kernel-only threads are created via <a class="Xr">kproc_create(9)</a>,
- <a class="Xr">kproc_kthread_add(9)</a>, or <a class="Xr">kthread_add(9)</a>.
- When a kernel thread exits, the thread object is freed. However, there is
- one special case to support an optimization where each free process object
- caches a thread object. When a process exits, the last thread object is not
- freed but remains attached to the process. When the process object is later
- reused for a new process in <a class="Xr">fork(2)</a>, the kernel recycles
- that last thread object and uses it as the initial thread in the new
- process. When a thread is recycled, some of the steps in the thread
- allocation and free cycle are skipped as an optimization.</p>
-<p class="Pp" id="cpu_thread_alloc"><a class="permalink" href="#cpu_thread_alloc"><code class="Fn">cpu_thread_alloc</code></a>()
- initializes machine-dependent fields in <var class="Fa">td</var> after
- allocating a new kernel stack. This function typically sets the
- <var class="Fa">td_pcb</var> and initial <var class="Fa">td_frame</var>
- pointers. <code class="Fn">cpu_thread_alloc</code>() is called both when
- allocating a new thread object and when a recycled thread allocates a new
- kernel stack. Note that this function is
- <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> called
- if a recycled thread reuses its existing kernel stack.</p>
-<p class="Pp" id="cpu_thread_clean"><a class="permalink" href="#cpu_thread_clean"><code class="Fn">cpu_thread_clean</code></a>()
- releases any machine-dependent resources for the last thread in a process
- during <a class="Xr">wait(2)</a>. The thread is a candidate for recycling so
- should be reset to run as a new thread in case it is recycled by a future
- <a class="Xr">fork(2)</a>.</p>
-<p class="Pp" id="cpu_thread_exit"><a class="permalink" href="#cpu_thread_exit"><code class="Fn">cpu_thread_exit</code></a>()
- cleans any machine-dependent state in <var class="Fa">td</var> while it is
- exiting. This is called by the exiting thread so cannot free state needed
- during in-kernel execution.</p>
-<p class="Pp" id="cpu_thread_free"><a class="permalink" href="#cpu_thread_free"><code class="Fn">cpu_thread_free</code></a>()
- releases any machine-dependent state in <var class="Fa">td</var> when it is
- being freed. This is called for any thread that was not the last thread in a
- process once it has finished execution.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fork(2)</a>, <a class="Xr">procctl(2)</a>,
- <a class="Xr">ptrace(2)</a>, <a class="Xr">thr_new(2)</a>,
- <a class="Xr">wait(2)</a>, <a class="Xr">kproc_create(9)</a>,
- <a class="Xr">kproc_kthread_add(9)</a>, <a class="Xr">kthread_add(9)</a>,
- <a class="Xr">mi_switch(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was developed by SRI International, the
- University of Cambridge Computer Laboratory (Department of Computer Science
- and Technology), and Capabilities Limited under contract (FA8750-24-C-B047)
- (&#x201C;DEC&#x201D;).</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 31, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cpuset.9 4.html b/static/freebsd/man9/cpuset.9 4.html
deleted file mode 100644
index e1fcba59..00000000
--- a/static/freebsd/man9/cpuset.9 4.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CPUSET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CPUSET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cpuset(9)</code> &#x2014;
- <code class="Nm">CPUSET_T_INITIALIZER</code>,
- <code class="Nm">CPUSET_FSET</code>, <code class="Nm">CPU_CLR</code>,
- <code class="Nm">CPU_COPY</code>, <code class="Nm">CPU_ISSET</code>,
- <code class="Nm">CPU_SET</code>, <code class="Nm">CPU_ZERO</code>,
- <code class="Nm">CPU_FILL</code>, <code class="Nm">CPU_SETOF</code>,
- <code class="Nm">CPU_EMPTY</code>, <code class="Nm">CPU_ISFULLSET</code>,
- <code class="Nm">CPU_FFS</code>, <code class="Nm">CPU_COUNT</code>,
- <code class="Nm">CPU_SUBSET</code>, <code class="Nm">CPU_OVERLAP</code>,
- <code class="Nm">CPU_CMP</code>, <code class="Nm">CPU_OR</code>,
- <code class="Nm">CPU_ORNOT</code>, <code class="Nm">CPU_AND</code>,
- <code class="Nm">CPU_ANDNOT</code>, <code class="Nm">CPU_XOR</code>,
- <code class="Nm">CPU_CLR_ATOMIC</code>,
- <code class="Nm">CPU_TEST_CLR_ATOMIC</code>,
- <code class="Nm">CPU_SET_ATOMIC</code>,
- <code class="Nm">CPU_SET_ATOMIC_ACQ</code>,
- <code class="Nm">CPU_TEST_SET_ATOMIC</code>,
- <code class="Nm">CPU_AND_ATOMIC</code>,
- <code class="Nm">CPU_OR_ATOMIC</code>,
- <code class="Nm">CPU_COPY_STORE_REL</code> &#x2014; <span class="Nd">cpuset
- manipulation macros</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/_cpuset.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/cpuset.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">CPUSET_T_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">ARRAY_CONTENTS</var>);</p>
-<p class="Pp"><var class="Vt">CPUSET_FSET</var></p>
-<p class="Pp"><code class="Fn">CPU_CLR</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_COPY</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *from</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *to</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_ISSET</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_SET</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_ZERO</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_FILL</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_SETOF</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_ISFULLSET</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CPU_FFS</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CPU_COUNT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_SUBSET</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *haystack</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *needle</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_OVERLAP</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset2</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CPU_CMP</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_OR</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_ORNOT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_AND</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_ANDNOT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_XOR</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src2</var>);</p>
-<p class="Pp"><code class="Fn">CPU_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_TEST_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_SET_ATOMIC_ACQ</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_TEST_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t
- cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *cpuset</var>);</p>
-<p class="Pp"><code class="Fn">CPU_AND_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src</var>);</p>
-<p class="Pp"><code class="Fn">CPU_OR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *src</var>);</p>
-<p class="Pp"><code class="Fn">CPU_COPY_STORE_REL</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t
- *from</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t
- *to</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">cpuset(9)</code> family of macros provide a
- flexible and efficient CPU set implementation, backed by the
- <a class="Xr">bitset(9)</a> macros. Each CPU is represented by a single bit.
- The maximum number of CPUs representable by <var class="Vt">cpuset_t</var>
- is <var class="Va">CPU_SETSIZE</var>. Individual CPUs in cpusets are
- referenced with indices zero through <var class="Fa">CPU_SETSIZE -
- 1</var>.</p>
-<p class="Pp" id="CPUSET_T_INITIALIZER">The
- <a class="permalink" href="#CPUSET_T_INITIALIZER"><code class="Fn">CPUSET_T_INITIALIZER</code></a>()
- macro allows one to initialize a <var class="Vt">cpuset_t</var> with a
- compile time literal value.</p>
-<p class="Pp" id="CPUSET_FSET">The
- <a class="permalink" href="#CPUSET_FSET"><code class="Fn">CPUSET_FSET</code></a>()
- macro defines a compile time literal, usable by
- <code class="Fn">CPUSET_T_INITIALIZER</code>(), representing a full cpuset
- (all CPUs present). For examples of
- <code class="Fn">CPUSET_T_INITIALIZER</code>() and
- <code class="Fn">CPUSET_FSET</code>() usage, see the
- <a class="Sx" href="#CPUSET_T_INITIALIZER_EXAMPLE">CPUSET_T_INITIALIZER
- EXAMPLE</a> section.</p>
-<p class="Pp" id="CPU_CLR">The
- <a class="permalink" href="#CPU_CLR"><code class="Fn">CPU_CLR</code></a>()
- macro removes CPU <var class="Fa">cpu_idx</var> from the cpuset pointed to
- by <var class="Fa">cpuset</var>. The
- <a class="permalink" href="#CPU_CLR_ATOMIC"><code class="Fn" id="CPU_CLR_ATOMIC">CPU_CLR_ATOMIC</code></a>()
- macro is identical, but the bit representing the CPU is cleared with atomic
- machine instructions. The
- <a class="permalink" href="#CPU_TEST_CLR_ATOMIC"><code class="Fn" id="CPU_TEST_CLR_ATOMIC">CPU_TEST_CLR_ATOMIC</code></a>()
- macro atomically clears the bit representing the CPU and returns whether it
- was set.</p>
-<p class="Pp" id="CPU_COPY">The
- <a class="permalink" href="#CPU_COPY"><code class="Fn">CPU_COPY</code></a>()
- macro copies the contents of the cpuset <var class="Fa">from</var> to the
- cpuset <var class="Fa">to</var>.
- <a class="permalink" href="#CPU_COPY_STORE_REL"><code class="Fn" id="CPU_COPY_STORE_REL">CPU_COPY_STORE_REL</code></a>()
- is similar, but copies component machine words from
- <var class="Fa">from</var> and writes them to <var class="Fa">to</var> with
- atomic store with release semantics. (That is, if <var class="Fa">to</var>
- is composed of multiple machine words,
- <code class="Fn">CPU_COPY_STORE_REL</code>() performs multiple individually
- atomic operations.)</p>
-<p class="Pp" id="CPU_SET">The
- <a class="permalink" href="#CPU_SET"><code class="Fn">CPU_SET</code></a>()
- macro adds CPU <var class="Fa">cpu_idx</var> to the cpuset pointed to by
- <var class="Fa">cpuset</var>, if it is not already present. The
- <a class="permalink" href="#CPU_SET_ATOMIC"><code class="Fn" id="CPU_SET_ATOMIC">CPU_SET_ATOMIC</code></a>()
- macro is identical, but the bit representing the CPU is set with atomic
- machine instructions. The
- <a class="permalink" href="#CPU_SET_ATOMIC_ACQ"><code class="Fn" id="CPU_SET_ATOMIC_ACQ">CPU_SET_ATOMIC_ACQ</code></a>()
- macro sets the bit representing the CPU with atomic acquire semantics. The
- <a class="permalink" href="#CPU_TEST_SET_ATOMIC"><code class="Fn" id="CPU_TEST_SET_ATOMIC">CPU_TEST_SET_ATOMIC</code></a>()
- macro atomically sets the bit representing the CPU and returns whether it
- was set.</p>
-<p class="Pp" id="CPU_ISSET">The
- <a class="permalink" href="#CPU_ISSET"><code class="Fn">CPU_ISSET</code></a>()
- macro returns <code class="Dv">true</code> if CPU
- <var class="Fa">cpu_idx</var> is a member of the cpuset pointed to by
- <var class="Fa">cpuset</var>.</p>
-<p class="Pp" id="CPU_ZERO">The
- <a class="permalink" href="#CPU_ZERO"><code class="Fn">CPU_ZERO</code></a>()
- macro removes all CPUs from <var class="Fa">cpuset</var>.</p>
-<p class="Pp" id="CPU_FILL">The
- <a class="permalink" href="#CPU_FILL"><code class="Fn">CPU_FILL</code></a>()
- macro adds all CPUs to <var class="Fa">cpuset</var>.</p>
-<p class="Pp" id="CPU_SETOF">The
- <a class="permalink" href="#CPU_SETOF"><code class="Fn">CPU_SETOF</code></a>()
- macro removes all CPUs in <var class="Fa">cpuset</var> before adding only
- CPU <var class="Fa">cpu_idx</var>.</p>
-<p class="Pp" id="CPU_EMPTY">The
- <a class="permalink" href="#CPU_EMPTY"><code class="Fn">CPU_EMPTY</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">cpuset</var>
- is empty.</p>
-<p class="Pp" id="CPU_ISFULLSET">The
- <a class="permalink" href="#CPU_ISFULLSET"><code class="Fn">CPU_ISFULLSET</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">cpuset</var>
- is full (the set of all CPUs).</p>
-<p class="Pp" id="CPU_FFS">The
- <a class="permalink" href="#CPU_FFS"><code class="Fn">CPU_FFS</code></a>()
- macro returns the 1-index of the first (lowest) CPU in
- <var class="Fa">cpuset</var>, or zero if <var class="Fa">cpuset</var> is
- empty. Like with <a class="Xr">ffs(3)</a>, to use the non-zero result of
- <code class="Fn">CPU_FFS</code>() as a <var class="Fa">cpu_idx</var> index
- parameter to any other <code class="Nm">cpuset(9)</code> macro, you must
- subtract one from the result.</p>
-<p class="Pp" id="CPU_COUNT">The
- <a class="permalink" href="#CPU_COUNT"><code class="Fn">CPU_COUNT</code></a>()
- macro returns the total number of CPUs in <var class="Fa">cpuset</var>.</p>
-<p class="Pp" id="CPU_SUBSET">The
- <a class="permalink" href="#CPU_SUBSET"><code class="Fn">CPU_SUBSET</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">needle</var>
- is a subset of <var class="Fa">haystack</var>.</p>
-<p class="Pp" id="CPU_OVERLAP">The
- <a class="permalink" href="#CPU_OVERLAP"><code class="Fn">CPU_OVERLAP</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">cpuset1</var>
- and <var class="Fa">cpuset2</var> have any common CPUs. (That is, if
- <var class="Fa">cpuset1</var> AND <var class="Fa">cpuset2</var> is not the
- empty set.)</p>
-<p class="Pp" id="CPU_CMP">The
- <a class="permalink" href="#CPU_CMP"><code class="Fn">CPU_CMP</code></a>()
- macro returns <code class="Dv">true</code> if <var class="Fa">cpuset1</var>
- is NOT equal to <var class="Fa">cpuset2</var>.</p>
-<p class="Pp" id="CPU_OR">The
- <a class="permalink" href="#CPU_OR"><code class="Fn">CPU_OR</code></a>()
- macro adds CPUs present in <var class="Fa">src</var> to
- <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> |=
- <var class="Fa">src</var>.)
- <a class="permalink" href="#CPU_OR_ATOMIC"><code class="Fn" id="CPU_OR_ATOMIC">CPU_OR_ATOMIC</code></a>()
- is similar, but sets the bits representing CPUs in the component machine
- words in <var class="Fa">dst</var> with atomic machine instructions. (That
- is, if <var class="Fa">dst</var> is composed of multiple machine words,
- <code class="Fn">CPU_OR_ATOMIC</code>() performs multiple individually
- atomic operations.)</p>
-<p class="Pp" id="CPU_ORNOT">The
- <a class="permalink" href="#CPU_ORNOT"><code class="Fn">CPU_ORNOT</code></a>()
- macro add CPUs not in <var class="Fa">src</var> to
- <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> |= <var class="Fa">~
- src</var>.)</p>
-<p class="Pp" id="CPU_AND">The
- <a class="permalink" href="#CPU_AND"><code class="Fn">CPU_AND</code></a>()
- macro removes CPUs absent from <var class="Fa">src</var> from
- <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> &amp;=
- <var class="Fa">src</var>.)
- <a class="permalink" href="#CPU_AND_ATOMIC"><code class="Fn" id="CPU_AND_ATOMIC">CPU_AND_ATOMIC</code></a>()
- is similar, with the same atomic semantics as
- <code class="Fn">CPU_OR_ATOMIC</code>().</p>
-<p class="Pp" id="CPU_ANDNOT">The
- <a class="permalink" href="#CPU_ANDNOT"><code class="Fn">CPU_ANDNOT</code></a>()
- macro removes CPUs in <var class="Fa">src</var> from
- <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code>
- equivalent of the scalar: <var class="Fa">dst</var> &amp;= <var class="Fa">~
- src</var>.)</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CPUSET_T_INITIALIZER_EXAMPLE"><a class="permalink" href="#CPUSET_T_INITIALIZER_EXAMPLE">CPUSET_T_INITIALIZER
- EXAMPLE</a></h1>
-<div class="Bd Li">
-<pre>cpuset_t myset;
-
-/* Initialize myset to filled (all CPUs) */
-myset = CPUSET_T_INITIALIZER(CPUSET_FSET);
-
-/* Initialize myset to only the lowest CPU */
-myset = CPUSET_T_INITIALIZER(0x1);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpuset(1)</a>, <a class="Xr">cpuset(2)</a>,
- <a class="Xr">bitset(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="In">&lt;<a class="In">sys/cpuset.h</a>&gt;</code>
- first appeared in <span class="Ux">FreeBSD 7.1</span>, released in January
- 2009, and in <span class="Ux">FreeBSD 8.0</span>, released in November
- 2009.</p>
-<p class="Pp">This manual page first appeared in <span class="Ux">FreeBSD
- 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">cpuset(9)</code> macros were written by
- <span class="An">Jeff Roberson</span>
- &lt;<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>&gt;.
- This manual page was written by <span class="An">Conrad Meyer</span>
- &lt;<a class="Mt" href="mailto:cem@FreeBSD.org">cem@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">Unlike every other reference to individual set members, which are
- zero-indexed, <code class="Fn">CPU_FFS</code>() returns a one-indexed result
- (or zero if the cpuset is empty).</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 7, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cr_bsd_visible.9 3.html b/static/freebsd/man9/cr_bsd_visible.9 3.html
deleted file mode 100644
index e9fda69c..00000000
--- a/static/freebsd/man9/cr_bsd_visible.9 3.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CR_BSD_VISIBLE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CR_BSD_VISIBLE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cr_bsd_visible</code> &#x2014;
- <span class="Nd">determine if subjects may see entities according to BSD
- security policies</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cr_bsd_visible</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *u2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function determines if a subject with credentials
- <var class="Fa">u1</var> is denied seeing an object or subject associated to
- credentials <var class="Fa">u2</var> by the following policies and
- associated <a class="Xr">sysctl(8)</a> knobs:</p>
-<dl class="Bl-tag">
- <dt id="security.bsd.seeotheruids"><var class="Va">security.bsd.seeotheruids</var></dt>
- <dd>If set to 0, subjects cannot see other subjects or objects if they are not
- associated with the same real user ID. The corresponding internal function
- is <a class="Xr">cr_canseeotheruids(9)</a>.</dd>
- <dt id="security.bsd.seeothergids"><var class="Va">security.bsd.seeothergids</var></dt>
- <dd>If set to 0, subjects cannot see other subjects or objects if they are not
- both a member of at least one common group. The corresponding internal
- function is <a class="Xr">cr_canseeothergids(9)</a>.</dd>
- <dt id="security.bsd.see_jail_proc"><var class="Va">security.bsd.see_jail_proc</var></dt>
- <dd>If set to 0, subjects cannot see other subjects or objects that are not
- associated with the same jail as they are. The corresponding internal
- function is <a class="Xr">cr_canseejailproc(9)</a>.</dd>
-</dl>
-<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from any
- of these policies provided that the <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active
- MAC policy explicitly denies the exemption (see
- <a class="Xr">priv_check_cred(9)</a>).</p>
-<p class="Pp">This function is intended to be used as a helper to implement
- <a class="Xr">cr_cansee(9)</a> and similar functions.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">This function returns zero if a subject with credentials
- <var class="Fa">u1</var> may see a subject or object with credentials
- <var class="Fa">u2</var> by the active above-mentioned policies, or
- <code class="Er">ESRCH</code> otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt>
- <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> do not
- have the same real user ID.</dd>
- <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt>
- <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> are not
- members of any common group (as determined by
- <a class="Xr">realgroupmember(9)</a>).</dd>
- <dt id="ESRCH~3">[<a class="permalink" href="#ESRCH~3"><code class="Er">ESRCH</code></a>]</dt>
- <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> are not
- in the same jail.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_cansee(9)</a>,
- <a class="Xr">cr_canseejailproc(9)</a>,
- <a class="Xr">cr_canseeothergids(9)</a>,
- <a class="Xr">cr_canseeotheruids(9)</a>,
- <a class="Xr">priv_check_cred(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This function and its manual page were written by
- <span class="An">Olivier Certner</span>
- &lt;<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cr_cansee.9 3.html b/static/freebsd/man9/cr_cansee.9 3.html
deleted file mode 100644
index c17f4ccc..00000000
--- a/static/freebsd/man9/cr_cansee.9 3.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CR_CANSEE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CR_CANSEE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cr_cansee</code> &#x2014;
- <span class="Nd">determine visibility of objects given their user
- credentials</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cr_cansee</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *u2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function determines if a subject with credential
- <var class="Fa">u1</var> can see a subject or object associated to
- credential <var class="Fa">u2</var>.</p>
-<p class="Pp">Specific types of subjects may need to submit to additional or
- different restrictions. As an example, for processes, see
- <a class="Xr">p_cansee(9)</a>, which calls this function.</p>
-<p class="Pp">The implementation relies on <a class="Xr">cr_bsd_visible(9)</a>
- and consequently the <a class="Xr">sysctl(8)</a> variables referenced in its
- manual page influence the result.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">This function returns zero if the subject with credential
- <var class="Fa">u1</var> can &#x201C;see&#x201D; the subject or object with
- credential <var class="Fa">u2</var>, or <code class="Er">ESRCH</code>
- otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt>
- <dd>The subject with credential <var class="Fa">u1</var> has been jailed and
- the subject or object with credential <var class="Fa">u2</var> does not
- belong to the same jail or one of its sub-jails, as determined by
- <a class="Xr">prison_check(9)</a>.</dd>
- <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt>
- <dd>The MAC subsystem denied visibility.</dd>
- <dt id="ESRCH~3">[<a class="permalink" href="#ESRCH~3"><code class="Er">ESRCH</code></a>]</dt>
- <dd><a class="Xr">cr_bsd_visible(9)</a> denied visibility according to the BSD
- security policies in force.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>, <a class="Xr">mac(9)</a>,
- <a class="Xr">p_cansee(9)</a>, <a class="Xr">prison_check(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cr_canseejailproc.9 4.html b/static/freebsd/man9/cr_canseejailproc.9 4.html
deleted file mode 100644
index e53cab66..00000000
--- a/static/freebsd/man9/cr_canseejailproc.9 4.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CR_CANSEEJAILPROC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CR_CANSEEJAILPROC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cr_canseejailproc</code> &#x2014;
- <span class="Nd">determine if subjects may see entities in
- sub-jails</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cr_canseejailproc</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *u2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<div class="Bf Em">This function is internal. Its functionality is integrated
- into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called
- instead.</div>
-<p class="Pp">This function checks if a subject associated to credentials
- <var class="Fa">u1</var> is denied seeing a subject or object associated to
- credentials <var class="Fa">u2</var> by a policy that requires both
- credentials to be associated to the same jail. This is a restriction to the
- baseline jail policy that a subject can see subjects or objects in its own
- jail or any sub-jail of it.</p>
-<p class="Pp">This policy is active if and only if the
- <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.see_jail_proc</var> is set to zero.</p>
-<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this
- policy provided that the <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active
- MAC policy explicitly denies the exemption (see
- <a class="Xr">priv_check_cred(9)</a>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">cr_canseejailproc</code>() function returns 0
- if the policy is disabled, both credentials are associated to the same jail,
- or if <var class="Fa">u1</var> has privilege exempting it from the policy.
- Otherwise, it returns <code class="Er">ESRCH</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>,
- <a class="Xr">priv_check_cred(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Olivier
- Certner</span>
- &lt;<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cr_canseeothergids.9 4.html b/static/freebsd/man9/cr_canseeothergids.9 4.html
deleted file mode 100644
index 60dd82af..00000000
--- a/static/freebsd/man9/cr_canseeothergids.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CR_CANSEEOTHERGIDS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CR_CANSEEOTHERGIDS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cr_canseeothergids</code> &#x2014;
- <span class="Nd">determine if subjects may see entities in a disjoint group
- set</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cr_canseeothergids</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *u2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<div class="Bf Em">This function is internal. Its functionality is integrated
- into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called
- instead.</div>
-<p class="Pp">This function checks if a subject associated to credentials
- <var class="Fa">u1</var> is denied seeing a subject or object associated to
- credentials <var class="Fa">u2</var> by a policy that requires both
- credentials to have at least one group in common. For this determination,
- the real and supplementary group IDs are used, but not the effective group
- IDs, as per <a class="Xr">realgroupmember(9)</a>.</p>
-<p class="Pp">This policy is active if and only if the
- <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.see_other_gids</var> is set to zero.</p>
-<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this
- policy provided that the <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active
- MAC policy explicitly denies the exemption (see
- <a class="Xr">priv_check_cred(9)</a>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">cr_canseeothergids</code>() function returns
- 0 if the policy is disabled, the credentials share at least one common
- group, or if <var class="Fa">u1</var> has privilege exempting it from the
- policy. Otherwise, it returns <code class="Er">ESRCH</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>,
- <a class="Xr">priv_check_cred(9)</a>,
- <a class="Xr">realgroupmember(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/cr_canseeotheruids.9 4.html b/static/freebsd/man9/cr_canseeotheruids.9 4.html
deleted file mode 100644
index fb57c009..00000000
--- a/static/freebsd/man9/cr_canseeotheruids.9 4.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CR_CANSEEOTHERUIDS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CR_CANSEEOTHERUIDS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">cr_canseeotheruids</code> &#x2014;
- <span class="Nd">determine if subjects may see entities with differing user
- ID</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cr_canseeotheruids</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *u2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<div class="Bf Em">This function is internal. Its functionality is integrated
- into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called
- instead.</div>
-<p class="Pp">This function checks if a subject associated to credentials
- <var class="Fa">u1</var> is denied seeing a subject or object associated to
- credentials <var class="Fa">u2</var> by a policy that requires both
- credentials to have the same real user ID.</p>
-<p class="Pp">This policy is active if and only if the
- <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.see_other_uids</var> is set to zero.</p>
-<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this
- policy provided that the <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active
- MAC policy explicitly denies the exemption (see
- <a class="Xr">priv_check_cred(9)</a>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">cr_canseeotheruids</code>() function returns
- 0 if the policy is disabled, both credentials have the same real user ID, or
- if <var class="Fa">u1</var> has privilege exempting it from the policy.
- Otherwise, it returns <code class="Er">ESRCH</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>,
- <a class="Xr">priv_check_cred(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/critical_enter.9 3.html b/static/freebsd/man9/critical_enter.9 3.html
deleted file mode 100644
index 8f5d8b6a..00000000
--- a/static/freebsd/man9/critical_enter.9 3.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRITICAL_ENTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRITICAL_ENTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">critical_enter</code>,
- <code class="Nm">critical_exit</code> &#x2014; <span class="Nd">enter and
- exit a critical region</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">critical_enter</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">critical_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><code class="Fn">CRITICAL_ASSERT</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions are used to prevent preemption in a critical
- region of code. All that is guaranteed is that the thread currently
- executing on a CPU will not be preempted. Specifically, a thread in a
- critical region will not migrate to another CPU while it is in a critical
- region, nor will the current CPU switch to a different thread. The current
- CPU may still trigger faults and exceptions during a critical section;
- however, these faults are usually fatal.</p>
-<p class="Pp">The CPU might also receive and handle interrupts within a critical
- section. When this occurs the interrupt exit will not result in a context
- switch, and execution will continue in the critical section. Thus, the net
- effect of a critical section on the current thread's execution is similar to
- running with interrupts disabled, except that timer interrupts and filtered
- interrupt handlers do not incur a latency penalty.</p>
-<p class="Pp" id="critical_enter">The
- <a class="permalink" href="#critical_enter"><code class="Fn">critical_enter</code></a>()
- and
- <a class="permalink" href="#critical_exit"><code class="Fn" id="critical_exit">critical_exit</code></a>()
- functions manage a per-thread counter to handle nested critical sections. If
- a thread is made runnable that would normally preempt the current thread
- while the current thread is in a critical section, then the preemption will
- be deferred until the current thread exits the outermost critical
- section.</p>
-<p class="Pp" id="not">Note that these functions do not provide any inter-CPU
- synchronization, data protection, or memory ordering guarantees, and thus
- should <a class="permalink" href="#not"><i class="Em">not</i></a> be used to
- protect shared data structures.</p>
-<p class="Pp">These functions should be used with care as an unbound or infinite
- loop within a critical region will deadlock the CPU. Also, they should not
- be interlocked with operations on mutexes, sx locks, semaphores, or other
- synchronization primitives, as these primitives may require a context switch
- to operate. One exception to this is that spin mutexes include a critical
- section, so in certain cases critical sections may be interlocked with spin
- mutexes.</p>
-<p class="Pp">Critical regions should be only as wide as necessary. That is,
- code which does not require the critical section to operate correctly should
- be excluded from its bounds whenever possible. Abuse of critical sections
- has an effect on overall system latency and timer precision, since disabling
- preemption will delay the execution of threaded interrupt handlers and
- <a class="Xr">callout(9)</a> events on the current CPU.</p>
-<p class="Pp" id="CRITICAL_ASSERT">The
- <a class="permalink" href="#CRITICAL_ASSERT"><code class="Fn">CRITICAL_ASSERT</code></a>()
- macro verifies that the provided thread <var class="Fa">td</var> is
- currently executing in a critical section. It is a wrapper around
- <a class="Xr">KASSERT(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">KASSERT(9)</a>,
- <a class="Xr">locking(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD
- 5.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 20, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/crypto.9 3.html b/static/freebsd/man9/crypto.9 3.html
deleted file mode 100644
index 5d0efed8..00000000
--- a/static/freebsd/man9/crypto.9 3.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRYPTO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRYPTO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">crypto</code> &#x2014; <span class="Nd">API for
- cryptographic services in the kernel</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">opencrypto/cryptodev.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">crypto</code> is a framework for in-kernel
- cryptography. It permits in-kernel consumers to encrypt and decrypt data and
- also enables userland applications to use cryptographic hardware through the
- <span class="Pa">/dev/crypto</span> device.</p>
-<p class="Pp"><code class="Nm">crypto</code> supports encryption and decryption
- operations using block and stream ciphers as well as computation and
- verification of message authentication codes (MACs). Consumers allocate
- sessions to describe a transform as discussed in
- <a class="Xr">crypto_session(9)</a>. Consumers then allocate request objects
- to describe each transformation such as encrypting a network packet or
- decrypting a disk sector. Requests are described in
- <a class="Xr">crypto_request(9)</a>.</p>
-<p class="Pp">Device drivers are responsible for processing requests submitted
- by consumers. <a class="Xr">crypto_driver(9)</a> describes the interfaces
- drivers use to register with the framework, helper routines the framework
- provides to facilitate request processing, and the interfaces drivers are
- required to provide.</p>
-<section class="Ss">
-<h2 class="Ss" id="Callbacks"><a class="permalink" href="#Callbacks">Callbacks</a></h2>
-<p class="Pp">Since the consumers may not be associated with a process, drivers
- may not <a class="Xr">sleep(9)</a>. The same holds for the framework. Thus,
- a callback mechanism is used to notify a consumer that a request has been
- completed (the callback is specified by the consumer on a per-request
- basis). The callback is invoked by the framework whether the request was
- successfully completed or not. Errors are reported to the callback
- function.</p>
-<p class="Pp">Session initialization does not use callbacks and returns errors
- synchronously.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Session_Migration"><a class="permalink" href="#Session_Migration">Session
- Migration</a></h2>
-<p class="Pp">Operations may fail with a specific error code,
- <code class="Er">EAGAIN</code>, to indicate that a session handle has
- changed and that the request may be re-submitted immediately with the new
- session. The consumer should update its saved copy of the session handle to
- the value of <var class="Fa">crp_session</var> so that future requests use
- the new session.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Supported_Algorithms"><a class="permalink" href="#Supported_Algorithms">Supported
- Algorithms</a></h2>
-<p class="Pp">More details on some algorithms may be found in
- <a class="Xr">crypto(7)</a>.</p>
-<p class="Pp">The following authentication algorithms are supported:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="CRYPTO_AES_CCM_CBC_MAC"><a class="permalink" href="#CRYPTO_AES_CCM_CBC_MAC"><code class="Dv">CRYPTO_AES_CCM_CBC_MAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_AES_NIST_GMAC"><a class="permalink" href="#CRYPTO_AES_NIST_GMAC"><code class="Dv">CRYPTO_AES_NIST_GMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_BLAKE2B"><a class="permalink" href="#CRYPTO_BLAKE2B"><code class="Dv">CRYPTO_BLAKE2B</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_BLAKE2S"><a class="permalink" href="#CRYPTO_BLAKE2S"><code class="Dv">CRYPTO_BLAKE2S</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_NULL_HMAC"><a class="permalink" href="#CRYPTO_NULL_HMAC"><code class="Dv">CRYPTO_NULL_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_POLY1305"><a class="permalink" href="#CRYPTO_POLY1305"><code class="Dv">CRYPTO_POLY1305</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_RIPEMD160"><a class="permalink" href="#CRYPTO_RIPEMD160"><code class="Dv">CRYPTO_RIPEMD160</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_RIPEMD160_HMAC"><a class="permalink" href="#CRYPTO_RIPEMD160_HMAC"><code class="Dv">CRYPTO_RIPEMD160_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA1"><a class="permalink" href="#CRYPTO_SHA1"><code class="Dv">CRYPTO_SHA1</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA1_HMAC"><a class="permalink" href="#CRYPTO_SHA1_HMAC"><code class="Dv">CRYPTO_SHA1_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_224"><a class="permalink" href="#CRYPTO_SHA2_224"><code class="Dv">CRYPTO_SHA2_224</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_224_HMAC"><a class="permalink" href="#CRYPTO_SHA2_224_HMAC"><code class="Dv">CRYPTO_SHA2_224_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_256"><a class="permalink" href="#CRYPTO_SHA2_256"><code class="Dv">CRYPTO_SHA2_256</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_256_HMAC"><a class="permalink" href="#CRYPTO_SHA2_256_HMAC"><code class="Dv">CRYPTO_SHA2_256_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_384"><a class="permalink" href="#CRYPTO_SHA2_384"><code class="Dv">CRYPTO_SHA2_384</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_384_HMAC"><a class="permalink" href="#CRYPTO_SHA2_384_HMAC"><code class="Dv">CRYPTO_SHA2_384_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_512"><a class="permalink" href="#CRYPTO_SHA2_512"><code class="Dv">CRYPTO_SHA2_512</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_SHA2_512_HMAC"><a class="permalink" href="#CRYPTO_SHA2_512_HMAC"><code class="Dv">CRYPTO_SHA2_512_HMAC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</div>
-<p class="Pp">The following encryption algorithms are supported:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="CRYPTO_AES_CBC"><a class="permalink" href="#CRYPTO_AES_CBC"><code class="Dv">CRYPTO_AES_CBC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_AES_ICM"><a class="permalink" href="#CRYPTO_AES_ICM"><code class="Dv">CRYPTO_AES_ICM</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_AES_XTS"><a class="permalink" href="#CRYPTO_AES_XTS"><code class="Dv">CRYPTO_AES_XTS</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_CAMELLIA_CBC"><a class="permalink" href="#CRYPTO_CAMELLIA_CBC"><code class="Dv">CRYPTO_CAMELLIA_CBC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_CHACHA20"><a class="permalink" href="#CRYPTO_CHACHA20"><code class="Dv">CRYPTO_CHACHA20</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_NULL_CBC"><a class="permalink" href="#CRYPTO_NULL_CBC"><code class="Dv">CRYPTO_NULL_CBC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</div>
-<p class="Pp">The following authenticated encryption with additional data (AEAD)
- algorithms are supported:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="CRYPTO_AES_CCM_16"><a class="permalink" href="#CRYPTO_AES_CCM_16"><code class="Dv">CRYPTO_AES_CCM_16</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_AES_NIST_GCM_16"><a class="permalink" href="#CRYPTO_AES_NIST_GCM_16"><code class="Dv">CRYPTO_AES_NIST_GCM_16</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="CRYPTO_CHACHA20_POLY1305"><a class="permalink" href="#CRYPTO_CHACHA20_POLY1305"><code class="Dv">CRYPTO_CHACHA20_POLY1305</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</div>
-<p class="Pp">The following compression algorithms are supported:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="CRYPTO_DEFLATE_COMP"><a class="permalink" href="#CRYPTO_DEFLATE_COMP"><code class="Dv">CRYPTO_DEFLATE_COMP</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag">
- <dt><span class="Pa">sys/opencrypto/crypto.c</span></dt>
- <dd>most of the framework code</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">crypto(4)</a>, <a class="Xr">ipsec(4)</a>,
- <a class="Xr">crypto(7)</a>, <a class="Xr">crypto_driver(9)</a>,
- <a class="Xr">crypto_request(9)</a>, <a class="Xr">crypto_session(9)</a>,
- <a class="Xr">sleep(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The cryptographic framework first appeared in
- <span class="Ux">OpenBSD 2.7</span> and was written by
- <span class="An">Angelos D. Keromytis</span>
- &lt;<a class="Mt" href="mailto:angelos@openbsd.org">angelos@openbsd.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The framework needs a mechanism for determining which driver is
- best for a specific set of algorithms associated with a session. Some type
- of benchmarking is in order here.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/crypto_buffer.9 3.html b/static/freebsd/man9/crypto_buffer.9 3.html
deleted file mode 100644
index cb954fa0..00000000
--- a/static/freebsd/man9/crypto_buffer.9 3.html
+++ /dev/null
@@ -1,256 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRYPTO_BUFFER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRYPTO_BUFFER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">crypto_buffer</code> &#x2014;
- <span class="Nd">symmetric cryptographic request buffers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">opencrypto/cryptodev.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_apply</code>(<var class="Fa">struct cryptop
- *crp</var>, <var class="Fa">int off</var>, <var class="Fa">int len</var>,
- <var class="Fa">int (*f)(void *, void *, u_int)</var>, <var class="Fa">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_apply_buf</code>(<var class="Fa">struct crypto_buffer
- *cb</var>, <var class="Fa">int off</var>, <var class="Fa">int len</var>,
- <var class="Fa">int (*f)(void *, void *, u_int)</var>, <var class="Fa">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">crypto_buffer_contiguous_subsegment</code>(<var class="Fa">struct
- crypto_buffer *cb</var>, <var class="Fa">size_t skip</var>,
- <var class="Fa">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">size_t</var>
- <br/>
- <code class="Fn">crypto_buffer_len</code>(<var class="Fa" style="white-space: nowrap;">struct
- crypto_buffer *cb</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">crypto_contiguous_subsegment</code>(<var class="Fa">struct
- cryptop *crp</var>, <var class="Fa">size_t skip</var>,
- <var class="Fa">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_init</code>(<var class="Fa">struct
- crypto_buffer_cursor *cc</var>, <var class="Fa">const struct crypto_buffer
- *cb</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_advance</code>(<var class="Fa" style="white-space: nowrap;">struct
- crypto_buffer_cursor *cc</var>,
- <var class="Fa" style="white-space: nowrap;">size_t amount</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_copyback</code>(<var class="Fa">struct
- crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>,
- <var class="Fa">const void *src</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_copydata</code>(<var class="Fa">struct
- crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>,
- <var class="Fa">void *dst</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_copydata_noadv</code>(<var class="Fa">struct
- crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>,
- <var class="Fa">void *dst</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">crypto_cursor_segment</code>(<var class="Fa" style="white-space: nowrap;">struct
- crypto_buffer_cursor *cc</var>,
- <var class="Fa" style="white-space: nowrap;">size_t *len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_cursor_copy</code>(<var class="Fa">const struct
- crypto_buffer_cursor *fromc</var>, <var class="Fa">struct
- crypto_buffer_cursor *toc</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Symmetric cryptographic requests use data buffers to describe the
- data to be modified. Requests can either specify a single data buffer whose
- contents are modified in place, or requests may specify separate data
- buffers for input and output. <var class="Vt">struct crypto_buffer</var>
- provides an abstraction that permits cryptographic requests to operate on
- different types of buffers. <var class="Vt">struct crypto_cursor</var>
- allows cryptographic drivers to iterate over a data buffer.</p>
-<p class="Pp" id="CRYPTO_HAS_OUTPUT_BUFFER"><a class="permalink" href="#CRYPTO_HAS_OUTPUT_BUFFER"><code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code></a>()
- returns true if <var class="Fa">crp</var> uses separate buffers for input
- and output and false if <var class="Fa">crp</var> uses a single buffer.</p>
-<p class="Pp" id="crypto_buffer_len"><a class="permalink" href="#crypto_buffer_len"><code class="Fn">crypto_buffer_len</code></a>()
- returns the length of data buffer <var class="Fa">cb</var> in bytes.</p>
-<p class="Pp" id="crypto_apply_buf"><a class="permalink" href="#crypto_apply_buf"><code class="Fn">crypto_apply_buf</code></a>()
- invokes a caller-supplied function to a region of the data buffer
- <var class="Fa">cb</var>. The function <var class="Fa">f</var> is called one
- or more times. For each invocation, the first argument to
- <var class="Fa">f</var> is the value of <var class="Fa">arg</var> passed to
- <code class="Fn">crypto_apply_buf</code>(). The second and third arguments
- to <var class="Fa">f</var> are a pointer and length to a segment of the
- buffer mapped into the kernel. The function is called enough times to cover
- the <var class="Fa">len</var> bytes of the data buffer which starts at an
- offset <var class="Fa">off</var>. If any invocation of
- <var class="Fa">f</var> returns a non-zero value,
- <code class="Fn">crypto_apply_buf</code>() immediately returns that value
- without invoking <var class="Fa">f</var> on any remaining segments of the
- region, otherwise <code class="Fn">crypto_apply_buf</code>() returns the
- value from the final call to <var class="Fa">f</var>.
- <a class="permalink" href="#crypto_apply"><code class="Fn" id="crypto_apply">crypto_apply</code></a>()
- invokes the callback <var class="Fa">f</var> on a region of the input data
- buffer for <var class="Fa">crp</var>.</p>
-<p class="Pp" id="crypto_buffer_contiguous_subsegment"><a class="permalink" href="#crypto_buffer_contiguous_subsegment"><code class="Fn">crypto_buffer_contiguous_subsegment</code></a>()
- attempts to locate a single, virtually-contiguous segment of the data buffer
- <var class="Fa">cb</var>. The segment must be <var class="Fa">len</var>
- bytes long and start at an offset of <var class="Fa">skip</var> bytes. If a
- segment is found, a pointer to the start of the segment is returned.
- Otherwise, <code class="Dv">NULL</code> is returned.
- <a class="permalink" href="#crypto_contiguous_subsegment"><code class="Fn" id="crypto_contiguous_subsegment">crypto_contiguous_subsegment</code></a>()
- attempts to locate a single, virtually-contiguous segment in the input data
- buffer for <var class="Fa">crp</var>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Data_Buffers"><a class="permalink" href="#Data_Buffers">Data
- Buffers</a></h2>
-<p class="Pp">Data buffers are described by an instance of
- <var class="Vt">struct crypto buffer</var>. The
- <var class="Fa">cb_type</var> member contains the type of the data buffer.
- The following types are supported:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_BUF_NONE"><a class="permalink" href="#CRYPTO_BUF_NONE"><code class="Dv">CRYPTO_BUF_NONE</code></a></dt>
- <dd>An invalid buffer. Used to mark the output buffer when a crypto request
- uses a single data buffer.</dd>
- <dt id="CRYPTO_BUF_CONTIG"><a class="permalink" href="#CRYPTO_BUF_CONTIG"><code class="Dv">CRYPTO_BUF_CONTIG</code></a></dt>
- <dd>An array of bytes mapped into the kernel's address space.</dd>
- <dt id="CRYPTO_BUF_UIO"><a class="permalink" href="#CRYPTO_BUF_UIO"><code class="Dv">CRYPTO_BUF_UIO</code></a></dt>
- <dd>A scatter/gather list of kernel buffers as described in
- <a class="Xr">uio(9)</a>.</dd>
- <dt id="CRYPTO_BUF_MBUF"><a class="permalink" href="#CRYPTO_BUF_MBUF"><code class="Dv">CRYPTO_BUF_MBUF</code></a></dt>
- <dd>A chain of network memory buffers as described in
- <a class="Xr">mbuf(9)</a>.</dd>
- <dt id="CRYPTO_BUF_SINGLE_MBUF"><a class="permalink" href="#CRYPTO_BUF_SINGLE_MBUF"><code class="Dv">CRYPTO_BUF_SINGLE_MBUF</code></a></dt>
- <dd>A single network memory buffer as described in
- <a class="Xr">mbuf(9)</a>.</dd>
- <dt id="CRYPTO_BUF_VMPAGE"><a class="permalink" href="#CRYPTO_BUF_VMPAGE"><code class="Dv">CRYPTO_BUF_VMPAGE</code></a></dt>
- <dd>A scatter/gather list of <var class="Vt">vm_page_t</var> structures
- describing pages in the kernel's address space. This buffer type is only
- available if <code class="Dv">CRYPTO_HAS_VMPAGE</code> is true.</dd>
-</dl>
-<p class="Pp">The structure also contains the following type-specific
- fields:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">cb_buf</var></dt>
- <dd>A pointer to the start of a <code class="Dv">CRYPTO_BUF_CONTIG</code> data
- buffer.</dd>
- <dt><var class="Fa">cb_buf_len</var></dt>
- <dd>The length of a <code class="Dv">CRYPTO_BUF_CONTIG</code> data buffer</dd>
- <dt><var class="Fa">cb_mbuf</var></dt>
- <dd>A pointer to a <var class="Vt">struct mbuf</var> for
- <code class="Dv">CRYPTO_BUF_MBUF</code> and
- <code class="Dv">CRYPTO_BUF_SINGLE_MBUF</code>.</dd>
- <dt><var class="Fa">cb_uio</var></dt>
- <dd>A pointer to a <var class="Vt">struct uio</var> for
- <code class="Dv">CRYPTO_BUF_UIO</code>.</dd>
- <dt><var class="Fa">cb_vm_page</var></dt>
- <dd>A pointer to an array of <var class="Vt">struct vm_page</var> for
- <code class="Dv">CRYPTO_BUF_VMPAGE</code>.</dd>
- <dt><var class="Fa">cb_vm_page_len</var></dt>
- <dd>The total amount of data included in the <var class="Fa">cb_vm_page</var>
- array, in bytes.</dd>
- <dt><var class="Fa">cb_vm_page_offset</var></dt>
- <dd>Offset in bytes in the first page of <var class="Fa">cb_vm_page</var>
- where valid data begins.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Cursors"><a class="permalink" href="#Cursors">Cursors</a></h2>
-<p class="Pp">Cursors provide a mechanism for iterating over a data buffer. They
- are primarily intended for use in software drivers which access data buffers
- via virtual addresses.</p>
-<p class="Pp" id="crypto_cursor_init"><a class="permalink" href="#crypto_cursor_init"><code class="Fn">crypto_cursor_init</code></a>()
- initializes the cursor <var class="Fa">cc</var> to reference the start of
- the data buffer <var class="Fa">cb</var>.</p>
-<p class="Pp" id="crypto_cursor_advance"><a class="permalink" href="#crypto_cursor_advance"><code class="Fn">crypto_cursor_advance</code></a>()
- advances the cursor <var class="Fa">amount</var> bytes forward in the data
- buffer.</p>
-<p class="Pp" id="crypto_cursor_copyback"><a class="permalink" href="#crypto_cursor_copyback"><code class="Fn">crypto_cursor_copyback</code></a>()
- copies <var class="Fa">size</var> bytes from the local buffer pointed to by
- <var class="Fa">src</var> into the data buffer associated with
- <var class="Fa">cc</var>. The bytes are written to the current position of
- <var class="Fa">cc</var>, and the cursor is then advanced by
- <var class="Fa">size</var> bytes.</p>
-<p class="Pp" id="crypto_cursor_copydata"><a class="permalink" href="#crypto_cursor_copydata"><code class="Fn">crypto_cursor_copydata</code></a>()
- copies <var class="Fa">size</var> bytes out of the data buffer associated
- with <var class="Fa">cc</var> into a local buffer pointed to by
- <var class="Fa">dst</var>. The bytes are read from the current position of
- <var class="Fa">cc</var>, and the cursor is then advanced by
- <var class="Fa">size</var> bytes.</p>
-<p class="Pp" id="crypto_cursor_copydata_noadv"><a class="permalink" href="#crypto_cursor_copydata_noadv"><code class="Fn">crypto_cursor_copydata_noadv</code></a>()
- is similar to <code class="Fn">crypto_cursor_copydata</code>() except that
- it does not change the current position of <var class="Fa">cc</var>.</p>
-<p class="Pp" id="crypto_cursor_segment"><a class="permalink" href="#crypto_cursor_segment"><code class="Fn">crypto_cursor_segment</code></a>()
- returns the start of the virtually-contiguous segment at the current
- position of <var class="Fa">cc</var>. The length of the segment is stored in
- <var class="Fa">len</var>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">crypto_apply</code>() and
- <code class="Fn">crypto_apply_buf</code>() return the return value from the
- caller-supplied callback function.</p>
-<p class="Pp"><code class="Fn">crypto_buffer_contiguous_subsegment</code>(),
- <code class="Fn">crypto_contiguous_subsegment</code>(), and
- <code class="Fn">crypto_cursor_segment</code>() return a pointer to a
- contiguous segment or <code class="Dv">NULL</code>.</p>
-<p class="Pp"><code class="Fn">crypto_buffer_len</code>() returns the length of
- a buffer in bytes.</p>
-<p class="Pp"><code class="Fn">crypto_cursor_seglen</code>() returns the length
- in bytes of a contiguous segment.</p>
-<p class="Pp"><code class="Fn">crypto_cursor_copy</code>() makes a deep copy of
- the cursor <var class="Fa">fromc</var>. The two copies do not share any
- state and can thus be used independently.</p>
-<p class="Pp"><code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code>() returns true if
- the request uses a separate output buffer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ipsec(4)</a>, <a class="Xr">crypto(7)</a>,
- <a class="Xr">bus_dma(9)</a>, <a class="Xr">crypto(9)</a>,
- <a class="Xr">crypto_driver(9)</a>, <a class="Xr">crypto_request(9)</a>,
- <a class="Xr">crypto_session(9)</a>, <a class="Xr">mbuf(9)</a>,
- <a class="Xr">uio(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">crypto_buffer</code> functions first appeared
- in <span class="Ux">FreeBSD 13</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">crypto_buffer</code> functions and this
- manual page were written by <span class="An">John Baldwin</span>
- &lt;<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 11, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/crypto_driver.9 4.html b/static/freebsd/man9/crypto_driver.9 4.html
deleted file mode 100644
index ca7af164..00000000
--- a/static/freebsd/man9/crypto_driver.9 4.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRYPTO_DRIVER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRYPTO_DRIVER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">crypto_driver</code> &#x2014;
- <span class="Nd">interface for symmetric cryptographic drivers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">opencrypto/cryptodev.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_copyback</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int
- off</var>, <var class="Fa" style="white-space: nowrap;">int size</var>,
- <var class="Fa" style="white-space: nowrap;">const void *src</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_copydata</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int
- off</var>, <var class="Fa" style="white-space: nowrap;">int size</var>,
- <var class="Fa" style="white-space: nowrap;">void *dst</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_done</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>);</p>
-<p class="Pp"><var class="Ft">int32_t</var>
- <br/>
- <code class="Fn">crypto_get_driverid</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">size_t
- session_size</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">crypto_get_driver_session</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t
- crypto_session</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_read_iv</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void
- *iv</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_unblock</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- driverid</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_unregister_all</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- driverid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CRYPTODEV_FREESESSION</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">crypto_session_t
- crypto_session</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CRYPTODEV_NEWSESSION</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">crypto_session_t crypto_session</var>,
- <var class="Fa">const struct crypto_session_params *csp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CRYPTODEV_PROBESESSION</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">const struct crypto_session_params
- *csp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">CRYPTODEV_PROCESS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">struct cryptop
- *crp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hmac_init_ipad</code>(<var class="Fa">struct auth_hash
- *axf</var>, <var class="Fa">const char *key</var>, <var class="Fa">int
- klen</var>, <var class="Fa">void *auth_ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hmac_init_opad</code>(<var class="Fa">struct auth_hash
- *axf</var>, <var class="Fa">const char *key</var>, <var class="Fa">int
- klen</var>, <var class="Fa">void *auth_ctx</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Symmetric cryptographic drivers process cryptographic requests
- submitted to sessions associated with the driver.</p>
-<p class="Pp" id="crypto_get_driverid">Cryptographic drivers call
- <a class="permalink" href="#crypto_get_driverid"><code class="Fn">crypto_get_driverid</code></a>()
- to register with the cryptographic framework. <var class="Fa">dev</var> is
- the device used to service requests. The
- <a class="permalink" href="#CRYPTODEV"><code class="Fn" id="CRYPTODEV">CRYPTODEV</code></a>()
- methods are defined in the method table for the device driver attached to
- <var class="Fa">dev</var>. <var class="Fa">session_size</var> specifies the
- size of a driver-specific per-session structure allocated by the
- cryptographic framework. <var class="Fa">flags</var> is a bitmask of
- properties about the driver. Exactly one of
- <code class="Dv">CRYPTOCAP_F_SOFTWARE</code> or
- <code class="Dv">CRYPTOCAP_F_HARDWARE</code> must be specified.
- <code class="Dv">CRYPTOCAP_F_SOFTWARE</code> should be used for drivers
- which process requests using host CPUs.
- <code class="Dv">CRYPTOCAP_F_HARDWARE</code> should be used for drivers
- which process requests on separate co-processors.
- <code class="Dv">CRYPTOCAP_F_SYNC</code> should be set for drivers which
- process requests synchronously in
- <code class="Fn">CRYPTODEV_PROCESS</code>().
- <code class="Dv">CRYPTOCAP_F_ACCEL_SOFTWARE</code> should be set for
- software drivers which use accelerated CPU instructions.
- <code class="Fn">crypto_get_driverid</code>() returns an opaque driver
- id.</p>
-<p class="Pp" id="crypto_unregister_all"><a class="permalink" href="#crypto_unregister_all"><code class="Fn">crypto_unregister_all</code></a>()
- unregisters a driver from the cryptographic framework. If there are any
- pending operations or open sessions, this function will sleep.
- <var class="Fa">driverid</var> is the value returned by an earlier call to
- <code class="Fn">crypto_get_driverid</code>().</p>
-<p class="Pp" id="crypto_newsession">When a new session is created by
- <a class="permalink" href="#crypto_newsession"><code class="Fn">crypto_newsession</code></a>(),
- <a class="permalink" href="#CRYPTODEV_PROBESESSION"><code class="Fn" id="CRYPTODEV_PROBESESSION">CRYPTODEV_PROBESESSION</code></a>()
- is invoked by the cryptographic framework on each active driver to determine
- the best driver to use for the session. This method should inspect the
- session parameters in <var class="Fa">csp</var>. If a driver does not
- support requests described by <var class="Fa">csp</var>, this method should
- return an error value. If the driver does support requests described by
- <var class="Fa">csp</var>, it should return a negative value. The framework
- prefers drivers with the largest negative value, similar to
- <a class="Xr">DEVICE_PROBE(9)</a>. The following values are defined for
- non-error return values from this method:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTODEV_PROBE_HARDWARE"><a class="permalink" href="#CRYPTODEV_PROBE_HARDWARE"><code class="Dv">CRYPTODEV_PROBE_HARDWARE</code></a></dt>
- <dd>The driver processes requests via a co-processor.</dd>
- <dt id="CRYPTODEV_PROBE_ACCEL_SOFTWARE"><a class="permalink" href="#CRYPTODEV_PROBE_ACCEL_SOFTWARE"><code class="Dv">CRYPTODEV_PROBE_ACCEL_SOFTWARE</code></a></dt>
- <dd>The driver processes requests on the host CPU using optimized instructions
- such as AES-NI.</dd>
- <dt id="CRYPTODEV_PROBE_SOFTWARE"><a class="permalink" href="#CRYPTODEV_PROBE_SOFTWARE"><code class="Dv">CRYPTODEV_PROBE_SOFTWARE</code></a></dt>
- <dd>The driver processes requests on the host CPU.</dd>
-</dl>
-<p class="Pp">This method should not sleep.</p>
-<p class="Pp" id="CRYPTODEV_NEWSESSION">Once the framework has chosen a driver
- for a session, the framework invokes the
- <a class="permalink" href="#CRYPTODEV_NEWSESSION"><code class="Fn">CRYPTODEV_NEWSESSION</code></a>()
- method to initialize driver-specific session state. Prior to calling this
- method, the framework allocates a per-session driver-specific data
- structure. This structure is initialized with zeroes, and its size is set by
- the <var class="Fa">session_size</var> passed to
- <code class="Fn">crypto_get_driverid</code>(). This method can retrieve a
- pointer to this data structure by passing
- <var class="Fa">crypto_session</var> to
- <code class="Fn">crypto_get_driver_session</code>(). Session parameters are
- described in <var class="Fa">csp</var>.</p>
-<p class="Pp">This method should not sleep.</p>
-<p class="Pp" id="CRYPTODEV_FREESESSION"><a class="permalink" href="#CRYPTODEV_FREESESSION"><code class="Fn">CRYPTODEV_FREESESSION</code></a>()
- is invoked to release any driver-specific state when a session is destroyed.
- The per-session driver-specific data structure is explicitly zeroed and
- freed by the framework after this method returns. If a driver requires no
- additional tear-down steps, it can leave this method undefined.</p>
-<p class="Pp">This method should not sleep.</p>
-<p class="Pp" id="CRYPTODEV_PROCESS"><a class="permalink" href="#CRYPTODEV_PROCESS"><code class="Fn">CRYPTODEV_PROCESS</code></a>()
- is invoked for each request submitted to an active session. This method can
- either complete a request synchronously or schedule it to be completed
- asynchronously, but it must not sleep.</p>
-<p class="Pp" id="crypto_unblock">If this method is not able to complete a
- request due to insufficient resources such as a full command queue, it can
- defer the request by returning <code class="Dv">ERESTART</code>. The request
- will be queued by the framework and retried once the driver releases pending
- requests via
- <a class="permalink" href="#crypto_unblock"><code class="Fn">crypto_unblock</code></a>().
- Any requests submitted to sessions belonging to the driver will also be
- queued until <code class="Fn">crypto_unblock</code>() is called.</p>
-<p class="Pp">If a driver encounters errors while processing a request, it
- should report them via the <var class="Fa">crp_etype</var> field of
- <var class="Fa">crp</var> rather than returning an error directly.</p>
-<p class="Pp"><var class="Fa">flags</var> may be set to
- <code class="Dv">CRYPTO_HINT_MORE</code> if there are additional requests
- queued for this driver. The driver can use this as a hint to batch
- completion interrupts. Note that these additional requests may be from
- different sessions.</p>
-<p class="Pp" id="crypto_get_driver_session"><a class="permalink" href="#crypto_get_driver_session"><code class="Fn">crypto_get_driver_session</code></a>()
- returns a pointer to the driver-specific per-session data structure for the
- session <var class="Fa">crypto_session</var>. This function can be used in
- the <code class="Fn">CRYPTODEV_NEWSESSION</code>(),
- <code class="Fn">CRYPTODEV_PROCESS</code>(), and
- <code class="Fn">CRYPTODEV_FREESESSION</code>() callbacks.</p>
-<p class="Pp" id="crypto_copydata"><a class="permalink" href="#crypto_copydata"><code class="Fn">crypto_copydata</code></a>()
- copies <var class="Fa">size</var> bytes out of the input buffer for
- <var class="Fa">crp</var> into a local buffer pointed to by
- <var class="Fa">dst</var>. The bytes are read starting at an offset of
- <var class="Fa">off</var> bytes in the request's input buffer.</p>
-<p class="Pp" id="crypto_copyback"><a class="permalink" href="#crypto_copyback"><code class="Fn">crypto_copyback</code></a>()
- copies <var class="Fa">size</var> bytes from the local buffer pointed to by
- <var class="Fa">src</var> into the output buffer for
- <var class="Fa">crp</var>. The bytes are written starting at an offset of
- <var class="Fa">off</var> bytes in the request's output buffer.</p>
-<p class="Pp" id="crypto_read_iv"><a class="permalink" href="#crypto_read_iv"><code class="Fn">crypto_read_iv</code></a>()
- copies the IV or nonce for <var class="Fa">crp</var> into the local buffer
- pointed to by <var class="Fa">iv</var>.</p>
-<p class="Pp" id="crypto_done">A driver calls
- <a class="permalink" href="#crypto_done"><code class="Fn">crypto_done</code></a>()
- to mark the request <var class="Fa">crp</var> as completed. Any errors
- should be set in <var class="Fa">crp_etype</var> prior to calling this
- function.</p>
-<p class="Pp" id="crypto_unblock~2">If a driver defers a request by returning
- <code class="Dv">ERESTART</code> from
- <code class="Dv">CRYPTO_PROCESS</code>, the framework will queue all
- requests for the driver until the driver calls
- <a class="permalink" href="#crypto_unblock~2"><code class="Fn">crypto_unblock</code></a>()
- to indicate that the temporary resource shortage has been relieved. For
- example, if a driver returns <code class="Dv">ERESTART</code> due to a full
- command ring, it would invoke <code class="Fn">crypto_unblock</code>() from
- a command completion interrupt that makes a command ring entry available.
- <var class="Fa">driverid</var> is the value returned by
- <code class="Fn">crypto_get_driverid</code>(). <var class="Fa">what</var>
- indicates which types of requests the driver is able to handle again:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_SYMQ"><a class="permalink" href="#CRYPTO_SYMQ"><code class="Dv">CRYPTO_SYMQ</code></a></dt>
- <dd>indicates that the driver is able to handle symmetric requests passed to
- <code class="Fn">CRYPTODEV_PROCESS</code>().</dd>
-</dl>
-<p class="Pp" id="hmac_init_ipad"><a class="permalink" href="#hmac_init_ipad"><code class="Fn">hmac_init_ipad</code></a>()
- prepares an authentication context to generate the inner hash of an HMAC.
- <var class="Fa">axf</var> is a software implementation of an authentication
- algorithm such as the value returned by
- <a class="permalink" href="#crypto_auth_hash"><code class="Fn" id="crypto_auth_hash">crypto_auth_hash</code></a>().
- <var class="Fa">key</var> is a pointer to a HMAC key of
- <var class="Fa">klen</var> bytes. <var class="Fa">auth_ctx</var> points to a
- valid authentication context for the desired algorithm. The function
- initializes the context with the supplied key.</p>
-<p class="Pp" id="hmac_init_opad"><a class="permalink" href="#hmac_init_opad"><code class="Fn">hmac_init_opad</code></a>()
- is similar to <code class="Fn">hmac_init_ipad</code>() except that it
- prepares an authentication context to generate the outer hash of an
- HMAC.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">crypto_apply</code>() returns the return value
- from the caller-supplied callback function.</p>
-<p class="Pp"><code class="Fn">crypto_contiguous_subsegment</code>() returns a
- pointer to a contiguous segment or <code class="Dv">NULL</code>.</p>
-<p class="Pp"><code class="Fn">crypto_get_driverid</code>() returns a driver
- identifier on success or -1 on error.</p>
-<p class="Pp"><code class="Fn">crypto_unblock</code>(),
- <code class="Fn">crypto_unregister_all</code>(),
- <code class="Fn">CRYPTODEV_FREESESSION</code>(),
- <code class="Fn">CRYPTODEV_NEWSESSION</code>(), and
- <code class="Fn">CRYPTODEV_PROCESS</code>() return zero on success or an
- error on failure.</p>
-<p class="Pp"><code class="Fn">CRYPTODEV_PROBESESSION</code>() returns a
- negative value on success or an error on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">crypto(7)</a>, <a class="Xr">crypto(9)</a>,
- <a class="Xr">crypto_buffer(9)</a>, <a class="Xr">crypto_request(9)</a>,
- <a class="Xr">crypto_session(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/crypto_request.9 4.html b/static/freebsd/man9/crypto_request.9 4.html
deleted file mode 100644
index f33fe032..00000000
--- a/static/freebsd/man9/crypto_request.9 4.html
+++ /dev/null
@@ -1,505 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRYPTO_REQUEST(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRYPTO_REQUEST(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">crypto_request</code> &#x2014;
- <span class="Nd">symmetric cryptographic operations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">opencrypto/cryptodev.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct cryptop *</var>
- <br/>
- <code class="Fn">crypto_clonereq</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t
- cses</var>, <var class="Fa" style="white-space: nowrap;">struct cryptop
- *crp</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_dispatch</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_dispatch_async</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_dispatch_batch</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptopq *crpq</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_destroyreq</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_freereq</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>);</p>
-<p class="Pp"><var class="Ft">struct cryptop *</var>
- <br/>
- <code class="Fn">crypto_getreq</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t
- cses</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_initreq</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>,
- <var class="Fa" style="white-space: nowrap;">crypto_session_t
- cses</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_buf</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_vmpage</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t
- *pages</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_output_buf</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_output_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_output_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crypto_use_output_vmpage</code>(<var class="Fa" style="white-space: nowrap;">struct
- cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t
- *pages</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int offset</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each symmetric cryptographic operation in the kernel is described
- by an instance of <var class="Vt">struct cryptop</var> and is associated
- with an active session.</p>
-<p class="Pp" id="crypto_getreq">Requests can either be allocated dynamically or
- use caller-supplied storage. Dynamically allocated requests should be
- allocated by either
- <a class="permalink" href="#crypto_getreq"><code class="Fn">crypto_getreq</code></a>()
- or <code class="Fn">crypto_clonereq</code>(), and freed by
- <code class="Fn">crypto_freereq</code>() once the request has completed.
- Requests using caller-supplied storage should be initialized by
- <code class="Fn">crypto_initreq</code>() at the start of each operation and
- destroyed by <code class="Fn">crypto_destroyreq</code>() once the request
- has completed.</p>
-<p class="Pp" id="crypto_clonereq">For
- <a class="permalink" href="#crypto_clonereq"><code class="Fn">crypto_clonereq</code></a>(),
- <code class="Fn">crypto_getreq</code>(), and
- <a class="permalink" href="#crypto_initreq"><code class="Fn" id="crypto_initreq">crypto_initreq</code></a>(),
- <var class="Fa">cses</var> is a reference to an active session. For
- <code class="Fn">crypto_clonereq</code>() and
- <code class="Fn">crypto_getreq</code>(), <var class="Fa">how</var> is passed
- to <a class="Xr">malloc(9)</a> and should be set to either
- <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p>
-<p class="Pp" id="crypto_clonereq~2"><a class="permalink" href="#crypto_clonereq~2"><code class="Fn">crypto_clonereq</code></a>()
- allocates a new request that inherits request inputs such as request buffers
- from the original <var class="Fa">crp</var> request. However, the new
- request is associated with the <var class="Fa">cses</var> session rather
- than inheriting the session from <var class="Fa">crp</var>.
- <var class="Fa">crp</var> must not be a completed request.</p>
-<p class="Pp">Once a request has been initialized, the caller should set fields
- in the structure to describe request-specific parameters. Unused fields
- should be left as-is.</p>
-<p class="Pp" id="crypto_dispatch">The
- <a class="permalink" href="#crypto_dispatch"><code class="Fn">crypto_dispatch</code></a>(),
- <code class="Fn">crypto_dispatch_async</code>(), and
- <code class="Fn">crypto_dispatch_batch</code>() functions pass one or more
- crypto requests to the driver attached to the request's session. If there
- are errors in the request's fields, these functions may return an error to
- the caller. If errors are encountered while servicing the request, they will
- instead be reported to the request's callback function
- (<var class="Fa">crp_callback</var>) via
- <var class="Fa">crp_etype</var>.</p>
-<p class="Pp" id="crypto_dispatch~2">Note that a request's callback function may
- be invoked before
- <a class="permalink" href="#crypto_dispatch~2"><code class="Fn">crypto_dispatch</code></a>()
- returns.</p>
-<p class="Pp" id="crypto_destroyreq">Once a request has signaled completion by
- invoking its callback function, it should be freed via
- <a class="permalink" href="#crypto_destroyreq"><code class="Fn">crypto_destroyreq</code></a>()
- or
- <a class="permalink" href="#crypto_freereq"><code class="Fn" id="crypto_freereq">crypto_freereq</code></a>().</p>
-<p class="Pp">Cryptographic operations include several fields to describe the
- request.</p>
-<section class="Ss">
-<h2 class="Ss" id="Request_Buffers"><a class="permalink" href="#Request_Buffers">Request
- Buffers</a></h2>
-<p class="Pp">Requests can either specify a single data buffer that is modified
- in place (<var class="Fa">crp_buf</var>) or separate input
- (<var class="Fa">crp_buf</var>) and output (<var class="Fa">crp_obuf</var>)
- buffers. Note that separate input and output buffers are not supported for
- compression mode requests.</p>
-<p class="Pp">All requests must have a valid <var class="Fa">crp_buf</var>
- initialized by one of the following functions:</p>
-<dl class="Bl-tag">
- <dt id="crypto_use_buf"><a class="permalink" href="#crypto_use_buf"><code class="Fn">crypto_use_buf</code></a>()</dt>
- <dd>Uses an array of <var class="Fa">len</var> bytes pointed to by
- <var class="Fa">buf</var> as the data buffer.</dd>
- <dt id="crypto_use_mbuf"><a class="permalink" href="#crypto_use_mbuf"><code class="Fn">crypto_use_mbuf</code></a>()</dt>
- <dd>Uses the network memory buffer <var class="Fa">m</var> as the data
- buffer.</dd>
- <dt id="crypto_use_uio"><a class="permalink" href="#crypto_use_uio"><code class="Fn">crypto_use_uio</code></a>()</dt>
- <dd>Uses the scatter/gather list <var class="Fa">uio</var> as the data
- buffer.</dd>
- <dt id="crypto_use_vmpage"><a class="permalink" href="#crypto_use_vmpage"><code class="Fn">crypto_use_vmpage</code></a>()</dt>
- <dd>Uses the array of <var class="Vt">vm_page_t</var> structures as the data
- buffer.</dd>
-</dl>
-<p class="Pp">One of the following functions should be used to initialize
- <var class="Fa">crp_obuf</var> for requests that use separate input and
- output buffers:</p>
-<dl class="Bl-tag">
- <dt id="crypto_use_output_buf"><a class="permalink" href="#crypto_use_output_buf"><code class="Fn">crypto_use_output_buf</code></a>()</dt>
- <dd>Uses an array of <var class="Fa">len</var> bytes pointed to by
- <var class="Fa">buf</var> as the output buffer.</dd>
- <dt id="crypto_use_output_mbuf"><a class="permalink" href="#crypto_use_output_mbuf"><code class="Fn">crypto_use_output_mbuf</code></a>()</dt>
- <dd>Uses the network memory buffer <var class="Fa">m</var> as the output
- buffer.</dd>
- <dt id="crypto_use_output_uio"><a class="permalink" href="#crypto_use_output_uio"><code class="Fn">crypto_use_output_uio</code></a>()</dt>
- <dd>Uses the scatter/gather list <var class="Fa">uio</var> as the output
- buffer.</dd>
- <dt id="crypto_use_output_vmpage"><a class="permalink" href="#crypto_use_output_vmpage"><code class="Fn">crypto_use_output_vmpage</code></a>()</dt>
- <dd>Uses the array of <var class="Vt">vm_page_t</var> structures as the output
- buffer.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_Regions"><a class="permalink" href="#Request_Regions">Request
- Regions</a></h2>
-<p class="Pp">Each request describes one or more regions in the data buffers.
- Each region is described by an offset relative to the start of a data buffer
- and a length. The length of some regions is the same for all requests
- belonging to a session. Those lengths are set in the session parameters of
- the associated session. All requests must define a payload region. Other
- regions are only required for specific session modes.</p>
-<p class="Pp">For requests with separate input and output data buffers, the AAD,
- IV, and payload regions are always defined as regions in the input buffer,
- and a separate payload output region is defined to hold the output of
- encryption or decryption in the output buffer. The digest region describes a
- region in the input data buffer for requests that verify an existing digest.
- For requests that compute a digest, the digest region describes a region in
- the output data buffer. Note that the only data written to the output buffer
- is the encryption or decryption result and any computed digest. AAD and IV
- regions are not copied from the input buffer into the output buffer but are
- only used as inputs.</p>
-<p class="Pp">The following regions are defined:</p>
-<table class="Bl-column">
- <tr id="Region">
- <td><a class="permalink" href="#Region"><b class="Sy">Region</b></a></td>
- <td><a class="permalink" href="#Buffer"><b class="Sy" id="Buffer">Buffer</b></a></td>
- <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td>
- </tr>
- <tr>
- <td>AAD</td>
- <td>Input</td>
- <td>Embedded Additional Authenticated Data</td>
- </tr>
- <tr>
- <td>IV</td>
- <td>Input</td>
- <td>Embedded IV or nonce</td>
- </tr>
- <tr>
- <td>Payload</td>
- <td>Input</td>
- <td>Data to encrypt, decrypt, compress, or decompress</td>
- </tr>
- <tr>
- <td>Payload Output</td>
- <td>Output</td>
- <td>Encrypted or decrypted data</td>
- </tr>
- <tr>
- <td>Digest</td>
- <td>Input/Output</td>
- <td>Authentication digest, hash, or tag</td>
- </tr>
-</table>
-<table class="Bl-column">
- <tr id="Region~2">
- <td><a class="permalink" href="#Region~2"><b class="Sy">Region</b></a></td>
- <td><a class="permalink" href="#Start"><b class="Sy" id="Start">Start</b></a></td>
- <td><a class="permalink" href="#Length"><b class="Sy" id="Length">Length</b></a></td>
- </tr>
- <tr>
- <td>AAD</td>
- <td><var class="Fa">crp_aad_start</var></td>
- <td><var class="Fa">crp_aad_length</var></td>
- </tr>
- <tr>
- <td>IV</td>
- <td><var class="Fa">crp_iv_start</var></td>
- <td><var class="Fa">csp_ivlen</var></td>
- </tr>
- <tr>
- <td>Payload</td>
- <td><var class="Fa">crp_payload_start</var></td>
- <td><var class="Fa">crp_payload_length</var></td>
- </tr>
- <tr>
- <td>Payload Output</td>
- <td><var class="Fa">crp_payload_output_start</var></td>
- <td><var class="Fa">crp_payload_length</var></td>
- </tr>
- <tr>
- <td>Digest</td>
- <td><var class="Fa">crp_digest_start</var></td>
- <td><var class="Fa">csp_auth_mlen</var></td>
- </tr>
-</table>
-<p class="Pp">Requests are permitted to operate on only a subset of the data
- buffer. For example, requests from IPsec operate on network packets that
- include headers not used as either additional authentication data (AAD) or
- payload data.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_Operations"><a class="permalink" href="#Request_Operations">Request
- Operations</a></h2>
-<p class="Pp">All requests must specify the type of operation to perform in
- <var class="Fa">crp_op</var>. Available operations depend on the session's
- mode.</p>
-<p class="Pp">Compression requests support the following operations:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_OP_COMPRESS"><a class="permalink" href="#CRYPTO_OP_COMPRESS"><code class="Dv">CRYPTO_OP_COMPRESS</code></a></dt>
- <dd>Compress the data in the payload region of the data buffer.</dd>
- <dt id="CRYPTO_OP_DECOMPRESS"><a class="permalink" href="#CRYPTO_OP_DECOMPRESS"><code class="Dv">CRYPTO_OP_DECOMPRESS</code></a></dt>
- <dd>Decompress the data in the payload region of the data buffer.</dd>
-</dl>
-<p class="Pp">Cipher requests support the following operations:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_OP_ENCRYPT"><a class="permalink" href="#CRYPTO_OP_ENCRYPT"><code class="Dv">CRYPTO_OP_ENCRYPT</code></a></dt>
- <dd>Encrypt the data in the payload region of the data buffer.</dd>
- <dt id="CRYPTO_OP_DECRYPT"><a class="permalink" href="#CRYPTO_OP_DECRYPT"><code class="Dv">CRYPTO_OP_DECRYPT</code></a></dt>
- <dd>Decrypt the data in the payload region of the data buffer.</dd>
-</dl>
-<p class="Pp">Digest requests support the following operations:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_OP_COMPUTE_DIGEST"><a class="permalink" href="#CRYPTO_OP_COMPUTE_DIGEST"><code class="Dv">CRYPTO_OP_COMPUTE_DIGEST</code></a></dt>
- <dd>Calculate a digest over the payload region of the data buffer and store
- the result in the digest region.</dd>
- <dt id="CRYPTO_OP_VERIFY_DIGEST"><a class="permalink" href="#CRYPTO_OP_VERIFY_DIGEST"><code class="Dv">CRYPTO_OP_VERIFY_DIGEST</code></a></dt>
- <dd>Calculate a digest over the payload region of the data buffer. Compare the
- calculated digest to the existing digest from the digest region. If the
- digests match, complete the request successfully. If the digests do not
- match, fail the request with <code class="Er">EBADMSG</code>.</dd>
-</dl>
-<p class="Pp">AEAD and Encrypt-then-Authenticate requests support the following
- operations:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTO_OP_ENCRYPT~2"><a class="permalink" href="#CRYPTO_OP_ENCRYPT~2"><code class="Dv">CRYPTO_OP_ENCRYPT</code></a>
- |
- <a class="permalink" href="#CRYPTO_OP_COMPUTE_DIGEST~2"><code class="Dv" id="CRYPTO_OP_COMPUTE_DIGEST~2">CRYPTO_OP_COMPUTE_DIGEST</code></a></dt>
- <dd>Encrypt the data in the payload region of the data buffer. Calculate a
- digest over the AAD and payload regions and store the result in the data
- buffer.</dd>
- <dt id="CRYPTO_OP_DECRYPT~2"><a class="permalink" href="#CRYPTO_OP_DECRYPT~2"><code class="Dv">CRYPTO_OP_DECRYPT</code></a>
- |
- <a class="permalink" href="#CRYPTO_OP_VERIFY_DIGEST~2"><code class="Dv" id="CRYPTO_OP_VERIFY_DIGEST~2">CRYPTO_OP_VERIFY_DIGEST</code></a></dt>
- <dd>Calculate a digest over the AAD and payload regions of the data buffer.
- Compare the calculated digest to the existing digest from the digest
- region. If the digests match, decrypt the payload region. If the digests
- do not match, fail the request with <code class="Er">EBADMSG</code>.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_AAD"><a class="permalink" href="#Request_AAD">Request
- AAD</a></h2>
-<p class="Pp">AEAD and Encrypt-then-Authenticate requests may optionally include
- Additional Authenticated Data. AAD may either be supplied in the AAD region
- of the input buffer or as a single buffer pointed to by
- <var class="Fa">crp_aad</var>. In either case,
- <var class="Fa">crp_aad_length</var> always indicates the amount of AAD in
- bytes.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_ESN"><a class="permalink" href="#Request_ESN">Request
- ESN</a></h2>
-<p class="Pp">IPsec requests may optionally include Extended Sequence Numbers
- (ESN). ESN may either be supplied in <var class="Fa">crp_esn</var> or as
- part of the AAD pointed to by <var class="Fa">crp_aad</var>.</p>
-<p class="Pp">If the ESN is stored in <var class="Fa">crp_esn</var>,
- <code class="Dv">CSP_F_ESN</code> should be set in
- <var class="Fa">csp_flags</var>. This use case is dedicated for encrypt and
- authenticate mode, since the high-order 32 bits of the sequence number are
- appended after the Next Header (RFC 4303).</p>
-<p class="Pp">AEAD modes supply the ESN in a separate AAD buffer (see e.g. RFC
- 4106, Chapter 5 AAD Construction).</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_IV_and/or_Nonce"><a class="permalink" href="#Request_IV_and/or_Nonce">Request
- IV and/or Nonce</a></h2>
-<p class="Pp">Some cryptographic operations require an IV or nonce as an input.
- An IV may be stored either in the IV region of the data buffer or in
- <var class="Fa">crp_iv</var>. By default, the IV is assumed to be stored in
- the IV region. If the IV is stored in <var class="Fa">crp_iv</var>,
- <code class="Dv">CRYPTO_F_IV_SEPARATE</code> should be set in
- <var class="Fa">crp_flags</var> and <var class="Fa">crp_iv_start</var>
- should be left as zero.</p>
-<p class="Pp">Requests that store part, but not all, of the IV in the data
- buffer should store the partial IV in the data buffer and pass the full IV
- separately in <var class="Fa">crp_iv</var>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Request_and_Callback_Scheduling"><a class="permalink" href="#Request_and_Callback_Scheduling">Request
- and Callback Scheduling</a></h2>
-<p class="Pp">The crypto framework provides multiple methods of scheduling the
- dispatch of requests to drivers along with the processing of driver
- callbacks. The
- <a class="permalink" href="#crypto_dispatch~3"><code class="Fn" id="crypto_dispatch~3">crypto_dispatch</code></a>(),
- <code class="Fn">crypto_dispatch_async</code>(), and
- <code class="Fn">crypto_dispatch_batch</code>() functions can be used to
- request different dispatch scheduling policies.</p>
-<p class="Pp" id="crypto_dispatch~4"><a class="permalink" href="#crypto_dispatch~4"><code class="Fn">crypto_dispatch</code></a>()
- synchronously passes the request to the driver. The driver itself may
- process the request synchronously or asynchronously depending on whether the
- driver is implemented by software or hardware.</p>
-<p class="Pp" id="crypto_dispatch_async"><a class="permalink" href="#crypto_dispatch_async"><code class="Fn">crypto_dispatch_async</code></a>()
- dispatches the request asynchronously. If the driver is inherently
- synchronous, the request is queued to a taskqueue backed by a pool of worker
- threads. This can increase throughput by allowing requests from a single
- producer to be processed in parallel. By default the pool is sized to
- provide one thread for each CPU. Worker threads dequeue requests and pass
- them to the driver asynchronously.
- <code class="Fn">crypto_dispatch_async</code>() additionally takes a
- <var class="Va">flags</var> parameter. The
- <code class="Dv">CRYPTO_ASYNC_ORDERED</code> flag indicates that completion
- callbacks for requests must be called in the same order as requests were
- dispatched. If the driver is asynchronous, the behavior of
- <code class="Fn">crypto_dispatch_async</code>() is identical to that of
- <code class="Fn">crypto_dispatch</code>().</p>
-<p class="Pp" id="crypto_dispatch_batch"><a class="permalink" href="#crypto_dispatch_batch"><code class="Fn">crypto_dispatch_batch</code></a>()
- allows the caller to collect a batch of requests and submit them to the
- driver at the same time. This allows hardware drivers to optimize the
- scheduling of request processing and batch completion interrupts. A batch is
- submitted to the driver by invoking the driver's process method on each
- request, specifying <code class="Dv">CRYPTO_HINT_MORE</code> with each
- request except for the last. The <var class="Fa">flags</var> parameter to
- <code class="Fn">crypto_dispatch_batch</code>() is currently ignored.</p>
-<p class="Pp" id="crypto_done">Callback function scheduling is simpler than
- request scheduling. Callbacks can either be invoked synchronously from
- <a class="permalink" href="#crypto_done"><code class="Fn">crypto_done</code></a>(),
- or they can be queued to a pool of worker threads. This pool of worker
- threads is also sized to provide one worker thread for each CPU by default.
- Note that a callback function invoked synchronously from
- <code class="Fn">crypto_done</code>() must follow the same restrictions
- placed on threaded interrupt handlers.</p>
-<p class="Pp" id="crypto_done~2">By default, callbacks are invoked
- asynchronously by a worker thread. If <code class="Dv">CRYPTO_F_CBIMM</code>
- is set, the callback is always invoked synchronously from
- <a class="permalink" href="#crypto_done~2"><code class="Fn">crypto_done</code></a>().
- If <code class="Dv">CRYPTO_F_CBIFSYNC</code> is set, the callback is invoked
- synchronously if the request was processed by a software driver or
- asynchronously if the request was processed by a hardware driver.</p>
-<p class="Pp">If a request was scheduled to the taskqueue with
- <code class="Dv">CRYPTO_ASYNC_ORDERED</code>, callbacks are always invoked
- asynchronously ignoring <code class="Dv">CRYPTO_F_CBIMM</code> and
- <code class="Dv">CRYPTO_F_CBIFSYNC</code>. This flag is used by IPsec to
- ensure that decrypted network packets are passed up the network stack in
- roughly the same order they were received.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Other_Request_Fields"><a class="permalink" href="#Other_Request_Fields">Other
- Request Fields</a></h2>
-<p class="Pp">In addition to the fields and flags enumerated above,
- <var class="Vt">struct cryptop</var> includes the following:</p>
-<dl class="Bl-tag">
- <dt id="crypto_getreq~2"><var class="Fa">crp_session</var></dt>
- <dd>A reference to the active session. This is set when the request is created
- by
- <a class="permalink" href="#crypto_getreq~2"><code class="Fn">crypto_getreq</code></a>()
- and should not be modified. Drivers can use this to fetch driver-specific
- session state or session parameters.</dd>
- <dt><var class="Fa">crp_etype</var></dt>
- <dd>Error status. Either zero on success, or an error if a request fails. Set
- by drivers prior to completing a request via
- <code class="Fn">crypto_done</code>().</dd>
- <dt><var class="Fa">crp_flags</var></dt>
- <dd>A bitmask of flags.</dd>
- <dt><var class="Fa">crp_cipher_key</var></dt>
- <dd>Pointer to a request-specific encryption key. If this value is not set,
- the request uses the session encryption key.</dd>
- <dt><var class="Fa">crp_auth_key</var></dt>
- <dd>Pointer to a request-specific authentication key. If this value is not
- set, the request uses the session authentication key.</dd>
- <dt><var class="Fa">crp_opaque</var></dt>
- <dd>An opaque pointer. This pointer permits users of the cryptographic
- framework to store information about a request to be used in the
- callback.</dd>
- <dt><var class="Fa">crp_callback</var></dt>
- <dd>Callback function. This must point to a callback function of type
- <var class="Vt">void (*)(struct cryptop *)</var>. The callback function
- should inspect <var class="Fa">crp_etype</var> to determine the status of
- the completed operation. It should also arrange for the request to be
- freed via <code class="Fn">crypto_freereq</code>().</dd>
- <dt><var class="Fa">crp_olen</var></dt>
- <dd>Used with compression and decompression requests to describe the updated
- length of the payload region in the data buffer.
- <p class="Pp">If a compression request increases the size of the payload,
- then the data buffer is unmodified, the request completes successfully,
- and <var class="Fa">crp_olen</var> is set to the size the compressed
- data would have used. Callers can compare this to the payload region
- length to determine if the compressed data was discarded.</p>
- </dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">crypto_dispatch</code>() returns an error if the
- request contained invalid fields, or zero if the request was valid.
- <code class="Fn">crypto_getreq</code>() returns a pointer to a new request
- structure on success, or <code class="Dv">NULL</code> on failure.
- <code class="Dv">NULL</code> can only be returned if
- <code class="Dv">M_NOWAIT</code> was passed in
- <var class="Fa">how</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ipsec(4)</a>, <a class="Xr">crypto(7)</a>,
- <a class="Xr">crypto(9)</a>, <a class="Xr">crypto_session(9)</a>,
- <a class="Xr">mbuf(9)</a>, <a class="Xr">uio(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Not all drivers properly handle mixing session and per-request
- keys within a single session. Consumers should either use a single key for a
- session specified in the session parameters or always use per-request
- keys.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 8, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/crypto_session.9 3.html b/static/freebsd/man9/crypto_session.9 3.html
deleted file mode 100644
index dab25818..00000000
--- a/static/freebsd/man9/crypto_session.9 3.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">CRYPTO_SESSION(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">CRYPTO_SESSION(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">crypto_session</code> &#x2014;
- <span class="Nd">state used for symmetric cryptographic services</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">opencrypto/cryptodev.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct auth_hash *</var>
- <br/>
- <code class="Fn">crypto_auth_hash</code>(<var class="Fa" style="white-space: nowrap;">const
- struct crypto_session_params *csp</var>);</p>
-<p class="Pp"><var class="Ft">struct enc_xform *</var>
- <br/>
- <code class="Fn">crypto_cipher</code>(<var class="Fa" style="white-space: nowrap;">const
- struct crypto_session_params *csp</var>);</p>
-<p class="Pp"><var class="Ft">const struct crypto_session_params *</var>
- <br/>
- <code class="Fn">crypto_get_params</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t
- cses</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_newsession</code>(<var class="Fa">crypto_session_t
- *cses</var>, <var class="Fa">const struct crypto_session_params *csp</var>,
- <var class="Fa">int crid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">crypto_freesession</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t
- cses</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Symmetric cryptographic operations in the kernel are associated
- with cryptographic sessions. Sessions hold state shared across multiple
- requests. Active sessions are associated with a single cryptographic
- driver.</p>
-<p class="Pp">The <var class="Vt">crypto_session_t</var> type represents an
- opaque reference to an active session. Session objects are allocated and
- managed by the cryptographic framework.</p>
-<p class="Pp" id="crypto_newsession">New sessions are created by
- <a class="permalink" href="#crypto_newsession"><code class="Fn">crypto_newsession</code></a>().
- <var class="Fa">csp</var> describes various parameters associated with the
- new session such as the algorithms to use and any session-wide keys.
- <var class="Fa">crid</var> can be used to request either a specific
- cryptographic driver or classes of drivers. For the latter case,
- <var class="Fa">crid</var> should be set to a mask of the following
- values:</p>
-<dl class="Bl-tag">
- <dt id="CRYPTOCAP_F_HARDWARE"><a class="permalink" href="#CRYPTOCAP_F_HARDWARE"><code class="Dv">CRYPTOCAP_F_HARDWARE</code></a></dt>
- <dd>Request hardware drivers. Hardware drivers do not use the host CPU to
- perform operations. Typically, a separate co-processor performs the
- operations asynchronously.</dd>
- <dt id="CRYPTOCAP_F_SOFTWARE"><a class="permalink" href="#CRYPTOCAP_F_SOFTWARE"><code class="Dv">CRYPTOCAP_F_SOFTWARE</code></a></dt>
- <dd>Request software drivers. Software drivers use the host CPU to perform
- operations. The kernel includes a simple, yet portable implementation of
- each supported algorithm in the <a class="Xr">cryptosoft(4)</a> driver.
- Additional software drivers may also be available on architectures which
- provide instructions designed to accelerate cryptographic operations.</dd>
-</dl>
-<p class="Pp">If both hardware and software drivers are requested, hardware
- drivers are preferred over software drivers. Accelerated software drivers
- are preferred over the baseline software driver. If multiple hardware
- drivers are available, the framework will distribute sessions across these
- drivers in a round-robin fashion.</p>
-<p class="Pp" id="crypto_newsession~2">On success,
- <a class="permalink" href="#crypto_newsession~2"><code class="Fn">crypto_newsession</code></a>()
- saves a reference to the newly created session in
- <var class="Fa">cses</var>.</p>
-<p class="Pp" id="crypto_freesession"><a class="permalink" href="#crypto_freesession"><code class="Fn">crypto_freesession</code></a>()
- is used to free the resources associated with the session
- <var class="Fa">cses</var>.</p>
-<p class="Pp" id="crypto_auth_hash"><a class="permalink" href="#crypto_auth_hash"><code class="Fn">crypto_auth_hash</code></a>()
- returns a structure describing the baseline software implementation of an
- authentication algorithm requested by <var class="Fa">csp</var>. If
- <var class="Fa">csp</var> does not specify an authentication algorithm, or
- requests an invalid algorithm, <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="crypto_cipher"><a class="permalink" href="#crypto_cipher"><code class="Fn">crypto_cipher</code></a>()
- returns a structure describing the baseline software implementation of an
- encryption algorithm requested by <var class="Fa">csp</var>. If
- <var class="Fa">csp</var> does not specify an encryption algorithm, or
- requests an invalid algorithm, <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="crypto_get_params"><a class="permalink" href="#crypto_get_params"><code class="Fn">crypto_get_params</code></a>()
- returns a pointer to the session parameters used by
- <var class="Fa">cses</var>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Session_Parameters"><a class="permalink" href="#Session_Parameters">Session
- Parameters</a></h2>
-<p class="Pp">Session parameters are used to describe the cryptographic
- operations performed by cryptographic requests. Parameters are stored in an
- instance of <var class="Vt">struct crypto_session_params</var>. When
- initializing parameters to pass to
- <code class="Fn">crypto_newsession</code>(), the entire structure should
- first be zeroed. Needed fields should then be set leaving unused fields as
- zero. This structure contains the following fields:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">csp_mode</var></dt>
- <dd>Type of operation to perform. This field must be set to one of the
- following:
- <dl class="Bl-tag">
- <dt id="CSP_MODE_COMPRESS"><a class="permalink" href="#CSP_MODE_COMPRESS"><code class="Dv">CSP_MODE_COMPRESS</code></a></dt>
- <dd>Compress or decompress request payload.
- <p class="Pp">The compression algorithm is specified in
- <var class="Fa">csp_cipher_alg</var>.</p>
- </dd>
- <dt id="CSP_MODE_CIPHER"><a class="permalink" href="#CSP_MODE_CIPHER"><code class="Dv">CSP_MODE_CIPHER</code></a></dt>
- <dd>Encrypt or decrypt request payload.
- <p class="Pp">The encryption algorithm is specified in
- <var class="Fa">csp_cipher_alg</var>.</p>
- </dd>
- <dt id="CSP_MODE_DIGEST"><a class="permalink" href="#CSP_MODE_DIGEST"><code class="Dv">CSP_MODE_DIGEST</code></a></dt>
- <dd>Compute or verify a digest, or hash, of request payload.
- <p class="Pp">The authentication algorithm is specified in
- <var class="Fa">csp_auth_alg</var>.</p>
- </dd>
- <dt id="CSP_MODE_AEAD"><a class="permalink" href="#CSP_MODE_AEAD"><code class="Dv">CSP_MODE_AEAD</code></a></dt>
- <dd>Authenticated encryption with additional data. Decryption operations
- require the digest, or tag, and fail if it does not match.
- <p class="Pp">The AEAD algorithm is specified in
- <var class="Fa">csp_cipher_alg</var>.</p>
- </dd>
- <dt id="CSP_MODE_ETA"><a class="permalink" href="#CSP_MODE_ETA"><code class="Dv">CSP_MODE_ETA</code></a></dt>
- <dd>Encrypt-then-Authenticate. In this mode, encryption operations encrypt
- the payload and then compute an authentication digest over the request
- additional authentication data followed by the encrypted payload.
- Decryption operations fail without decrypting the data if the provided
- digest does not match.
- <p class="Pp">The encryption algorithm is specified in
- <var class="Fa">csp_cipher_alg</var> and the authentication
- algorithm is specified in <var class="Fa">csp_auth_alg</var>.</p>
- </dd>
- </dl>
- </dd>
- <dt><var class="Fa">csp_flags</var></dt>
- <dd>A mask of optional driver features. Drivers will only attach to a session
- if they support all of the requested features.
- <dl class="Bl-tag">
- <dt id="CSP_F_SEPARATE_OUTPUT"><a class="permalink" href="#CSP_F_SEPARATE_OUTPUT"><code class="Dv">CSP_F_SEPARATE_OUTPUT</code></a></dt>
- <dd>Support requests that use separate input and output buffers. Sessions
- with this flag set permit requests with either a single buffer that is
- modified in-place, or requests with separate input and output buffers.
- Sessions without this flag only permit requests with a single buffer
- that is modified in-place.</dd>
- <dt id="CSP_F_SEPARATE_AAD"><a class="permalink" href="#CSP_F_SEPARATE_AAD"><code class="Dv">CSP_F_SEPARATE_AAD</code></a></dt>
- <dd>Support requests that use a separate buffer for AAD rather than
- providing AAD as a region in the input buffer. Sessions with this flag
- set permit requests with AAD passed in either in a region of the input
- buffer or in a single, virtually-contiguous buffer. Sessions without
- this flag only permit requests with AAD passed in as a region in the
- input buffer.</dd>
- <dt id="CSP_F_ESN"><a class="permalink" href="#CSP_F_ESN"><code class="Dv">CSP_F_ESN</code></a></dt>
- <dd>Support requests that use a separate buffer for IPsec ESN (Extended
- Sequence Numbers).
- <p class="Pp">Sessions with this flag set permit requests with IPsec ESN
- passed in special buffer. It is required for IPsec ESN support of
- encrypt and authenticate mode where the high-order 32 bits of the
- sequence number are appended after the Next Header (RFC 4303).</p>
- </dd>
- </dl>
- </dd>
- <dt><var class="Fa">csp_ivlen</var></dt>
- <dd>If either the cipher or authentication algorithms require an explicit
- initialization vector (IV) or nonce, this specifies the length in bytes.
- All requests for a session use the same IV length.</dd>
- <dt><var class="Fa">csp_cipher_alg</var></dt>
- <dd>Encryption or compression algorithm.</dd>
- <dt><var class="Fa">csp_cipher_klen</var></dt>
- <dd>Length of encryption or decryption key in bytes. All requests for a
- session use the same key length.</dd>
- <dt><var class="Fa">csp_cipher_key</var></dt>
- <dd>Pointer to encryption or decryption key. If all requests for a session use
- request-specific keys, this field should be left as
- <code class="Dv">NULL</code>. This pointer and associated key must remain
- valid for the duration of the crypto session.</dd>
- <dt><var class="Fa">csp_auth_alg</var></dt>
- <dd>Authentication algorithm.</dd>
- <dt><var class="Fa">csp_auth_klen</var></dt>
- <dd>Length of authentication key in bytes. If the authentication algorithm
- does not use a key, this field should be left as zero.</dd>
- <dt><var class="Fa">csp_auth_key</var></dt>
- <dd>Pointer to the authentication key. If all requests for a session use
- request-specific keys, this field should be left as
- <code class="Dv">NULL</code>. This pointer and associated key must remain
- valid for the duration of the crypto session.</dd>
- <dt><var class="Fa">csp_auth_mlen</var></dt>
- <dd>The length in bytes of the digest. If zero, the full length of the digest
- is used. If non-zero, the first <var class="Fa">csp_auth_mlen</var> bytes
- of the digest are used.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">crypto_newsession</code>() returns a non-zero
- value if an error occurs or zero on success.</p>
-<p class="Pp"><code class="Fn">crypto_auth_hash</code>() and
- <code class="Fn">crypto_cipher</code>() return <code class="Dv">NULL</code>
- if the request is valid or a pointer to a structure on success.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">crypto(7)</a>, <a class="Xr">crypto(9)</a>,
- <a class="Xr">crypto_request(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The current implementation of
- <code class="Nm">crypto_freesession</code> does not provide a way for the
- caller to know that there are no other references to the keys stored in the
- session's associated parameters. This function should probably sleep until
- any in-flight cryptographic operations associated with the session are
- completed.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 22, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/deadfs.9 4.html b/static/freebsd/man9/deadfs.9 4.html
deleted file mode 100644
index c28a1858..00000000
--- a/static/freebsd/man9/deadfs.9 4.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEADFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEADFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">deadfs</code> &#x2014;
- <span class="Nd">pseudo-filesystem to own reclaimed vnodes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">deadfs</code> file system implements
- operations that do not modify any data and instead return indications of
- invalid IO. Its role is to provide a fallback vnode operations vector for
- reclaimed <a class="Xr">vnode(9)</a>'s.</p>
-<p class="Pp">It is a kernel-only pseudo-file system and so cannot be mounted
- from userspace.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">insmntque(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_RECLAIM(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">UNIX System Manager's Manual (SMM) for
- <span class="Ux">4.4BSD</span> described <code class="Nm">deadfs</code> as a
- file system &#x201C;where rejected vnodes go to die&#x201D;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">deadfs</code> manual page was written by
- <span class="An">Mateusz Piotrowski</span>
- &lt;<a class="Mt" href="mailto:0mp@FreeBSD.org">0mp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 24, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/dev_clone.9 4.html b/static/freebsd/man9/dev_clone.9 4.html
deleted file mode 100644
index f978b0e0..00000000
--- a/static/freebsd/man9/dev_clone.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEV_CLONE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEV_CLONE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">dev_clone</code>,
- <code class="Nm">drain_dev_clone_events</code> &#x2014;
- <span class="Nd">eventhandler for name-based device cloning in
- devfs</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">clone_handler</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cr</var>, <var class="Fa" style="white-space: nowrap;">char *name</var>,
- <var class="Fa" style="white-space: nowrap;">int namelen</var>,
- <var class="Fa" style="white-space: nowrap;">struct cdev **dev</var>);</p>
-<div class="Bd Pp Li">
-<pre>EVENTHANDLER_REGISTER(dev_clone, clone_handler, arg, priority);</pre>
-</div>
-<br/>
-<var class="Ft">void</var>
-<br/>
-<code class="Fn">drain_dev_clone_events</code>();
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">A device driver may register a listener that will be notified each
- time a name lookup on the <a class="Xr">devfs(4)</a> mount point fails to
- find the vnode. A listener shall be registered for the
- <var class="Va">dev_clone</var> event. When called, it is supplied with the
- first argument <var class="Va">arg</var> that was specified at handler
- registration time, appropriate credentials <var class="Va">cr</var>, and a
- name <var class="Va">name</var> of length <var class="Va">namelen</var> that
- we look for. If the handler decides that the name is appropriate and wants
- to create the device that will be associated with the name, it should return
- it to devfs in the <var class="Va">dev</var> argument.</p>
-<p class="Pp" id="drain_dev_clone_events">The
- <a class="permalink" href="#drain_dev_clone_events"><code class="Fn">drain_dev_clone_events</code></a>()
- function is a barrier. It is guaranteed that all calls to eventhandlers for
- <code class="Nm">dev_clone</code> that were started before
- <code class="Fn">drain_dev_clone_events</code>() call, are finished before
- it returns control.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">namei(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 3, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/dev_refthread.9 3.html b/static/freebsd/man9/dev_refthread.9 3.html
deleted file mode 100644
index 9ca70fac..00000000
--- a/static/freebsd/man9/dev_refthread.9 3.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEV_REFTHREAD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEV_REFTHREAD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">dev_refthread</code>,
- <code class="Nm">devvn_refthread</code>,
- <code class="Nm">dev_relthread</code> &#x2014; <span class="Nd">safely
- access device methods</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct cdevsw *</var>
- <br/>
- <code class="Fn">dev_refthread</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">int
- *ref</var>);</p>
-<p class="Pp"><var class="Ft">struct cdevsw *</var>
- <br/>
- <code class="Fn">devvn_refthread</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct cdev
- **devp</var>, <var class="Fa" style="white-space: nowrap;">int
- *ref</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">dev_relthread</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">int
- ref</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#dev_refthread"><code class="Fn" id="dev_refthread">dev_refthread</code></a>()
- (or <code class="Fn">devvn_refthread</code>()) and
- <code class="Fn">dev_relthread</code>() routines provide a safe way to
- access <a class="Xr">devfs(4)</a> devices that may be concurrently destroyed
- by
- <a class="permalink" href="#destroy_dev"><code class="Fn" id="destroy_dev">destroy_dev</code></a>()
- (e.g., removable media).</p>
-<p class="Pp" id="dev_refthread~2">If successful,
- <a class="permalink" href="#dev_refthread~2"><code class="Fn">dev_refthread</code></a>()
- and <code class="Fn">devvn_refthread</code>() acquire a &quot;thread
- reference&quot; to the associated <var class="Vt">struct cdev</var> and
- return a non-NULL pointer to the cdev's <var class="Vt">struct cdevsw</var>
- method table. For the duration of that reference, the cdev's associated
- private data and method table object are valid. Destruction of the cdev
- sleeps until the thread reference is released.</p>
-<p class="Pp" id="dev_refthread~3">A reference cannot prevent media removal. It
- is an implementation detail of individual drivers how method calls from
- callers with
- <a class="permalink" href="#dev_refthread~3"><code class="Fn">dev_refthread</code></a>()
- references are handled when the device is pending destruction. A common
- behavior for disk devices is to return the <code class="Er">ENXIO</code>
- status, but that is not required by this KPI.</p>
-<p class="Pp" id="devvn_refthread">The
- <a class="permalink" href="#devvn_refthread"><code class="Fn">devvn_refthread</code></a>()
- variant of <code class="Fn">dev_refthread</code>() extracts the
- <var class="Vt">struct cdev</var> pointer out of the
- <code class="Dv">VCHR</code> <a class="Xr">vnode(9)</a> automatically before
- performing the same actions as <code class="Fn">dev_refthread</code>().
- Additionally, a pointer to the <var class="Vt">struct cdev</var> is returned
- to the caller via <var class="Fa">*devp</var>.
- <code class="Fn">devvn_refthread</code>() correctly handles possible
- parallel reclamation of the vnode.</p>
-<p class="Pp" id="dev_relthread"><a class="permalink" href="#dev_relthread"><code class="Fn">dev_relthread</code></a>()
- is used to release a reference to a <var class="Vt">struct cdev</var>.
- <code class="Fn">dev_relthread</code>()
- <a class="permalink" href="#must"><b class="Sy" id="must">must</b></a> only
- be invoked when the associated invocation of
- <code class="Fn">dev_refthread</code>() or
- <code class="Fn">devvn_refthread</code>() returned a non-NULL
- <var class="Vt">struct cdevsw *</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1>
-<p class="Pp"><var class="Vt">struct cdev</var> objects have two reference
- counts, <var class="Va">si_refcount</var> and
- <var class="Va">si_threadcount</var>. The
- <code class="Fn">dev_refthread</code>(),
- <code class="Fn">devvn_refthread</code>(), and
- <code class="Fn">dev_relthread</code>() functions manipulate the
- <var class="Va">si_threadcount</var>. The
- <var class="Va">si_threadcount</var> reference guarantees the liveness of
- the <var class="Vt">struct cdev</var> object. The other
- <var class="Va">si_refcount</var> reference provides only the weaker
- guarantee that the memory backing the <var class="Vt">struct cdev</var> has
- not been freed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If <code class="Fn">dev_refthread</code>() or
- <code class="Fn">devvn_refthread</code>() are unsuccessful, they return
- <code class="Dv">NULL</code>.</p>
-<div class="Bf Em">If these routines are unsuccessful, they do not increment the
- <var class="Vt">struct cdev</var> <var class="Va">si_threadcount</var> and do
- not initialize the value pointed to by the <var class="Fa">*ref</var>
- parameter in any way.</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">destroy_dev(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">Do not invoke <code class="Fn">dev_relthread</code>() unless the
- matching refthread routine succeeded!</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 29, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass.9 4.html b/static/freebsd/man9/devclass.9 4.html
deleted file mode 100644
index 499a6ffc..00000000
--- a/static/freebsd/man9/devclass.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass</code> &#x2014; <span class="Nd">object
- representing a class of devices</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Vt">typedef struct devclass *devclass_t</var>;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <var class="Vt">devclass</var> object has two main functions
- in the system. The first is to manage the allocation of unit numbers for
- device instances and the second is to hold the list of device drivers for a
- particular bus type. Each <var class="Vt">devclass</var> has a name and
- there cannot be two devclasses with the same name. This ensures that unique
- unit numbers are allocated to device instances. All instances with the same
- name are treated as being the same.</p>
-<p class="Pp">When no specific unit number is needed,
- <var class="Vt">DEVICE_UNIT_ANY</var> is used.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass_add_driver(9)</a>,
- <a class="Xr">devclass_delete_driver(9)</a>,
- <a class="Xr">devclass_find(9)</a>,
- <a class="Xr">devclass_find_driver(9)</a>,
- <a class="Xr">devclass_get_device(9)</a>,
- <a class="Xr">devclass_get_devices(9)</a>,
- <a class="Xr">devclass_get_maxunit(9)</a>,
- <a class="Xr">devclass_get_name(9)</a>,
- <a class="Xr">devclass_get_softc(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_find.9 4.html b/static/freebsd/man9/devclass_find.9 4.html
deleted file mode 100644
index 79af0683..00000000
--- a/static/freebsd/man9/devclass_find.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_FIND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_FIND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_find</code> &#x2014;
- <span class="Nd">search for a devclass</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">devclass_t</var>
- <br/>
- <code class="Fn">devclass_find</code>(<var class="Fa" style="white-space: nowrap;">const
- char *classname</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Search for the <var class="Vt">devclass</var> with the specified
- name.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the <var class="Vt">devclass</var> exists, it is returned,
- otherwise <code class="Dv">NULL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_count.9 4.html b/static/freebsd/man9/devclass_get_count.9 4.html
deleted file mode 100644
index 44df7de9..00000000
--- a/static/freebsd/man9/devclass_get_count.9 4.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_COUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_COUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_count</code> &#x2014;
- <span class="Nd">get the number of devices in a devclass</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devclass_get_count</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Returns the number of device instances in the specified
- <var class="Vt">devclass</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nate
- Lawson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 5, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_device.9 4.html b/static/freebsd/man9/devclass_get_device.9 4.html
deleted file mode 100644
index f788b688..00000000
--- a/static/freebsd/man9/devclass_get_device.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_DEVICE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_DEVICE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_device</code> &#x2014;
- <span class="Nd">translate unit number to device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">devclass_get_device</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function retrieves the device instance with the given unit
- number and returns it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the device exists, it is returned, otherwise NULL is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_devices.9 4.html b/static/freebsd/man9/devclass_get_devices.9 4.html
deleted file mode 100644
index 41814f66..00000000
--- a/static/freebsd/man9/devclass_get_devices.9 4.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_DEVICES(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_DEVICES(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_devices</code> &#x2014;
- <span class="Nd">get a list of devices in a devclass</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devclass_get_devices</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>, <var class="Fa" style="white-space: nowrap;">device_t
- **devlistp</var>, <var class="Fa" style="white-space: nowrap;">int
- *devcountp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Retrieve a list of all device instances currently in the devclass
- and return the list in <var class="Fa">*devlistp</var> and the count in
- <var class="Fa">*devcountp</var>. The memory allocated for the list should
- be freed using
- <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*devlistp</var>,
- <var class="Fa">M_TEMP</var>), even if <var class="Fa">*devcountp</var> is
- 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 19, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_drivers.9 4.html b/static/freebsd/man9/devclass_get_drivers.9 4.html
deleted file mode 100644
index 9a741184..00000000
--- a/static/freebsd/man9/devclass_get_drivers.9 4.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_DRIVERS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_DRIVERS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_drivers</code> &#x2014;
- <span class="Nd">get a list of drivers in a devclass</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devclass_get_drivers</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>, <var class="Fa" style="white-space: nowrap;">driver_t
- ***listp</var>, <var class="Fa" style="white-space: nowrap;">int
- *countp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Retrieve a list of pointers to all driver instances currently in
- the devclass and return the list in <var class="Fa">*listp</var> and the
- number of drivers in the list in <var class="Fa">*countp</var>. The memory
- allocated for the list should be freed using
- <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*listp</var>,
- <var class="Fa">M_TEMP</var>), even if <var class="Fa">*countp</var> is
- 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nate
- Lawson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 19, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_maxunit.9 4.html b/static/freebsd/man9/devclass_get_maxunit.9 4.html
deleted file mode 100644
index 7e43b64a..00000000
--- a/static/freebsd/man9/devclass_get_maxunit.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_MAXUNIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_MAXUNIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_maxunit</code> &#x2014;
- <span class="Nd">find the maximum unit number in the class</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devclass_get_maxunit</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Returns the next unit number to be allocated to device instances
- in the <code class="Dv">devclass</code>. This is one greater than the
- highest currently allocated unit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">devclass_get_maxunit</code>() function
- returns -1 if <var class="Fa">dc</var> is <code class="Dv">NULL</code>,
- otherwise it returns the next unit number in <var class="Fa">dc's</var>
- devclass.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">None.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The name is confusing since it is one greater than the maximum
- unit.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 10, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_name.9 4.html b/static/freebsd/man9/devclass_get_name.9 4.html
deleted file mode 100644
index 5b16d87f..00000000
--- a/static/freebsd/man9/devclass_get_name.9 4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_NAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_NAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_name</code> &#x2014;
- <span class="Nd">access the name of a devclass</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">devclass_get_name</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Return the name of a devclass.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devclass_get_softc.9 4.html b/static/freebsd/man9/devclass_get_softc.9 4.html
deleted file mode 100644
index 16f2e427..00000000
--- a/static/freebsd/man9/devclass_get_softc.9 4.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCLASS_GET_SOFTC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCLASS_GET_SOFTC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devclass_get_softc</code> &#x2014;
- <span class="Nd">translate unit number to driver private
- structure</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">devclass_get_softc</code>(<var class="Fa" style="white-space: nowrap;">devclass_t
- dc</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function retrieves the driver private instance variables for
- the device with the given unit number and returns it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the device exists, its driver-private variables are returned,
- otherwise NULL is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devctl_notify.9 4.html b/static/freebsd/man9/devctl_notify.9 4.html
deleted file mode 100644
index 71ee56ba..00000000
--- a/static/freebsd/man9/devctl_notify.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCTL_NOTIFY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCTL_NOTIFY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devctl_notify</code> &#x2014;
- <span class="Nd">Send a message, via devctl, to userland</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/devctl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devctl_notify</code>(<var class="Fa" style="white-space: nowrap;">const
- char *system</var>, <var class="Fa" style="white-space: nowrap;">const char
- *subsystem</var>, <var class="Fa" style="white-space: nowrap;">const char
- *type</var>, <var class="Fa" style="white-space: nowrap;">const char
- *data</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Send a notification to user land via <a class="Xr">devctl(4)</a>.
- See <a class="Xr">devctl(4)</a> for the format of these messages.</p>
-<p class="Pp">The <code class="Nm">devctl_notify</code> function creates a
- string using the following template:</p>
-<div class="Bd Pp Li">
-<pre>snprintf(buffer, sizeof(buffer), &quot;!system=%s subsystem=%s type=%s&quot;,
- system, subsystem, type);</pre>
-</div>
-<p class="Pp">The <var class="Va">system</var>, <var class="Va">subsystem</var>,
- and <var class="Va">type</var> pointers cannot be NULL.</p>
-<p class="Pp">The <var class="Va">data</var> argument may be NULL (for no
- additions) or a message formatted properly for <a class="Xr">devctl(4)</a>.
- A space will be added to the above template and this argument copied
- verbatim to form the message passed to userland. Senders should balance
- between only passing data that userland can not discover itself and sending
- all the data userland will want to use to decide what to do with the
- message.</p>
-<p class="Pp">The current total message length limit is just under 1kb. Senders
- should try to remain well below this limit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devctl(4)</a>, <a class="Xr">devd(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">M. Warner
- Losh</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 22, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devctl_process_running.9 4.html b/static/freebsd/man9/devctl_process_running.9 4.html
deleted file mode 100644
index 3c3afc28..00000000
--- a/static/freebsd/man9/devctl_process_running.9 4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCTL_PROCESS_RUNNING(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCTL_PROCESS_RUNNING(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devctl_process_running</code> &#x2014;
- <span class="Nd">Returns true when devctl has a consumer process
- running</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/devctl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">devctl_process_running</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">devctl_process_running</code> call returns
- <var class="Vt">true</var> when a process has the devctl device open for
- reading, and <var class="Vt">false</var> otherwise. One can assume from this
- that the default <a class="Xr">devd(8)</a> or similar is running when
- <var class="Vt">true</var> is returned. Some subsystems will send a message
- and allow userland to do something before proceeding with a default action
- if there's a timeout. This call allows those subsystems to do the default
- action right away when no process is running.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devd(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">M. Warner
- Losh</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 22, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devctl_safe_quote_sb.9 4.html b/static/freebsd/man9/devctl_safe_quote_sb.9 4.html
deleted file mode 100644
index d83d4a27..00000000
--- a/static/freebsd/man9/devctl_safe_quote_sb.9 4.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVCTL_SAFE_QUOTE_SB(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVCTL_SAFE_QUOTE_SB(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devctl_safe_quote_sb</code> &#x2014;
- <span class="Nd">Insert a string, properly quoted, into a sbuf</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/devctl.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devctl_safe_quote_sb</code>(<var class="Fa" style="white-space: nowrap;">struct
- sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const char
- *src</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Copy the string from <var class="Va">src</var> into
- <var class="Va">sb</var>. All backslash characters are doubled. All double
- quote characters &#x2018;&quot;&#x2019; are also preceded by a backslash.
- All other characters are copied without modification. The
- <a class="Xr">devctl(4)</a> protocol requires quoted string to be quoted
- thus. This routine centralizes this knowledge.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devd(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">M. Warner
- Losh</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 22, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devfs_set_cdevpriv.9 3.html b/static/freebsd/man9/devfs_set_cdevpriv.9 3.html
deleted file mode 100644
index 46f226bb..00000000
--- a/static/freebsd/man9/devfs_set_cdevpriv.9 3.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVFS_CDEVPRIV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVFS_CDEVPRIV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devfs_set_cdevpriv</code>,
- <code class="Nm">devfs_get_cdevpriv</code>,
- <code class="Nm">devfs_clear_cdevpriv</code>,
- <code class="Nm">devfs_foreach_cdevpriv</code> &#x2014;
- <span class="Nd">manage per-open filedescriptor data for devices</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>typedef void d_priv_dtor_t(void *data);</pre>
-</div>
-<br/>
-<var class="Ft">int</var>
-<br/>
-<code class="Fn">devfs_get_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void
- **datap</var>);
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devfs_set_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void
- *priv</var>, <var class="Fa" style="white-space: nowrap;">d_priv_dtor_t
- *dtr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devfs_clear_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">devfs_foreach_cdevpriv</code>(<var class="Fa">struct cdev
- *dev</var>, <var class="Fa">int (*cb)(void *data, void *arg)</var>,
- <var class="Fa">void *arg</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#devfs_xxx_cdevpriv"><code class="Fn" id="devfs_xxx_cdevpriv">devfs_xxx_cdevpriv</code></a>()
- family of functions allows the <var class="Fa">cdev</var> driver methods to
- associate some driver-specific data with each user process
- <a class="Xr">open(2)</a> of the device special file. Currently, functioning
- of these functions is restricted to the context of the
- <var class="Fa">cdevsw</var> switch method calls performed as
- <a class="Xr">devfs(4)</a> operations in response to system calls that use
- filedescriptors.</p>
-<p class="Pp" id="devfs_set_cdevpriv">The
- <a class="permalink" href="#devfs_set_cdevpriv"><code class="Fn">devfs_set_cdevpriv</code></a>()
- function associates a data pointed by <var class="Va">priv</var> with
- current calling context (filedescriptor). The data may be retrieved later,
- possibly from another call performed on this filedescriptor, by the
- <code class="Fn">devfs_get_cdevpriv</code>() function. The
- <code class="Fn">devfs_clear_cdevpriv</code>() disassociates previously
- attached data from context. Immediately after
- <code class="Fn">devfs_clear_cdevpriv</code>() finished operating, the
- <var class="Va">dtr</var> callback is called, with private data supplied
- <var class="Va">data</var> argument. The
- <code class="Fn">devfs_clear_cdevpriv</code>() function will be also be
- called if the open callback function returns an error code.</p>
-<p class="Pp" id="devfs_clear_cdevpriv">On the last filedescriptor close, system
- automatically arranges
- <a class="permalink" href="#devfs_clear_cdevpriv"><code class="Fn">devfs_clear_cdevpriv</code></a>()
- call.</p>
-<p class="Pp">If successful, the functions return 0.</p>
-<p class="Pp" id="devfs_set_cdevpriv~2">The function
- <a class="permalink" href="#devfs_set_cdevpriv~2"><code class="Fn">devfs_set_cdevpriv</code></a>()
- returns the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">ENOENT</code>]</dt>
- <dd>The current call is not associated with some filedescriptor.</dd>
- <dt>[<code class="Er">EBUSY</code>]</dt>
- <dd>The private driver data is already associated with current
- filedescriptor.</dd>
-</dl>
-<p class="Pp" id="devfs_get_cdevpriv">The function
- <a class="permalink" href="#devfs_get_cdevpriv"><code class="Fn">devfs_get_cdevpriv</code></a>()
- returns the following values on error:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">EBADF</code>]</dt>
- <dd>The current call is not associated with some filedescriptor.</dd>
- <dt>[<code class="Er">ENOENT</code>]</dt>
- <dd>The private driver data was not associated with current filedescriptor, or
- <code class="Fn">devfs_clear_cdevpriv</code>() was called.</dd>
-</dl>
-<p class="Pp" id="devfs_foreach_cdevpriv">The function
- <a class="permalink" href="#devfs_foreach_cdevpriv"><code class="Fn">devfs_foreach_cdevpriv</code></a>()
- sequentially calls the function <var class="Fa">cb</var> for each
- <code class="Nm">cdevpriv</code> structure, currently associated with the
- <var class="Fa">cdev</var> device. The iterated
- <code class="Nm">cdevpriv</code> data pointer and the user-supplied context
- <var class="Fa">arg</var> are passed to the function
- <var class="Fa">cb</var>. If <var class="Fa">cb</var> returns non-zero
- value, the iteration stops on that element. The
- <code class="Fn">devfs_foreach_cdevpriv</code>() returns the return value
- from the last call to <var class="Fa">cb</var>, or zero if no
- <code class="Nm">cdevpriv</code> data is currently associated with the
- device.</p>
-<p class="Pp">Current implementation of the iterator makes it impossible to use
- any blockable locking inside the callback <var class="Fa">cb</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">open(2)</a>,
- <a class="Xr">devfs(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">devfs_cdevpriv</code>() family of functions
- first appeared in <span class="Ux">FreeBSD 7.1</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 23, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device.9 3.html b/static/freebsd/man9/device.9 3.html
deleted file mode 100644
index 44abf9ea..00000000
--- a/static/freebsd/man9/device.9 3.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device</code> &#x2014; <span class="Nd">an
- abstract representation of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Vt">typedef struct _device *device_t</var>;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The device object represents a piece of hardware attached to the
- system such as an expansion card, the bus which that card is plugged into,
- disk drives attached to the expansion card etc. The system defines one
- device, <var class="Va">root_bus</var> and all other devices are created
- dynamically during autoconfiguration. Normally devices representing
- top-level buses in the system (ISA, PCI etc.) will be attached directly to
- <var class="Va">root_bus</var> and other devices will be added as children
- of their relevant bus.</p>
-<p class="Pp">The devices in a system form a tree. All devices except
- <var class="Va">root_bus</var> have a parent (see
- <a class="Xr">device_get_parent(9)</a>). In addition, any device can have
- children attached to it (see <a class="Xr">device_add_child(9)</a>,
- <a class="Xr">device_add_child_ordered(9)</a>,
- <a class="Xr">device_find_child(9)</a>,
- <a class="Xr">device_get_children(9)</a>, and
- <a class="Xr">device_delete_child(9)</a>).</p>
-<p class="Pp">A device which has been successfully probed and attached to the
- system will also have a driver (see <a class="Xr">device_get_driver(9)</a>
- and <a class="Xr">driver(9)</a>) and a devclass (see
- <a class="Xr">device_get_devclass(9)</a> and <a class="Xr">devclass(9)</a>).
- Various other attributes of the device include a unit number (see
- <a class="Xr">device_get_unit(9)</a>), verbose description (normally
- supplied by the driver, see <a class="Xr">device_set_desc(9)</a> and
- <a class="Xr">device_get_desc(9)</a>), a set of bus-specific variables (see
- <a class="Xr">device_get_ivars(9)</a>) and a set of driver-specific
- variables (see <a class="Xr">device_get_softc(9)</a>).</p>
-<p class="Pp">Devices can be in one of several states:</p>
-<dl class="Bl-tag">
- <dt id="DS_NOTPRESENT"><a class="permalink" href="#DS_NOTPRESENT"><code class="Dv">DS_NOTPRESENT</code></a></dt>
- <dd>the device has not been probed for existence or the probe failed</dd>
- <dt id="DS_ALIVE"><a class="permalink" href="#DS_ALIVE"><code class="Dv">DS_ALIVE</code></a></dt>
- <dd>the device probe succeeded but not yet attached</dd>
- <dt id="DS_ATTACHED"><a class="permalink" href="#DS_ATTACHED"><code class="Dv">DS_ATTACHED</code></a></dt>
- <dd>the device has been successfully attached</dd>
- <dt id="DS_BUSY"><a class="permalink" href="#DS_BUSY"><code class="Dv">DS_BUSY</code></a></dt>
- <dd>the device is currently open</dd>
-</dl>
-<p class="Pp">The current state of the device can be determined by calling
- <a class="Xr">device_get_state(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 15, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_add_child.9 3.html b/static/freebsd/man9/device_add_child.9 3.html
deleted file mode 100644
index c61595dd..00000000
--- a/static/freebsd/man9/device_add_child.9 3.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_ADD_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_ADD_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_add_child</code>,
- <code class="Nm">device_add_child_ordered</code> &#x2014;
- <span class="Nd">add a new device as a child of an existing
- device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">device_add_child</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">device_add_child_ordered</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int order</var>,
- <var class="Fa" style="white-space: nowrap;">const char *name</var>,
- <var class="Fa" style="white-space: nowrap;">int unit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Create a new child device of <var class="Fa">dev</var>. The
- <var class="Fa">name</var> and <var class="Fa">unit</var> arguments specify
- the name and unit number of the device. If the name is unknown then the
- caller should pass <code class="Dv">NULL</code>. If the unit is unknown then
- the caller should pass <code class="Dv">DEVICE_UNIT_ANY</code> and the
- system will choose the next available unit number.</p>
-<p class="Pp">The name of the device is used to determine which drivers might be
- appropriate for the device. If a name is specified then only drivers of that
- name are probed. If no name is given then all drivers for the owning bus are
- probed. In any event, only the name of the device is stored so that one may
- safely unload/load a driver bound to that name.</p>
-<p class="Pp">This allows buses which can uniquely identify device instances
- (such as PCI) to allow each driver to check each device instance for a
- match. For buses which rely on supplied probe hints where only one driver
- can have a chance of probing the device, the driver name should be specified
- as the device name.</p>
-<p class="Pp">Normally unit numbers will be chosen automatically by the system
- and a unit number of <code class="Dv">DEVICE_UNIT_ANY</code> should be
- given. When a specific unit number is desired (e.g., for wiring a particular
- piece of hardware to a pre-configured unit number), that unit should be
- passed. If the specified unit number is already allocated, a new unit will
- be allocated and a diagnostic message printed.</p>
-<p class="Pp" id="device_add_child_ordered">If the devices attached to a bus
- must be probed in a specific order (e.g., for the ISA bus some devices are
- sensitive to failed probe attempts of unrelated drivers and therefore must
- be probed first), the <var class="Fa">order</var> argument of
- <a class="permalink" href="#device_add_child_ordered"><code class="Fn">device_add_child_ordered</code></a>()
- should be used to specify a partial ordering. The new device will be added
- before any existing device with a greater order. If
- <code class="Fn">device_add_child</code>() is used, then the new child will
- be added as if its order was zero.</p>
-<p class="Pp">When adding a device in the context of
- <a class="Xr">DEVICE_IDENTIFY(9)</a> routine, the
- <a class="Xr">device_find_child(9)</a> routine should be used to ensure that
- the device has not already been added to the tree. Because the device name
- and <var class="Vt">devclass_t</var> are associated at probe time (not child
- addition time), previous instances of the driver (say in a module that was
- later unloaded) may have already added the instance. Authors of bus drivers
- must likewise be careful when adding children when they are loaded and
- unloaded to avoid duplication of children devices.</p>
-<p class="Pp" id="device_add_child">When adding a child to another device node,
- such as in an identify routine, use <a class="Xr">BUS_ADD_CHILD(9)</a>
- instead of
- <a class="permalink" href="#device_add_child"><code class="Fn">device_add_child</code></a>().
- <a class="Xr">BUS_ADD_CHILD(9)</a> will call
- <code class="Fn">device_add_child</code>() and add the proper bus-specific
- data to the new child. <code class="Fn">device_add_child</code>() does not
- call <a class="Xr">BUS_ADD_CHILD(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The new device if successful, NULL otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">device_delete_child(9)</a>,
- <a class="Xr">device_find_child(9)</a>,
- <a class="Xr">DEVICE_IDENTIFY(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 11, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_delete_child.9 4.html b/static/freebsd/man9/device_delete_child.9 4.html
deleted file mode 100644
index f17d2680..00000000
--- a/static/freebsd/man9/device_delete_child.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_DELETE_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_DELETE_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_delete_child</code> &#x2014;
- <span class="Nd">delete a child from a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_delete_child</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- child</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The specified device is removed from <var class="Fa">dev</var> and
- deleted. If the device is currently attached, it is first detached via
- <a class="Xr">device_detach(9)</a>. If
- <a class="permalink" href="#device_detach"><code class="Fn" id="device_detach">device_detach</code></a>()
- fails, its error value is returned. Otherwise, all descendant devices of
- <var class="Fa">child</var> are deleted and zero is returned.</p>
-<p class="Pp">The <a class="Xr">BUS_CHILD_DELETED(9)</a> method is invoked for
- each device that is deleted. This permits the parent device's driver to tear
- down any state associated with child devices such as ivars.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">BUS_CHILD_DELETED(9)</a>,
- <a class="Xr">device_add_child(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_delete_children.9 4.html b/static/freebsd/man9/device_delete_children.9 4.html
deleted file mode 100644
index b5589441..00000000
--- a/static/freebsd/man9/device_delete_children.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_DELETE_CHILDREN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_DELETE_CHILDREN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_delete_children</code> &#x2014;
- <span class="Nd">delete all child devices of a given device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_delete_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#device_delete_children"><code class="Fn" id="device_delete_children">device_delete_children</code></a>()
- function deletes all child devices of the given device
- <var class="Fa">dev</var>, if any, using the
- <a class="permalink" href="#device_delete_child"><code class="Fn" id="device_delete_child">device_delete_child</code></a>()
- function for each device it finds. If a child device cannot be deleted, this
- function will return an error code.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, a non-zero return value indicates
- failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device_delete_child(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Jeroen Ruigrok
- van der Werven</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 28, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_enable.9 4.html b/static/freebsd/man9/device_enable.9 4.html
deleted file mode 100644
index 9a6ed988..00000000
--- a/static/freebsd/man9/device_enable.9 4.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_ENABLE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_ENABLE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_enable</code>,
- <code class="Nm">device_disable</code>,
- <code class="Nm">device_is_enabled</code> &#x2014;
- <span class="Nd">manipulate device enabled flag</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_enable</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_disable</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_is_enabled</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each device has an enabled flag associated with it. A device is
- enabled by default when it is created but may be disabled (for instance to
- prevent a destructive or time consuming probe attempt). To disable a device,
- call
- <a class="permalink" href="#device_disable"><code class="Fn" id="device_disable">device_disable</code></a>(),
- to re-enable it, call
- <a class="permalink" href="#device_enable"><code class="Fn" id="device_enable">device_enable</code></a>()
- and to test to see if a device is enabled, call
- <a class="permalink" href="#device_is_enabled"><code class="Fn" id="device_is_enabled">device_is_enabled</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_find_child.9 4.html b/static/freebsd/man9/device_find_child.9 4.html
deleted file mode 100644
index 53f1c4c3..00000000
--- a/static/freebsd/man9/device_find_child.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_FIND_CHILD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_FIND_CHILD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_find_child</code> &#x2014;
- <span class="Nd">search for a child of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">device_find_child</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *classname</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function looks for a specific child of
- <code class="Dv">dev</code> with the given <var class="Fa">classname</var>
- and <var class="Fa">unit</var>. If <var class="Fa">unit</var> is -1, it
- returns the first child of <var class="Fa">dev</var> with a matching
- <var class="Fa">classname</var> (that is, the one with the lowest unit).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If it exists, the child device is returned, otherwise NULL.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device_add_child(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 8, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_children.9 3.html b/static/freebsd/man9/device_get_children.9 3.html
deleted file mode 100644
index 9857e468..00000000
--- a/static/freebsd/man9/device_get_children.9 3.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_CHILDREN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_CHILDREN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_children</code>,
- <code class="Nm">device_has_children</code> &#x2014;
- <span class="Nd">examine devices connected to a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_get_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- **devlistp</var>, <var class="Fa" style="white-space: nowrap;">int
- *devcountp</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">device_has_children</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">device_get_children</code> function retrieves
- a list of all device instances currently connected to
- <var class="Fa">dev</var>. It returns the list in
- <var class="Fa">*devlistp</var> and the count in
- <var class="Fa">*devcountp</var>. The memory allocated for the list should
- be freed using
- <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*devlistp</var>,
- <var class="Fa">M_TEMP</var>). <var class="Fa">devlistp</var> and
- <var class="Fa">devcountp</var> are not changed when an error is
- returned.</p>
-<p class="Pp">As a special case, if <var class="Fa">devlistp</var> is null, no
- memory is allocated but the count is still returned in
- <var class="Fa">*devcountp</var>.</p>
-<p class="Pp">The <code class="Nm">device_has_children</code> function returns
- <code class="Dv">true</code> if <var class="Fa">dev</var> has at least one
- child and <code class="Dv">false</code> if it has none.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Nm">device_get_children</code> function returns
- zero on success and an appropriate error otherwise. The
- <code class="Nm">device_has_children</code> function returns true if the
- specified device has at least one child and false otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>
- &lt;<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>&gt; and
- <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 28, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_devclass.9 4.html b/static/freebsd/man9/device_get_devclass.9 4.html
deleted file mode 100644
index 7a654926..00000000
--- a/static/freebsd/man9/device_get_devclass.9 4.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_DEVCLASS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_DEVCLASS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_devclass</code> &#x2014;
- <span class="Nd">access the devclass of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">devclass_t</var>
- <br/>
- <code class="Fn">device_get_devclass</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The current devclass associated with the device is returned. If
- the device has no devclass, <code class="Dv">NULL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_driver.9 4.html b/static/freebsd/man9/device_get_driver.9 4.html
deleted file mode 100644
index 9bcf091b..00000000
--- a/static/freebsd/man9/device_get_driver.9 4.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_DRIVER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_DRIVER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_driver</code> &#x2014;
- <span class="Nd">access the current driver of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">driver_t *</var>
- <br/>
- <code class="Fn">device_get_driver</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The current driver associated with the device is returned. If the
- device has no driver, <code class="Dv">NULL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_ivars.9 4.html b/static/freebsd/man9/device_get_ivars.9 4.html
deleted file mode 100644
index dc8500ab..00000000
--- a/static/freebsd/man9/device_get_ivars.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_IVARS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_IVARS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_ivars</code>,
- <code class="Nm">device_set_ivars</code> &#x2014; <span class="Nd">access
- bus private variables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">device_get_ivars</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_ivars</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">void
- *ivar</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#device_get_ivars"><code class="Fn" id="device_get_ivars">device_get_ivars</code></a>()
- function returns the bus-specific instance variables of a device.</p>
-<p class="Pp" id="device_set_ivars">The
- <a class="permalink" href="#device_set_ivars"><code class="Fn">device_set_ivars</code></a>()
- function sets the bus-specific instance variables of a device.</p>
-<p class="Pp">Typically, only bus drivers will use these functions. The kernel
- assumes that the bus driver will manage this memory, and no automatic memory
- allocation or deallocation happens. Client drivers should access ivars
- through the <a class="Xr">BUS_READ_IVAR(9)</a> interface instead.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_name.9 4.html b/static/freebsd/man9/device_get_name.9 4.html
deleted file mode 100644
index d0a137cd..00000000
--- a/static/freebsd/man9/device_get_name.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_NAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_NAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_name</code>,
- <code class="Nm">device_get_nameunit</code> &#x2014; <span class="Nd">access
- the name of a device's device class or instance</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">device_get_name</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">device_get_nameunit</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#device_get_name"><code class="Fn" id="device_get_name">device_get_name</code></a>()
- function returns the name of the device's device class.</p>
-<p class="Pp" id="device_get_nameunit">The
- <a class="permalink" href="#device_get_nameunit"><code class="Fn">device_get_nameunit</code></a>()
- function returns the name of the device's instance.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_parent.9 4.html b/static/freebsd/man9/device_get_parent.9 4.html
deleted file mode 100644
index e2f9ca4d..00000000
--- a/static/freebsd/man9/device_get_parent.9 4.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_PARENT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_PARENT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_parent</code> &#x2014;
- <span class="Nd">return the device's parent</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">device_get_parent</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#device_get_parent"><code class="Fn" id="device_get_parent">device_get_parent</code></a>()
- function returns the name of the device's parent device.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_property.9 3.html b/static/freebsd/man9/device_get_property.9 3.html
deleted file mode 100644
index 33387eef..00000000
--- a/static/freebsd/man9/device_get_property.9 3.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_PROPERTY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_PROPERTY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_property</code>,
- <code class="Nm">device_has_property</code> &#x2014; <span class="Nd">access
- device specific data</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">device_get_property</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *prop</var>, <var class="Fa" style="white-space: nowrap;">void *val</var>,
- <var class="Fa" style="white-space: nowrap;">size_t sz</var>,
- <var class="Fa" style="white-space: nowrap;">device_property_type_t
- type</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">device_has_property</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *prop</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Access device specific data provided by the parent bus. Drivers
- can use these properties to obtain device capabilities and set necessary
- quirks.</p>
-<p class="Pp">The underlying property type is specified with the
- <var class="Fa">type</var> argument. Currently the following types are
- supported:</p>
-<dl class="Bl-tag">
- <dt id="DEVICE_PROP_BUFFER"><a class="permalink" href="#DEVICE_PROP_BUFFER"><code class="Dv">DEVICE_PROP_BUFFER</code></a></dt>
- <dd>The underlying property is a string of bytes.</dd>
- <dt id="DEVICE_PROP_ANY"><a class="permalink" href="#DEVICE_PROP_ANY"><code class="Dv">DEVICE_PROP_ANY</code></a></dt>
- <dd>Wildcard property type.</dd>
- <dt id="DEVICE_PROP_HANDLE"><a class="permalink" href="#DEVICE_PROP_HANDLE"><code class="Dv">DEVICE_PROP_HANDLE</code></a></dt>
- <dd>Following a reference the underlying property is a handle of the
- respective bus.</dd>
- <dt id="DEVICE_PROP_UINT32"><a class="permalink" href="#DEVICE_PROP_UINT32"><code class="Dv">DEVICE_PROP_UINT32</code></a></dt>
- <dd>The underlying property is an array of unsigned 32 bit integers. The
- <var class="Fa">sz</var> argument shall be a multiple of 4.</dd>
- <dt id="DEVICE_PROP_UINT64"><a class="permalink" href="#DEVICE_PROP_UINT64"><code class="Dv">DEVICE_PROP_UINT64</code></a></dt>
- <dd>The underlying property is an array of unsigned 64 bit integers. The
- <var class="Fa">sz</var> argument shall be a multiple of 8.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">You can pass NULL as pointer to property's value when calling
- <a class="permalink" href="#device_get_property"><code class="Fn" id="device_get_property">device_get_property</code></a>()
- to obtain its size.</p>
-<p class="Pp">Currently this interface is implemented by
- <a class="Xr">simplebus(4)</a> and <a class="Xr">acpi(4)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">device_get_property</code>() if successful
- returns property's size, otherwise returns -1.</p>
-<p class="Pp"><code class="Fn">device_has_property</code>() returns true if
- given property was found.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acpi(4)</a>, <a class="Xr">simplebus(4)</a>,
- <a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bartlomiej
- Grzesik</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 29, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_softc.9 4.html b/static/freebsd/man9/device_get_softc.9 4.html
deleted file mode 100644
index 6fb8a6d9..00000000
--- a/static/freebsd/man9/device_get_softc.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_SOFTC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_SOFTC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_softc</code> &#x2014;
- <span class="Nd">access driver private instance variables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">device_get_softc</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Return the driver-specific software context of
- <var class="Fa">dev</var>. The softc is automatically allocated and zeroed
- when the device is attached. The softc is also initialized and present when
- a device is probed, but is subject to caveats as described in
- <a class="Xr">DEVICE_PROBE(9)</a>. The size of the allocation is determined
- by the device's <var class="Vt">driver_t</var> information used to define
- the driver. The softc typically encapsulates the state of this instance of
- the device.</p>
-<p class="Pp">Driver writers are discouraged from using their own softc
- management mechanisms. Driver writers should not copy such mechanisms found
- in drivers in the tree that predate this function.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The pointer to the driver-specific instance variable is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>,
- <a class="Xr">device_set_softc(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 21, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_state.9 3.html b/static/freebsd/man9/device_get_state.9 3.html
deleted file mode 100644
index f430ef69..00000000
--- a/static/freebsd/man9/device_get_state.9 3.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_STATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_STATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_state</code>,
- <code class="Nm">device_busy</code>, <code class="Nm">device_unbusy</code>,
- <code class="Nm">device_is_alive</code>,
- <code class="Nm">device_is_attached</code> &#x2014;
- <span class="Nd">manipulate device state</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">device_state_t</var>
- <br/>
- <code class="Fn">device_get_state</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_busy</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_unbusy</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_is_alive</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_is_attached</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The current state of a device is accessed by calling
- <a class="permalink" href="#device_get_state"><code class="Fn" id="device_get_state">device_get_state</code></a>()
- which returns <code class="Dv">DS_NOTPRESENT</code>,
- <code class="Dv">DS_ALIVE</code>, <code class="Dv">DS_ATTACHED</code> or
- <code class="Dv">DS_BUSY</code> (described in <a class="Xr">device(9)</a>).
- To test see if a device was successfully probed, call
- <a class="permalink" href="#device_is_alive"><code class="Fn" id="device_is_alive">device_is_alive</code></a>()
- which simply returns if the state is greater or equal to
- <code class="Dv">DS_ALIVE</code>. To test see if a device was successfully
- attached, call
- <a class="permalink" href="#device_is_attached"><code class="Fn" id="device_is_attached">device_is_attached</code></a>()
- which simply returns if the state is greater or equal to
- <code class="Dv">DS_ATTACHED</code>.</p>
-<p class="Pp" id="device_busy">Each device has a busy count which is incremented
- when
- <a class="permalink" href="#device_busy"><code class="Fn">device_busy</code></a>()
- is called and decremented when
- <a class="permalink" href="#device_unbusy"><code class="Fn" id="device_unbusy">device_unbusy</code></a>()
- is called. Both routines return an error if the device state is less than
- <code class="Dv">DS_ATTACHED</code>.</p>
-<p class="Pp" id="device_busy~2">When
- <a class="permalink" href="#device_busy~2"><code class="Fn">device_busy</code></a>()
- is called on a device in the <code class="Dv">DS_ATTACHED</code> state, the
- device changes to the <code class="Dv">DS_BUSY</code> state. When
- <a class="permalink" href="#device_unbusy~2"><code class="Fn" id="device_unbusy~2">device_unbusy</code></a>()
- is called and after decrementing, the busy count for the device is zero, the
- device changes to the <code class="Dv">DS_ATTACHED</code> state.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_sysctl.9 4.html b/static/freebsd/man9/device_get_sysctl.9 4.html
deleted file mode 100644
index 71297d92..00000000
--- a/static/freebsd/man9/device_get_sysctl.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_SYSCTL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_SYSCTL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_sysctl_ctx</code>,
- <code class="Nm">device_get_sysctl_tree</code> &#x2014;
- <span class="Nd">manipulate the sysctl oid tree for driver specific sysctl
- nodes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct sysctl_ctx_list *</var>
- <br/>
- <code class="Fn">device_get_sysctl_ctx</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">device_get_sysctl_tree</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The newbus system automatically adds a sysctl node for each device
- in the system. This node can be accessed with the
- <a class="permalink" href="#device_get_sysctl_tree"><code class="Fn" id="device_get_sysctl_tree">device_get_sysctl_tree</code></a>()
- function. The context for the node can be obtained with the
- <a class="permalink" href="#device_get_sysctl_ctx"><code class="Fn" id="device_get_sysctl_ctx">device_get_sysctl_ctx</code></a>()
- function.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 18, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_get_unit.9 4.html b/static/freebsd/man9/device_get_unit.9 4.html
deleted file mode 100644
index 3d3584dc..00000000
--- a/static/freebsd/man9/device_get_unit.9 4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_UNIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_UNIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_get_unit</code> &#x2014;
- <span class="Nd">access the unit number of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_get_unit</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Return the unit number of the device.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_printf.9 4.html b/static/freebsd/man9/device_printf.9 4.html
deleted file mode 100644
index 7e50e808..00000000
--- a/static/freebsd/man9/device_printf.9 4.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_PRINTF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_PRINTF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_printf</code> &#x2014;
- <span class="Nd">formatted output conversion</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_printf</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#device_printf"><code class="Fn" id="device_printf">device_printf</code></a>()
- function is a convenience interface to the <a class="Xr">printf(9)</a>
- function. It outputs the name of the <var class="Fa">dev</var> device,
- followed by a colon and a space, and then what <a class="Xr">printf(9)</a>
- would print if you passed <var class="Fa">fmt</var> and the remaining
- arguments to it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">device_printf</code>() function returns the
- number of characters displayed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">printf(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_probe_and_attach.9 3.html b/static/freebsd/man9/device_probe_and_attach.9 3.html
deleted file mode 100644
index 0e2c80a0..00000000
--- a/static/freebsd/man9/device_probe_and_attach.9 3.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_PROBE_AND_ATTACH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_PROBE_AND_ATTACH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_attach</code>,
- <code class="Nm">device_detach</code>, <code class="Nm">device_probe</code>,
- <code class="Nm">device_probe_and_attach</code> &#x2014;
- <span class="Nd">manage device's connection to a device driver</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_probe</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_probe_and_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions manage the relationship between a device and
- device drivers.</p>
-<p class="Pp" id="device_probe"><a class="permalink" href="#device_probe"><code class="Fn">device_probe</code></a>()
- invokes the <a class="Xr">DEVICE_PROBE(9)</a> method of each suitable driver
- and to find the driver with the best match for <var class="Fa">dev</var>. If
- a matching driver is found, <var class="Fa">dev</var> is set to the
- <code class="Dv">DS_ALIVE</code> state and zero is returned. If
- <var class="Fa">dev</var> is already attached to a device driver or has been
- disabled via <a class="Xr">device_disable(9)</a>, then it will not be probed
- and -1 is returned.</p>
-<p class="Pp" id="device_attach"><a class="permalink" href="#device_attach"><code class="Fn">device_attach</code></a>()
- fully attaches a device driver to <var class="Fa">dev</var>. This function
- prints a description of the device and invokes the
- <a class="Xr">DEVICE_ATTACH(9)</a> method. If the
- <a class="Xr">DEVICE_ATTACH(9)</a> method succeeds,
- <var class="Fa">dev</var> is set to the <code class="Dv">DS_ATTACHED</code>
- state and zero is returned. If the <a class="Xr">DEVICE_ATTACH(9)</a> method
- fails, <a class="Xr">BUS_CHILD_DETACHED(9)</a> is called and an error value
- is returned.</p>
-<p class="Pp" id="device_attach~2">If the device name and unit are disabled by a
- hint,
- <a class="permalink" href="#device_attach~2"><code class="Fn">device_attach</code></a>()
- disables the device, demotes it to the <code class="Dv">DS_NOTPRESENT</code>
- state, and returns <code class="Dv">ENXIO</code>. The device retains its
- device name and unit and can be re-enabled via
- <a class="Xr">devctl(8)</a>.</p>
-<p class="Pp" id="device_probe_and_attach"><a class="permalink" href="#device_probe_and_attach"><code class="Fn">device_probe_and_attach</code></a>()
- is a wrapper function around <code class="Fn">device_probe</code>() and
- <code class="Fn">device_attach</code>() that fully initialises a device. If
- <var class="Fa">dev</var> is already attached or disabled,
- <code class="Fn">device_probe_and_attach</code>() leaves the device
- unchanged and returns zero. Otherwise,
- <code class="Fn">device_probe</code>() is used to identify a device driver
- for <var class="Fa">dev</var> and <code class="Fn">device_attach</code>()
- finalizes attaching the driver to <var class="Fa">dev</var>. Device drivers
- should generally use this function to initialize a device rather than direct
- calls to <code class="Fn">device_probe</code>() and
- <code class="Fn">device_attach</code>().</p>
-<p class="Pp" id="device_detach"><a class="permalink" href="#device_detach"><code class="Fn">device_detach</code></a>()
- detaches the device driver from <var class="Fa">dev</var>. This function
- invokes the <a class="Xr">DEVICE_DETACH(9)</a> method to tear down device
- driver state for <var class="Fa">dev</var>. If the method fails, its error
- value is returned and <var class="Fa">dev</var> remains attached. If the
- method succeeds, otherwise, <a class="Xr">BUS_CHILD_DETACHED(9)</a> is
- called, the device is set to the <code class="Dv">DS_NOTPRESENT</code>
- state, and zero is returned. If a device is busy,
- <code class="Fn">device_detach</code>() fails with
- <code class="Dv">EBUSY</code> and leaving <var class="Fa">dev</var>
- unchanged.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Zero is returned on success, otherwise an appropriate error is
- returned. In addition, <code class="Fn">device_probe</code>() returns -1 if
- <var class="Fa">dev</var> is disabled or already attached.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devctl(8)</a>,
- <a class="Xr">BUS_CHILD_DETACHED(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">DEVICE_ATTACH(9)</a>, <a class="Xr">DEVICE_DETACH(9)</a>,
- <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_quiet.9 4.html b/static/freebsd/man9/device_quiet.9 4.html
deleted file mode 100644
index fc00d092..00000000
--- a/static/freebsd/man9/device_quiet.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_QUIET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_QUIET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_quiet</code>,
- <code class="Nm">device_verbose</code>,
- <code class="Nm">device_is_quiet</code> &#x2014; <span class="Nd">manipulate
- device quiet flag</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_quiet</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_verbose</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">device_is_quiet</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each device has a quiet flag associated with it. A device is
- verbose by default when it is created but may be quieted to prevent printing
- of the device identification string during attach and printing of a message
- during detach. To quiet a device, call
- <a class="permalink" href="#device_quiet"><code class="Fn" id="device_quiet">device_quiet</code></a>()
- during a device driver probe routine. To re-enable probe messages, call
- <a class="permalink" href="#device_verbose"><code class="Fn" id="device_verbose">device_verbose</code></a>().
- To test to see if a device is quieted, call
- <a class="permalink" href="#device_is_quiet"><code class="Fn" id="device_is_quiet">device_is_quiet</code></a>().</p>
-<p class="Pp">Devices are implicitly marked verbose after a driver detaches.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 12, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_set_desc.9 4.html b/static/freebsd/man9/device_set_desc.9 4.html
deleted file mode 100644
index 01aa7a3d..00000000
--- a/static/freebsd/man9/device_set_desc.9 4.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_SET_DESC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_SET_DESC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_set_desc</code>,
- <code class="Nm">device_set_descf</code>,
- <code class="Nm">device_set_desc_copy</code>,
- <code class="Nm">device_get_desc</code> &#x2014; <span class="Nd">access the
- description of a device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_desc</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_descf</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_desc_copy</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *desc</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">device_get_desc</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Manipulate the verbose description of a device. This description
- (if present) is printed as part of the message when it is attached during
- autoconfiguration. The variation
- <a class="permalink" href="#device_set_desc_copy"><code class="Fn" id="device_set_desc_copy">device_set_desc_copy</code></a>()
- is used to set the description if the string passed is a temporary buffer
- which will be overwritten. In this case, the system will copy the string,
- otherwise the pointer passed will be used directly.
- <a class="permalink" href="#device_set_descf"><code class="Fn" id="device_set_descf">device_set_descf</code></a>()
- is a printf-like version of
- <a class="permalink" href="#device_set_desc"><code class="Fn" id="device_set_desc">device_set_desc</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 9, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_set_driver.9 4.html b/static/freebsd/man9/device_set_driver.9 4.html
deleted file mode 100644
index 5de2faec..00000000
--- a/static/freebsd/man9/device_set_driver.9 4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_SET_DRIVER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_SET_DRIVER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_set_driver</code> &#x2014;
- <span class="Nd">associate a specific driver with a device node in the
- tree</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_driver</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">driver_t
- *driver</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function associates a specific driver with a given device
- node in the tree. It is typically used in
- <a class="Xr">DEVICE_IDENTIFY(9)</a> functions to add devices to a bus that
- does not support doing so automatically, such as the ISA bus.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">M. Warner
- Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/device_set_flags.9 4.html b/static/freebsd/man9/device_set_flags.9 4.html
deleted file mode 100644
index deb0683c..00000000
--- a/static/freebsd/man9/device_set_flags.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVICE_GET_FLAGS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVICE_GET_FLAGS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">device_set_flags</code>,
- <code class="Nm">device_get_flags</code> &#x2014;
- <span class="Nd">manipulate driver flags</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">device_set_flags</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">device_get_flags</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each device supports a set of driver-dependent flags which are
- often used to control device behaviour. These flags are read by calling
- <a class="permalink" href="#device_get_flags"><code class="Fn" id="device_get_flags">device_get_flags</code></a>()
- and written by calling
- <a class="permalink" href="#device_set_flags"><code class="Fn" id="device_set_flags">device_set_flags</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 6, 1999</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devstat.9 3.html b/static/freebsd/man9/devstat.9 3.html
deleted file mode 100644
index 4c185552..00000000
--- a/static/freebsd/man9/devstat.9 3.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVSTAT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVSTAT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devstat</code>,
- <code class="Nm">devstat_end_transaction</code>,
- <code class="Nm">devstat_end_transaction_bio</code>,
- <code class="Nm">devstat_end_transaction_bio_bt</code>,
- <code class="Nm">devstat_new_entry</code>,
- <code class="Nm">devstat_remove_entry</code>,
- <code class="Nm">devstat_start_transaction</code>,
- <code class="Nm">devstat_start_transaction_bio</code> &#x2014;
- <span class="Nd">kernel interface for keeping device statistics</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/devicestat.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct devstat *</var>
- <br/>
- <code class="Fn">devstat_new_entry</code>(<var class="Fa">const void
- *dev_name</var>, <var class="Fa">int unit_number</var>,
- <var class="Fa">uint32_t block_size</var>,
- <var class="Fa">devstat_support_flags flags</var>,
- <var class="Fa">devstat_type_flags device_type</var>,
- <var class="Fa">devstat_priority priority</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_remove_entry</code>(<var class="Fa" style="white-space: nowrap;">struct
- devstat *ds</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_start_transaction</code>(<var class="Fa">struct
- devstat *ds</var>, <var class="Fa">const struct bintime *now</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_start_transaction_bio</code>(<var class="Fa">struct
- devstat *ds</var>, <var class="Fa">struct bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_end_transaction</code>(<var class="Fa">struct devstat
- *ds</var>, <var class="Fa">uint32_t bytes</var>,
- <var class="Fa">devstat_tag_type tag_type</var>,
- <var class="Fa">devstat_trans_flags flags</var>, <var class="Fa">const
- struct bintime *now</var>, <var class="Fa">const struct bintime
- *then</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_end_transaction_bio</code>(<var class="Fa">struct
- devstat *ds</var>, <var class="Fa">const struct bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">devstat_end_transaction_bio_bt</code>(<var class="Fa">struct
- devstat *ds</var>, <var class="Fa">const struct bio *bp</var>,
- <var class="Fa">const struct bintime *now</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The devstat subsystem is an interface for recording device
- statistics, as its name implies. The idea is to keep reasonably detailed
- statistics while utilizing a minimum amount of CPU time to record them.
- Thus, no statistical calculations are actually performed in the kernel
- portion of the <code class="Nm">devstat</code> code. Instead, that is left
- for user programs to handle.</p>
-<p class="Pp">The historical and antiquated <code class="Nm">devstat</code>
- model assumed a single active IO operation per device, which is not accurate
- for most disk-like drivers in the 2000s and beyond. New consumers of the
- interface should almost certainly use only the &quot;bio&quot; variants of
- the start and end transacation routines.</p>
-<p class="Pp" id="devstat_new_entry"><a class="permalink" href="#devstat_new_entry"><code class="Fn">devstat_new_entry</code></a>()
- allocates and initializes <var class="Va">devstat</var> structure and
- returns a pointer to it. <code class="Fn">devstat_new_entry</code>() takes
- several arguments:</p>
-<dl class="Bl-tag">
- <dt>dev_name</dt>
- <dd>The device name, e.g., da, cd, sa.</dd>
- <dt>unit_number</dt>
- <dd>Device unit number.</dd>
- <dt>block_size</dt>
- <dd>Block size of the device, if supported. If the device does not support a
- block size, or if the blocksize is unknown at the time the device is added
- to the <code class="Nm">devstat</code> list, it should be set to 0.</dd>
- <dt>flags</dt>
- <dd>Flags indicating operations supported or not supported by the device. See
- below for details.</dd>
- <dt>device_type</dt>
- <dd>The device type. This is broken into three sections: base device type
- (e.g., direct access, CDROM, sequential access), interface type (IDE, SCSI
- or other) and a pass-through flag to indicate pas-through devices. See
- below for a complete list of types.</dd>
- <dt>priority</dt>
- <dd>The device priority. The priority is used to determine how devices are
- sorted within <code class="Nm">devstat</code>'s list of devices. Devices
- are sorted first by priority (highest to lowest), and then by attach
- order. See below for a complete list of available priorities.</dd>
-</dl>
-<p class="Pp" id="devstat_remove_entry"><a class="permalink" href="#devstat_remove_entry"><code class="Fn">devstat_remove_entry</code></a>()
- removes a device from the <code class="Nm">devstat</code> subsystem. It
- takes the devstat structure for the device in question as an argument. The
- <code class="Nm">devstat</code> generation number is incremented and the
- number of devices is decremented.</p>
-<p class="Pp" id="devstat_start_transaction"><a class="permalink" href="#devstat_start_transaction"><code class="Fn">devstat_start_transaction</code></a>()
- registers the start of a transaction with the
- <code class="Nm">devstat</code> subsystem. Optionally, if the caller already
- has a <code class="Fn">binuptime</code>() value available, it may be passed
- in <var class="Fa">*now</var>. Usually the caller can just pass
- <code class="Dv">NULL</code> for <var class="Fa">now</var>, and the routine
- will gather the current <code class="Fn">binuptime</code>() itself. The busy
- count is incremented with each transaction start. When a device goes from
- idle to busy, the system uptime is recorded in the
- <var class="Va">busy_from</var> field of the <var class="Va">devstat</var>
- structure.</p>
-<p class="Pp" id="devstat_start_transaction_bio"><a class="permalink" href="#devstat_start_transaction_bio"><code class="Fn">devstat_start_transaction_bio</code></a>()
- records the <code class="Fn">binuptime</code>() in the provided bio's
- <var class="Fa">bio_t0</var> and then invokes
- <code class="Fn">devstat_start_transaction</code>().</p>
-<p class="Pp" id="devstat_end_transaction"><a class="permalink" href="#devstat_end_transaction"><code class="Fn">devstat_end_transaction</code></a>()
- registers the end of a transaction with the <code class="Nm">devstat</code>
- subsystem. It takes six arguments:</p>
-<dl class="Bl-tag">
- <dt>ds</dt>
- <dd>The <var class="Va">devstat</var> structure for the device in
- question.</dd>
- <dt>bytes</dt>
- <dd>The number of bytes transferred in this transaction.</dd>
- <dt>tag_type</dt>
- <dd>Transaction tag type. See below for tag types.</dd>
- <dt>flags</dt>
- <dd>Transaction flags indicating whether the transaction was a read, write, or
- whether no data was transferred.</dd>
- <dt>now</dt>
- <dd>The <code class="Fn">binuptime</code>() at the end of the transaction, or
- <code class="Dv">NULL</code>.</dd>
- <dt>then</dt>
- <dd>The <code class="Fn">binuptime</code>() at the beginning of the
- transaction, or <code class="Dv">NULL</code>.</dd>
-</dl>
-<p class="Pp" id="binuptime">If <var class="Fa">now</var> is
- <code class="Dv">NULL</code>, it collects the current time from
- <a class="permalink" href="#binuptime"><code class="Fn">binuptime</code></a>().
- If <var class="Fa">then</var> is <code class="Dv">NULL</code>, the operation
- is not tracked in the <var class="Va">devstat</var>
- <var class="Fa">duration</var> table.</p>
-<p class="Pp" id="devstat_end_transaction_bio"><a class="permalink" href="#devstat_end_transaction_bio"><code class="Fn">devstat_end_transaction_bio</code></a>()
- is a thin wrapper for
- <code class="Fn">devstat_end_transaction_bio_bt</code>() with a
- <code class="Dv">NULL</code> <var class="Fa">now</var> parameter.</p>
-<p class="Pp" id="devstat_end_transaction_bio_bt"><a class="permalink" href="#devstat_end_transaction_bio_bt"><code class="Fn">devstat_end_transaction_bio_bt</code></a>()
- is a wrapper for <code class="Fn">devstat_end_transaction</code>() which
- pulls all needed information from a <var class="Va">struct bio</var>
- prepared by <code class="Fn">devstat_start_transaction_bio</code>(). The bio
- must be ready for
- <a class="permalink" href="#biodone"><code class="Fn" id="biodone">biodone</code></a>()
- (i.e., <var class="Fa">bio_bcount</var> and <var class="Fa">bio_resid</var>
- must be correctly initialized).</p>
-<p class="Pp">The <var class="Va">devstat</var> structure is composed of the
- following fields:</p>
-<dl class="Bl-tag">
- <dt>sequence0,</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>sequence1</dt>
- <dd>An implementation detail used to gather consistent snapshots of device
- statistics.</dd>
- <dt>start_count</dt>
- <dd>Number of operations started.</dd>
- <dt>end_count</dt>
- <dd>Number of operations completed. The &#x201C;busy_count&#x201D; can be
- calculated by subtracting <var class="Fa">end_count</var> from
- <var class="Fa">start_count</var>. (<var class="Fa">sequence0</var> and
- <var class="Fa">sequence1</var> are used to get a consistent snapshot.)
- This is the current number of outstanding transactions for the device.
- This should never go below zero, and on an idle device it should be zero.
- If either one of these conditions is not true, it indicates a problem.
- <p class="Pp">There should be one and only one transaction start event and
- one transaction end event for each transaction.</p>
- </dd>
- <dt>dev_links</dt>
- <dd>Each <var class="Va">devstat</var> structure is placed in a linked list
- when it is registered. The <var class="Va">dev_links</var> field contains
- a pointer to the next entry in the list of <var class="Va">devstat</var>
- structures.</dd>
- <dt>device_number</dt>
- <dd>The device number is a unique identifier for each device. The device
- number is incremented for each new device that is registered. The device
- number is currently only a 32-bit integer, but it could be enlarged if
- someone has a system with more than four billion device arrival
- events.</dd>
- <dt>device_name</dt>
- <dd>The device name is a text string given by the registering driver to
- identify itself. (e.g., &#x201C;da&#x201D;, &#x201C;cd&#x201D;,
- &#x201C;sa&#x201D;, etc.)</dd>
- <dt>unit_number</dt>
- <dd>The unit number identifies the particular instance of the peripheral
- driver in question.</dd>
- <dt>bytes[4]</dt>
- <dd>This array contains the number of bytes that have been read (index
- <code class="Dv">DEVSTAT_READ</code>), written (index
- <code class="Dv">DEVSTAT_WRITE</code>), freed or erased (index
- <code class="Dv">DEVSTAT_FREE</code>), or other (index
- <code class="Dv">DEVSTAT_NO_DATA</code>). All values are unsigned 64-bit
- integers.</dd>
- <dt>operations[4]</dt>
- <dd>This array contains the number of operations of a given type that have
- been performed. The indices are identical to those for
- <var class="Fa">bytes</var> above. <code class="Dv">DEVSTAT_NO_DATA</code>
- or &quot;other&quot; represents the number of transactions to the device
- which are neither reads, writes, nor frees. For instance, SCSI drivers
- often send a test unit ready command to SCSI devices. The test unit ready
- command does not read or write any data. It merely causes the device to
- return its status.</dd>
- <dt id="devstat_end_transaction~2">duration[4]</dt>
- <dd>This array contains the total bintime corresponding to completed
- operations of a given type. The indices are identical to those for
- <var class="Fa">bytes</var> above. (Operations that complete using the
- historical
- <a class="permalink" href="#devstat_end_transaction~2"><code class="Fn">devstat_end_transaction</code></a>()
- API and do not provide a non-NULL <var class="Fa">then</var> are not
- accounted for.)</dd>
- <dt>busy_time</dt>
- <dd>This is the amount of time that the device busy count has been greater
- than zero. This is only updated when the busy count returns to zero.</dd>
- <dt id="getmicrotime">creation_time</dt>
- <dd>This is the time, as reported by
- <a class="permalink" href="#getmicrotime"><code class="Fn">getmicrotime</code></a>()
- that the device was registered.</dd>
- <dt>block_size</dt>
- <dd>This is the block size of the device, if the device has a block size.</dd>
- <dt>tag_types</dt>
- <dd>This is an array of counters to record the number of various tag types
- that are sent to a device. See below for a list of tag types.</dd>
- <dt>busy_from</dt>
- <dd>If the device is not busy, this was the time that a transaction last
- completed. If the device is busy, this the most recent of either the time
- that the device became busy, or the time that the last transaction
- completed.</dd>
- <dt>flags</dt>
- <dd>These flags indicate which statistics measurements are supported by a
- particular device. These flags are primarily intended to serve as an aid
- to userland programs that decipher the statistics.</dd>
- <dt>device_type</dt>
- <dd>This is the device type. It consists of three parts: the device type
- (e.g., direct access, CDROM, sequential access, etc.), the interface (IDE,
- SCSI or other) and whether or not the device in question is a pass-through
- driver. See below for a complete list of device types.</dd>
- <dt>priority</dt>
- <dd>This is the priority. This is the first parameter used to determine where
- to insert a device in the <code class="Nm">devstat</code> list. The second
- parameter is attach order. See below for a list of available
- priorities.</dd>
- <dt>id</dt>
- <dd>Identification for GEOM nodes.</dd>
-</dl>
-<p class="Pp">Each device is given a device type. Pass-through devices have the
- same underlying device type and interface as the device they provide an
- interface for, but they also have the pass-through flag set. The base device
- types are identical to the SCSI device type numbers, so with SCSI
- peripherals, the device type returned from an inquiry is usually ORed with
- the SCSI interface type and the pass-through flag if appropriate. The device
- type flags are as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>typedef enum {
- DEVSTAT_TYPE_DIRECT = 0x000,
- DEVSTAT_TYPE_SEQUENTIAL = 0x001,
- DEVSTAT_TYPE_PRINTER = 0x002,
- DEVSTAT_TYPE_PROCESSOR = 0x003,
- DEVSTAT_TYPE_WORM = 0x004,
- DEVSTAT_TYPE_CDROM = 0x005,
- DEVSTAT_TYPE_SCANNER = 0x006,
- DEVSTAT_TYPE_OPTICAL = 0x007,
- DEVSTAT_TYPE_CHANGER = 0x008,
- DEVSTAT_TYPE_COMM = 0x009,
- DEVSTAT_TYPE_ASC0 = 0x00a,
- DEVSTAT_TYPE_ASC1 = 0x00b,
- DEVSTAT_TYPE_STORARRAY = 0x00c,
- DEVSTAT_TYPE_ENCLOSURE = 0x00d,
- DEVSTAT_TYPE_FLOPPY = 0x00e,
- DEVSTAT_TYPE_MASK = 0x00f,
- DEVSTAT_TYPE_IF_SCSI = 0x010,
- DEVSTAT_TYPE_IF_IDE = 0x020,
- DEVSTAT_TYPE_IF_OTHER = 0x030,
- DEVSTAT_TYPE_IF_NVME = 0x040,
- DEVSTAT_TYPE_IF_MASK = 0x0f0,
- DEVSTAT_TYPE_PASS = 0x100
-} devstat_type_flags;</pre>
-</div>
-<p class="Pp">Devices have a priority associated with them, which controls
- roughly where they are placed in the <code class="Nm">devstat</code> list.
- The priorities are as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>typedef enum {
- DEVSTAT_PRIORITY_MIN = 0x000,
- DEVSTAT_PRIORITY_OTHER = 0x020,
- DEVSTAT_PRIORITY_PASS = 0x030,
- DEVSTAT_PRIORITY_FD = 0x040,
- DEVSTAT_PRIORITY_WFD = 0x050,
- DEVSTAT_PRIORITY_TAPE = 0x060,
- DEVSTAT_PRIORITY_CD = 0x090,
- DEVSTAT_PRIORITY_DISK = 0x110,
- DEVSTAT_PRIORITY_ARRAY = 0x120,
- DEVSTAT_PRIORITY_MAX = 0xfff
-} devstat_priority;</pre>
-</div>
-<p class="Pp">Each device has associated with it flags to indicate what
- operations are supported or not supported. The
- <var class="Va">devstat_support_flags</var> values are as follows:</p>
-<dl class="Bl-tag">
- <dt>DEVSTAT_ALL_SUPPORTED</dt>
- <dd>Every statistic type is supported by the device.</dd>
- <dt>DEVSTAT_NO_BLOCKSIZE</dt>
- <dd>This device does not have a blocksize.</dd>
- <dt>DEVSTAT_NO_ORDERED_TAGS</dt>
- <dd>This device does not support ordered tags.</dd>
- <dt>DEVSTAT_BS_UNAVAILABLE</dt>
- <dd>This device supports a blocksize, but it is currently unavailable. This
- flag is most often used with removable media drives.</dd>
-</dl>
-<p class="Pp" id="devstat_end_transaction~3">Transactions to a device fall into
- one of three categories, which are represented in the
- <var class="Va">flags</var> passed into
- <a class="permalink" href="#devstat_end_transaction~3"><code class="Fn">devstat_end_transaction</code></a>().
- The transaction types are as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>typedef enum {
- DEVSTAT_NO_DATA = 0x00,
- DEVSTAT_READ = 0x01,
- DEVSTAT_WRITE = 0x02,
- DEVSTAT_FREE = 0x03
-} devstat_trans_flags;
-#define DEVSTAT_N_TRANS_FLAGS 4</pre>
-</div>
-<p class="Pp">DEVSTAT_NO_DATA is a type of transactions to the device which are
- neither reads or writes. For instance, SCSI drivers often send a test unit
- ready command to SCSI devices. The test unit ready command does not read or
- write any data. It merely causes the device to return its status.</p>
-<p class="Pp" id="devstat_end_transaction~4">There are four possible values for
- the <var class="Va">tag_type</var> argument to
- <a class="permalink" href="#devstat_end_transaction~4"><code class="Fn">devstat_end_transaction</code></a>():</p>
-<dl class="Bl-tag">
- <dt>DEVSTAT_TAG_SIMPLE</dt>
- <dd>The transaction had a simple tag.</dd>
- <dt>DEVSTAT_TAG_HEAD</dt>
- <dd>The transaction had a head of queue tag.</dd>
- <dt>DEVSTAT_TAG_ORDERED</dt>
- <dd>The transaction had an ordered tag.</dd>
- <dt>DEVSTAT_TAG_NONE</dt>
- <dd>The device does not support tags.</dd>
-</dl>
-<p class="Pp" id="devstat_end_transaction~5">The tag type values correspond to
- the lower four bits of the SCSI tag definitions. In CAM, for instance, the
- <var class="Va">tag_action</var> from the CCB is ORed with 0xf to determine
- the tag type to pass in to
- <a class="permalink" href="#devstat_end_transaction~5"><code class="Fn">devstat_end_transaction</code></a>().</p>
-<p class="Pp">There is a macro, <code class="Dv">DEVSTAT_VERSION</code> that is
- defined in
- <code class="In">&lt;<a class="In">sys/devicestat.h</a>&gt;</code>. This is
- the current version of the <code class="Nm">devstat</code> subsystem, and it
- should be incremented each time a change is made that would require
- recompilation of userland programs that access
- <code class="Nm">devstat</code> statistics. Userland programs use this
- version, via the <var class="Va">kern.devstat.version</var>
- <code class="Nm">sysctl</code> variable to determine whether they are in
- sync with the kernel <code class="Nm">devstat</code> structures.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">systat(1)</a>, <a class="Xr">devstat(3)</a>,
- <a class="Xr">iostat(8)</a>, <a class="Xr">rpc.rstatd(8)</a>,
- <a class="Xr">vmstat(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">devstat</code> statistics system appeared in
- <span class="Ux">FreeBSD 3.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Kenneth Merry</span>
- &lt;<a class="Mt" href="mailto:ken@FreeBSD.org">ken@FreeBSD.org</a>&gt;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">There may be a need for <code class="Fn">spl</code>() protection
- around some of the <code class="Nm">devstat</code> list manipulation code to
- ensure, for example, that the list of devices is not changed while someone
- is fetching the <var class="Va">kern.devstat.all</var>
- <code class="Nm">sysctl</code> variable.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 15, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/devtoname.9 4.html b/static/freebsd/man9/devtoname.9 4.html
deleted file mode 100644
index 53231f0a..00000000
--- a/static/freebsd/man9/devtoname.9 4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DEVTONAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DEVTONAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">devtoname</code> &#x2014;
- <span class="Nd">converts character device into a string indicating the
- device name</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">devtoname</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#devtoname"><code class="Fn" id="devtoname">devtoname</code></a>()
- function returns a pointer to the name of the device passed to it. The name
- is whatever was set to it in
- <a class="permalink" href="#make_dev"><code class="Fn" id="make_dev">make_dev</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">devtoname</code>() interface first appeared
- in <span class="Ux">FreeBSD 4.0</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 10, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/disk.9 3.html b/static/freebsd/man9/disk.9 3.html
deleted file mode 100644
index 6374b646..00000000
--- a/static/freebsd/man9/disk.9 3.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DISK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DISK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">disk</code> &#x2014; <span class="Nd">kernel disk
- storage API</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom_disk.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct disk *</var>
- <br/>
- <code class="Fn">disk_alloc</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">disk_create</code>(<var class="Fa" style="white-space: nowrap;">struct
- disk *disk</var>, <var class="Fa" style="white-space: nowrap;">int
- version</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">disk_gone</code>(<var class="Fa" style="white-space: nowrap;">struct
- disk *disk</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">disk_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- disk *disk</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">disk_resize</code>(<var class="Fa" style="white-space: nowrap;">struct
- disk *disk</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">disk_add_alias</code>(<var class="Fa" style="white-space: nowrap;">struct
- disk *disk</var>, <var class="Fa" style="white-space: nowrap;">const char
- *alias</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The disk storage API permits kernel device drivers providing
- access to disk-like storage devices to advertise the device to other kernel
- components, including <a class="Xr">GEOM(4)</a> and
- <a class="Xr">devfs(4)</a>.</p>
-<p class="Pp">Each disk device is described by a <var class="Vt">struct
- disk</var> structure, which contains a variety of parameters for the disk
- device, function pointers for various methods that may be performed on the
- device, as well as private data storage for the device driver. In addition,
- some fields are reserved for use by GEOM in managing access to the device
- and its statistics.</p>
-<p class="Pp" id="disk_alloc">GEOM has the ownership of <var class="Vt">struct
- disk</var>, and drivers must allocate storage for it with the
- <a class="permalink" href="#disk_alloc"><code class="Fn">disk_alloc</code></a>()
- function, fill in the fields and call <code class="Fn">disk_create</code>()
- when the device is ready to service requests.
- <a class="permalink" href="#disk_add_alias"><code class="Fn" id="disk_add_alias">disk_add_alias</code></a>()
- adds an alias for the disk and must be called before
- <code class="Fn">disk_create</code>(), but may be called multiple times. For
- each alias added, a device node will be created with
- <a class="Xr">make_dev_alias(9)</a> in the same way primary device nodes are
- created with <a class="Xr">make_dev(9)</a> for <var class="Va">d_name</var>
- and <var class="Va">d_unit</var>. Care should be taken to ensure that only
- one driver creates aliases for any given name.
- <a class="permalink" href="#disk_resize"><code class="Fn" id="disk_resize">disk_resize</code></a>()
- can be called by the driver after modifying
- <var class="Va">d_mediasize</var> to notify GEOM about the disk capacity
- change. The <var class="Fa">flags</var> field should be set to either
- M_WAITOK, or M_NOWAIT. <code class="Fn">disk_gone</code>() orphans all of
- the providers associated with the drive, setting an error condition of ENXIO
- in each one. In addition, it prevents a re-taste on last close for writing
- if an error condition has been set in the provider. After calling
- <a class="permalink" href="#disk_destroy"><code class="Fn" id="disk_destroy">disk_destroy</code></a>(),
- the device driver is not allowed to access the contents of
- <var class="Vt">struct disk</var> anymore.</p>
-<p class="Pp" id="disk_create">The
- <a class="permalink" href="#disk_create"><code class="Fn">disk_create</code></a>()
- function takes a second parameter, <var class="Fa">version</var>, which must
- always be passed <code class="Dv">DISK_VERSION</code>. If GEOM detects that
- the driver is compiled against an unsupported version, it will ignore the
- device and print a warning on the console.</p>
-<section class="Ss">
-<h2 class="Ss" id="Descriptive_Fields"><a class="permalink" href="#Descriptive_Fields">Descriptive
- Fields</a></h2>
-<p class="Pp">The following fields identify the disk device described by the
- structure instance, and must be filled in prior to submitting the structure
- to <code class="Fn">disk_create</code>() and may not be subsequently
- changed:</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">u_int</var> <var class="Va">d_flags</var></dt>
- <dd>Optional flags indicating to the storage framework what optional features
- or descriptions the storage device driver supports. Currently supported
- flags are <code class="Dv">DISKFLAG_OPEN</code> (maintained by storage
- framework), <code class="Dv">DISKFLAG_CANDELETE</code> (maintained by
- device driver), and <code class="Dv">DISKFLAG_CANFLUSHCACHE</code>
- (maintained by device driver).</dd>
- <dt><var class="Vt">const char *</var> <var class="Va">d_name</var></dt>
- <dd>Holds the name of the storage device class, e.g.,
- &#x201C;<code class="Li">ahd</code>&#x201D;. This value typically uniquely
- identifies a particular driver device, and must not conflict with devices
- serviced by other device drivers.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">d_unit</var></dt>
- <dd>Holds the instance of the storage device class, e.g.,
- &#x201C;<code class="Li">4</code>&#x201D;. This namespace is managed by
- the device driver, and assignment of unit numbers might be a property of
- probe order, or in some cases topology. Together, the
- <var class="Va">d_name</var> and <var class="Va">d_unit</var> values will
- uniquely identify a disk storage device.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Disk_Device_Methods"><a class="permalink" href="#Disk_Device_Methods">Disk
- Device Methods</a></h2>
-<p class="Pp">The following fields identify various disk device methods, if
- implemented:</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">disk_open_t *</var> <var class="Va">d_open</var></dt>
- <dd>Optional: invoked when the disk device is opened. If no method is
- provided, open will always succeed.</dd>
- <dt><var class="Vt">disk_close_t *</var> <var class="Va">d_close</var></dt>
- <dd>Optional: invoked when the disk device is closed. Although an error code
- may be returned, the call should always terminate any state setup by the
- corresponding open method call.</dd>
- <dt><var class="Vt">disk_strategy_t *</var>
- <var class="Va">d_strategy</var></dt>
- <dd>Mandatory: invoked when a new <var class="Vt">struct bio</var> is to be
- initiated on the disk device.</dd>
- <dt><var class="Vt">disk_ioctl_t *</var> <var class="Va">d_ioctl</var></dt>
- <dd>Optional: invoked when an I/O control operation is initiated on the disk
- device. Please note that for security reasons these operations should not
- be able to affect other devices than the one on which they are
- performed.</dd>
- <dt><var class="Vt">dumper_t *</var> <var class="Va">d_dump</var></dt>
- <dd>Optional: if configured with <a class="Xr">dumpon(8)</a>, this function is
- invoked from a very restricted system state after a kernel panic to record
- a copy of the system RAM to the disk.</dd>
- <dt id="g_io_deliver"><var class="Vt">disk_getattr_t *</var>
- <var class="Va">d_getattr</var></dt>
- <dd>Optional: if this method is provided, it gives the disk driver the
- opportunity to override the default GEOM response to BIO_GETATTR requests.
- This function should return -1 if the attribute is not handled, 0 if the
- attribute is handled, or an errno to be passed to
- <a class="permalink" href="#g_io_deliver"><code class="Fn">g_io_deliver</code></a>().</dd>
- <dt id="disk_gone"><var class="Vt">disk_gone_t *</var>
- <var class="Va">d_gone</var></dt>
- <dd>Optional: if this method is provided, it will be called after
- <a class="permalink" href="#disk_gone"><code class="Fn">disk_gone</code></a>()
- is called, once GEOM has finished its cleanup process. Once this callback
- is called, it is safe for the disk driver to free all of its resources, as
- it will not be receiving further calls from GEOM.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Mandatory_Media_Properties"><a class="permalink" href="#Mandatory_Media_Properties">Mandatory
- Media Properties</a></h2>
-<p class="Pp">The following fields identify the size and granularity of the disk
- device. These fields must stay stable from return of the drivers open method
- until the close method is called, but it is perfectly legal to modify them
- in the open method before returning.</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">u_int</var> <var class="Va">d_sectorsize</var></dt>
- <dd>The sector size of the disk device in bytes.</dd>
- <dt><var class="Vt">off_t</var> <var class="Va">d_mediasize</var></dt>
- <dd>The size of the disk device in bytes.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">d_maxsize</var></dt>
- <dd>The maximum supported size in bytes of an I/O request. Requests larger
- than this size will be chopped up by GEOM.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Optional_Media_Properties"><a class="permalink" href="#Optional_Media_Properties">Optional
- Media Properties</a></h2>
-<p class="Pp">These optional fields can provide extra information about the disk
- device. Do not initialize these fields if the field/concept does not apply.
- These fields must stay stable from return of the drivers open method until
- the close method is called, but it is perfectly legal to modify them in the
- open method before returning.</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">u_int</var> <var class="Va">d_fwsectors</var>,
- <var class="Vt">u_int</var> <var class="Va">d_fwheads</var></dt>
- <dd>The number of sectors and heads advertised on the disk device by the
- firmware or BIOS. These values are almost universally bogus, but on some
- architectures necessary for the correct calculation of disk
- partitioning.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">d_stripeoffset</var>,
- <var class="Vt">u_int</var> <var class="Va">d_stripesize</var></dt>
- <dd>These two fields can be used to describe the width and location of natural
- performance boundaries for most disk technologies. Please see
- <span class="Pa">src/sys/geom/notes</span> for details.</dd>
- <dt><var class="Vt">char</var>
- <var class="Va">d_ident[DISK_IDENT_SIZE]</var></dt>
- <dd>This field can and should be used to store disk's serial number if the
- d_getattr method described above isn't implemented, or if it does not
- support the GEOM::ident attribute.</dd>
- <dt><var class="Vt">char</var>
- <var class="Va">d_descr[DISK_IDENT_SIZE]</var></dt>
- <dd>This field can be used to store the disk vendor and product
- description.</dd>
- <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_vendor</var></dt>
- <dd>This field can be used to store the PCI vendor ID for the HBA connected to
- the disk.</dd>
- <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_device</var></dt>
- <dd>This field can be used to store the PCI device ID for the HBA connected to
- the disk.</dd>
- <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_subvendor</var></dt>
- <dd>This field can be used to store the PCI subvendor ID for the HBA connected
- to the disk.</dd>
- <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_subdevice</var></dt>
- <dd>This field can be used to store the PCI subdevice ID for the HBA connected
- to the disk.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Driver_Private_Data"><a class="permalink" href="#Driver_Private_Data">Driver
- Private Data</a></h2>
-<p class="Pp">This field may be used by the device driver to store a pointer to
- private data to implement the disk service.</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">void *</var> <var class="Va">d_drv1</var></dt>
- <dd>Private data pointer. Typically used to store a pointer to the drivers
- <var class="Vt">softc</var> structure for this disk device.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">GEOM(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">kernel disk storage API</code> first appeared
- in <span class="Ux">FreeBSD 4.9</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Disk aliases are not a general purpose aliasing mechanism, but are
- intended only to ease the transition from one name to another. They can be
- used to ensure that nvd0 and nda0 are the same thing. They cannot be used to
- implement the diskX concept from macOS.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 30, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/dnv.9 3.html b/static/freebsd/man9/dnv.9 3.html
deleted file mode 100644
index 3e295eaf..00000000
--- a/static/freebsd/man9/dnv.9 3.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DNV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DNV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">dnvlist_get</code>,
- <code class="Nm">dnvlist_take</code> &#x2014; <span class="Nd">API for
- getting name/value pairs with a default value</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1>
-<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/dnv.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">dnvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">bool
- defval</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">dnvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- defval</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">dnvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *defval</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">dnvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *defval</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">dnvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- defval</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">dnvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>, <var class="Fa" style="white-space: nowrap;">void
- *defval</var>, <var class="Fa" style="white-space: nowrap;">size_t
- defsize</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">dnvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">bool
- defval</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">dnvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- defval</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">dnvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *defval</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">dnvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *defval</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">dnvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- defval</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">dnvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>, <var class="Fa" style="white-space: nowrap;">void
- *defval</var>, <var class="Fa" style="white-space: nowrap;">size_t
- defsize</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">libnv</code> library permits easy management
- of name/value pairs and can send and receive them over sockets. For more
- information, see <a class="Xr">nv(9)</a>.</p>
-<p class="Pp">The <code class="Nm">dnvlist_get</code> functions return the value
- associated with <var class="Fa">name</var>. If an element named
- <var class="Fa">name</var> does not exist, the function returns the value
- provided in <var class="Fa">defval</var>. Returned strings, nvlists,
- descriptors, binaries, or arrays must not be modified by the user since they
- still belong to the nvlist. If the nvlist is in an error state, attempts to
- use any of these functions will cause the program to abort.</p>
-<p class="Pp" id="free">The <code class="Nm">dnvlist_take</code> functions
- return the value associated with <var class="Fa">name</var> and removes the
- associated element from <var class="Fa">nvl</var>. If an element named
- <var class="Fa">name</var> does not exist, the value provided in
- <code class="Nm">defval</code> is returned. When the value is a string,
- binary, or array value, the caller is responsible for freeing returned
- memory with
- <a class="permalink" href="#free"><code class="Fn">free</code></a>(<var class="Fa">3</var>).
- When the value is an nvlist, the caller is responsible for destroying the
- returned nvlist with
- <a class="permalink" href="#nvlist_destroy"><code class="Fn" id="nvlist_destroy">nvlist_destroy</code></a>().
- When the value is a descriptor, the caller is responsible for closing the
- returned descriptor with
- <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">free(3)</a>,
- <a class="Xr">nv(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">dnv</code> API appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">dnv</code> API was implemented by
- <span class="An">Pawel Jakub Dawidek</span>
- &lt;<a class="Mt" href="mailto:pawel@dawidek.net">pawel@dawidek.net</a>&gt;
- under sponsorship from the FreeBSD Foundation. This manual page was written
- by <span class="An">Adam Starak</span>
- &lt;<a class="Mt" href="mailto:starak.adam@gmail.com">starak.adam@gmail.com</a>&gt;</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/domain.9 3.html b/static/freebsd/man9/domain.9 3.html
deleted file mode 100644
index 70233fd5..00000000
--- a/static/freebsd/man9/domain.9 3.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DOMAIN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DOMAIN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">domain</code>, <code class="Nm">protosw</code>
- &#x2014; <span class="Nd">programming interface for kernel socket
- implementation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/protosw.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/domain.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">domain_add</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">domain_remove</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">DOMAIN_SET</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">protosw_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>, <var class="Fa" style="white-space: nowrap;">struct
- protosw *pr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">protosw_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- protosw *pr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">domain</code> subsystem allows implementation
- of communication protocols that are exposed to the userland via the
- <a class="Xr">socket(2)</a> API. When an application performs a
- <a class="permalink" href="#socket"><code class="Fn" id="socket">socket</code></a>(<var class="Fa">domain</var>,
- <var class="Fa">type</var>, <var class="Fa">protocol</var>) syscall, the
- kernel searches for a <code class="Nm">domain</code> matching the
- <var class="Ar">domain</var> argument, then within this domain, searches for
- a protocol matching <var class="Ar">type</var>. If the third argument,
- <var class="Ar">protocol</var>, is not <code class="Dv">0</code>, that value
- must also match. The structure found must implement certain methods, so that
- <a class="Xr">socket(2)</a> API works for this particular kind of a
- socket.</p>
-<p class="Pp">A minimal <code class="Nm">domain</code> structure implementing a
- domain shall be initialized with sparse C99 initializer and has public
- fields as follows:</p>
-<div class="Bd Pp Li">
-<pre>struct domain {
- /*
- * Mandatory fields.
- */
- int dom_family; /* PF_xxx, first argument of socket(2) */
- char *dom_name; /* text name of the domain */
- u_int dom_nprotosw; /* length of dom_protosw[] */
- /*
- * Following methods are optional.
- */
- int (*dom_probe)(void); /* check for support */
- struct rib_head *(*dom_rtattach)(uint32_t); /* init route table */
- void (*dom_rtdetach)(struct rib_head *); /* clean up table */
- void *(*dom_ifattach)(struct ifnet *); /* interface attach */
- void (*dom_ifdetach)(struct ifnet *, void *);/* &amp; detach callbacks */
- int (*dom_ifmtu)(struct ifnet *); /* mtu change */
- /*
- * Mandatory variable size array of pointers to protosw structs.
- */
- struct protosw *dom_protosw[];
-};</pre>
-</div>
-<p class="Pp">Each domain contains the <var class="Va">dom_protosw</var> array
- of protocol switch structures (<var class="Vt">struct protosw *</var>), one
- for each socket type supported. The array may have
- <code class="Dv">NULL</code> spacers for loadable protocols. Sparse C99
- initializers shall be used to initialize <code class="Nm">protosw</code>
- structures. The structure has mandatory field <var class="Va">pr_type</var>
- and mandatory <var class="Va">pr_attach</var> method. The rest of the
- methods are optional, but a meaningful protocol should implement some.</p>
-<div class="Bd Pp Li">
-<pre>struct protosw {
- short pr_type; /* second argument of socket(2) */
- short pr_protocol; /* third argument of socket(2) or 0 */
- short pr_flags; /* see protosw.h */
- pr_soreceive_t *pr_soreceive; /* recv(2) */
- pr_rcvd_t *pr_rcvd; /* soreceive_generic() if PR_WANTRCV */
- pr_sosend_t *pr_sosend; /* send(2) */
- pr_send_t *pr_send; /* send(2) via sosend_generic() */
- pr_ready_t *pr_ready; /* sendfile/ktls readyness */
- pr_sopoll_t *pr_sopoll; /* poll(2) */
- pr_attach_t *pr_attach; /* creation: socreate(), sonewconn() */
- pr_detach_t *pr_detach; /* destruction: sofree() */
- pr_connect_t *pr_connect; /* connect(2) */
- pr_disconnect_t *pr_disconnect; /* sodisconnect() */
- pr_close_t *pr_close; /* close(2) */
- pr_shutdown_t *pr_shutdown; /* shutdown(2) */
- pr_abort_t *pr_abort; /* abrupt tear down: soabort() */
- pr_aio_queue_t *pr_aio_queue; /* aio(9) */
- pr_bind_t *pr_bind; /* bind(2) */
- pr_bindat_t *pr_bindat; /* bindat(2) */
- pr_listen_t *pr_listen; /* listen(2) */
- pr_accept_t *pr_accept; /* accept(2) */
- pr_connectat_t *pr_connectat; /* connectat(2) */
- pr_connect2_t *pr_connect2; /* socketpair(2) */
- pr_control_t *pr_control; /* ioctl(2) */
- pr_rcvoob_t *pr_rcvoob; /* soreceive_rcvoob() */
- pr_ctloutput_t *pr_ctloutput; /* control output (from above) */
- pr_peeraddr_t *pr_peeraddr; /* getpeername(2) */
- pr_sockaddr_t *pr_sockaddr; /* getsockname(2) */
- pr_sense_t *pr_sense; /* stat(2) */
-};</pre>
-</div>
-<p class="Pp">The following functions handle the registration of new domains and
- protocols.</p>
-<p class="Pp" id="domain_add"><a class="permalink" href="#domain_add"><code class="Fn">domain_add</code></a>()
- adds a new protocol domain to the system. In most cases
- <code class="Fn">domain_add</code>() is not called directly, instead
- <a class="permalink" href="#DOMAIN_SET"><code class="Fn" id="DOMAIN_SET">DOMAIN_SET</code></a>()
- is used, which is a wrapper around
- <a class="permalink" href="#SYSINIT"><code class="Fn" id="SYSINIT">SYSINIT</code></a>()
- macro. If the new domain has defined a <var class="Va">dom_probe</var>
- routine, it is called first in <code class="Fn">domain_add</code>() to
- determine if the domain should be supported on the current system. If the
- probe routine returns a non-0 value, then the domain will not be added. Once
- a domain is added it cannot be completely unloaded. This is because there is
- no reference counting system in place to determine if there are any active
- references from sockets within that domain. However, the experimental
- <a class="permalink" href="#domain_remove"><code class="Fn" id="domain_remove">domain_remove</code></a>()
- exists, and unloadable domains may be supported in the future.</p>
-<p class="Pp" id="protosw_register"><a class="permalink" href="#protosw_register"><code class="Fn">protosw_register</code></a>()
- dynamically adds a protocol to a domain, if the latter has an empty slot in
- its <var class="Va">dom_protosw</var>. Dynamically added protocol can later
- be unloaded with
- <a class="permalink" href="#protosw_unregister"><code class="Fn" id="protosw_unregister">protosw_unregister</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">domain_add</code>() never fails, but it may
- not add a domain if its <var class="Va">dom_probe</var> fails.</p>
-<p class="Pp">The <code class="Fn">protosw_register</code>() function may fail
- if:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">EEXIST</code>]</dt>
- <dd>A protocol with the same value of <var class="Va">pr_type</var> and
- <var class="Va">pr_protocol</var> already exists in the domain.</dd>
- <dt>[<code class="Er">ENOMEM</code>]</dt>
- <dd>The domain doesn't have any NULL slots in its
- <var class="Va">dom_protosw</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">socket(2)</a>, <a class="Xr">SYSINIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">domain</code> subsystem first appeared in
- <span class="Ux">4.3BSD</span> as the part of the very first
- <a class="Xr">socket(2)</a> API implementation.</p>
-<p class="Pp">The <code class="Nm">domain</code> subsystem and this manual page
- were significantly rewritten in <span class="Ux">FreeBSD 14</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;
- and
- <br/>
- <span class="An">Gleb Smirnoff</span>
- &lt;<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 14, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/domainset.9 3.html b/static/freebsd/man9/domainset.9 3.html
deleted file mode 100644
index cef5b340..00000000
--- a/static/freebsd/man9/domainset.9 3.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DOMAINSET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DOMAINSET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">domainset(9)</code> &#x2014;
- <span class="Nd">domainset functions and operation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/_domainset.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/domainset.h</a>&gt;</code></p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct domainset {
- domainset_t ds_mask;
- uint16_t ds_policy;
- domainid_t ds_prefer;
- ...
-};</pre>
-</div>
-<p class="Pp">
- <br/>
- <var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">DOMAINSET_FIXED</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p>
-<p class="Pp"><var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">DOMAINSET_FT</code>();</p>
-<p class="Pp"><var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">DOMAINSET_IL</code>();</p>
-<p class="Pp"><var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">DOMAINSET_RR</code>();</p>
-<p class="Pp"><var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">DOMAINSET_PREF</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p>
-<p class="Pp"><var class="Ft">struct domainset *</var>
- <br/>
- <code class="Fn">domainset_create</code>(<var class="Fa" style="white-space: nowrap;">const
- struct domainset *key</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">domainset_populate</code>(<var class="Fa" style="white-space: nowrap;">struct
- domainset *domain</var>,
- <var class="Fa" style="white-space: nowrap;">domainset_t *mask</var>,
- <var class="Fa" style="white-space: nowrap;">int policy</var>,
- <var class="Fa" style="white-space: nowrap;">size_t mask_size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_handle_domainset</code>(<var class="Fa" style="white-space: nowrap;">SYSCTL_HANDLER_ARGS</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">domainset(9)</code> API provides memory
- domain allocation policy for NUMA machines. Each
- <var class="Vt">domainset</var> contains a bitmask of allowed domains, an
- integer policy, and an optional preferred domain. Together, these specify a
- search order for memory allocations as well as the ability to restrict
- threads and objects to a subset of available memory domains for system
- partitioning and resource management.</p>
-<p class="Pp">Every thread in the system and optionally every
- <var class="Vt">vm_object_t</var>, which is used to represent files and
- other memory sources, has a reference to a <var class="Vt">struct
- domainset</var>. The domainset associated with the object is consulted first
- and the system falls back to the thread policy if none exists.</p>
-<p class="Pp">The allocation policy has the following possible values:</p>
-<dl class="Bl-tag">
- <dt id="DOMAINSET_POLICY_ROUNDROBIN"><a class="permalink" href="#DOMAINSET_POLICY_ROUNDROBIN"><code class="Dv">DOMAINSET_POLICY_ROUNDROBIN</code></a></dt>
- <dd>Memory is allocated from each domain in the mask in a round-robin fashion.
- This distributes bandwidth evenly among available domains. This policy can
- specify a single domain for a fixed allocation.</dd>
- <dt id="DOMAINSET_POLICY_FIRSTTOUCH"><a class="permalink" href="#DOMAINSET_POLICY_FIRSTTOUCH"><code class="Dv">DOMAINSET_POLICY_FIRSTTOUCH</code></a></dt>
- <dd>Memory is allocated from the node that it is first accessed on. Allocation
- falls back to round-robin if the current domain is not in the allowed set
- or is out of memory. This policy optimizes for locality but may give
- pessimal results if the memory is accessed from many CPUs that are not in
- the local domain.</dd>
- <dt id="DOMAINSET_POLICY_PREFER"><a class="permalink" href="#DOMAINSET_POLICY_PREFER"><code class="Dv">DOMAINSET_POLICY_PREFER</code></a></dt>
- <dd>Memory is allocated from the node in the <var class="Vt">prefer</var>
- member. The preferred node must be set in the allowed mask. If the
- preferred node is out of memory the allocation falls back to round-robin
- among allowed sets.</dd>
- <dt id="DOMAINSET_POLICY_INTERLEAVE"><a class="permalink" href="#DOMAINSET_POLICY_INTERLEAVE"><code class="Dv">DOMAINSET_POLICY_INTERLEAVE</code></a></dt>
- <dd>Memory is allocated in a striped fashion with multiple pages allocated to
- each domain in the set according to the offset within the object. The
- strip width is object dependent and may be as large as a super-page (2MB
- on amd64). This gives good distribution among memory domains while keeping
- system efficiency higher and is preferential to round-robin for general
- use.</dd>
-</dl>
-<p class="Pp" id="DOMAINSET_FIXED">The
- <a class="permalink" href="#DOMAINSET_FIXED"><code class="Fn">DOMAINSET_FIXED</code></a>(),
- <a class="permalink" href="#DOMAINSET_FT"><code class="Fn" id="DOMAINSET_FT">DOMAINSET_FT</code></a>(),
- <a class="permalink" href="#DOMAINSET_IL"><code class="Fn" id="DOMAINSET_IL">DOMAINSET_IL</code></a>(),
- <a class="permalink" href="#DOMAINSET_RR"><code class="Fn" id="DOMAINSET_RR">DOMAINSET_RR</code></a>()
- and
- <a class="permalink" href="#DOMAINSET_PREF"><code class="Fn" id="DOMAINSET_PREF">DOMAINSET_PREF</code></a>()
- macros provide pointers to global pre-defined policies for use when the
- desired policy is known at compile time.
- <code class="Fn">DOMAINSET_FIXED</code>() is a policy which only permits
- allocations from the specified domain.
- <code class="Fn">DOMAINSET_FT</code>() is a policy which attempts to
- allocate memory local to the current CPU, falling back to a round-robin
- policy if the initial allocation fails.
- <code class="Fn">DOMAINSET_IL</code>() and
- <code class="Fn">DOMAINSET_RR</code>() provide round-robin selection among
- all domains in the system, corresponding to the
- <code class="Dv">DOMAINSET_POLICY_INTERLEAVE</code> and
- <code class="Dv">DOMAINSET_POLICY_ROUNDROBIN</code> policies, respectively.
- The <code class="Fn">DOMAINSET_PREF</code>() policies attempt allocation
- from the specified domain, but unlike
- <code class="Fn">DOMAINSET_FIXED</code>() will fall back to other domains to
- satisfy the request. These policies should be used in preference to
- <code class="Fn">DOMAINSET_FIXED</code>() to avoid blocking indefinitely on
- a <code class="Dv">M_WAITOK</code> request.</p>
-<p class="Pp" id="domainset_create">The
- <a class="permalink" href="#domainset_create"><code class="Fn">domainset_create</code></a>()
- function takes a partially filled in domainset as a key and returns a valid
- domainset or NULL. It is critical that consumers not use domainsets that
- have not been returned by this function. <var class="Vt">domainset</var> is
- an immutable type that is shared among all matching keys and must not be
- modified after return.</p>
-<p class="Pp" id="domainset_populate">The
- <a class="permalink" href="#domainset_populate"><code class="Fn">domainset_populate</code></a>()
- function fills a <var class="Vt">domainset</var> struct using a domain mask
- and policy. It is used for validating and translating a domain mask and
- policy into a <var class="Vt">domainset</var> struct when creating a custom
- domainset using <var class="Vt">domainset_create</var>.</p>
-<p class="Pp" id="sysctl_handle_domainset">The
- <a class="permalink" href="#sysctl_handle_domainset"><code class="Fn">sysctl_handle_domainset</code></a>()
- function is provided as a convenience for modifying or viewing domainsets
- that are not accessible via <a class="Xr">cpuset(2)</a>. It is intended for
- use with <a class="Xr">sysctl(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpuset(1)</a>, <a class="Xr">cpuset(2)</a>,
- <a class="Xr">cpuset_setdomain(2)</a>, <a class="Xr">bitset(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="In">&lt;<a class="In">sys/domainset.h</a>&gt;</code>
- first appeared in <span class="Ux">FreeBSD 12.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 24, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/dpcpu.9 4.html b/static/freebsd/man9/dpcpu.9 4.html
deleted file mode 100644
index bb0c8df8..00000000
--- a/static/freebsd/man9/dpcpu.9 4.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DPCPU(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DPCPU(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">dpcpu</code> &#x2014; <span class="Nd">Kernel
- Dynamic Per-CPU Memory Allocator</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/pcpu.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Per-CPU_Variable_Definition_and_Declaration"><a class="permalink" href="#Per-CPU_Variable_Definition_and_Declaration">Per-CPU
- Variable Definition and Declaration</a></h2>
-<p class="Pp"><code class="Fn">DPCPU_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">type</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_DEFINE_STATIC</code>(<var class="Fa" style="white-space: nowrap;">type</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">type</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Current_CPU_Accessor_Functions"><a class="permalink" href="#Current_CPU_Accessor_Functions">Current
- CPU Accessor Functions</a></h2>
-<p class="Pp"><code class="Fn">DPCPU_PTR</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_GET</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_SET</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">value</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Named_CPU_Accessor_Functions"><a class="permalink" href="#Named_CPU_Accessor_Functions">Named
- CPU Accessor Functions</a></h2>
-<p class="Pp"><code class="Fn">DPCPU_ID_PTR</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_ID_GET</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">DPCPU_ID_SET</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">value</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">dpcpu</code> instantiates one instance of a
- global variable with each CPU in the system. Dynamically allocated per-CPU
- variables are defined using
- <a class="permalink" href="#DPCPU_DEFINE"><code class="Fn" id="DPCPU_DEFINE">DPCPU_DEFINE</code></a>(),
- which defines a variable of name <var class="Ar">name</var> and type
- <var class="Ar">type</var>. Arbitrary C types may be used, including
- structures and arrays. If no initialization is provided, then each per-CPU
- instance of the variable will be zero-filled (i.e., as though allocated in
- BSS):</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>DPCPU_DEFINE(int, foo_int);</pre>
-</div>
-<p class="Pp">Values may also be initialized statically with the definition,
- causing each per-CPU instance to be initialized with the value:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>DPCPU_DEFINE(int, foo_int) = 1;</pre>
-</div>
-<p class="Pp" id="DPCPU_DEFINE_STATIC">Values that can be defined as
- <code class="Dv">static</code> must use
- <a class="permalink" href="#DPCPU_DEFINE_STATIC"><code class="Fn">DPCPU_DEFINE_STATIC</code></a>():</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>DPCPU_DEFINE_STATIC(int, foo_int);</pre>
-</div>
-<p class="Pp" id="DPCPU_DECLARE"><a class="permalink" href="#DPCPU_DECLARE"><code class="Fn">DPCPU_DECLARE</code></a>()
- produces a declaration of the per-CPU variable suitable for use in header
- files.</p>
-<p class="Pp">The current CPU's variable instance can be accessed via
- <code class="Nm">DPCPU_PTR</code> (which returns a pointer to the per-CPU
- instance), <code class="Nm">DPCPU_GET</code> (which retrieves the value of
- the per-CPU instance), and <code class="Nm">DPCPU_SET</code> (which sets the
- value of the per-CPU instance).</p>
-<p class="Pp">Instances of variables associated with specific CPUs can be
- accessed via the <code class="Nm">DPCPU_ID_PTR</code>,
- <code class="Nm">DPCPU_ID_GET</code>, and
- <code class="Nm">DPGPU_ID_SET</code> accessor functions, which accept an
- additional CPU ID argument, <var class="Ar">cpu</var>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Synchronization"><a class="permalink" href="#Synchronization">Synchronization</a></h2>
-<p class="Pp">In addition to the ordinary synchronization concerns associated
- with global variables, which may imply the use of
- <a class="Xr">atomic(9)</a>, <a class="Xr">mutex(9)</a>, or other kernel
- synchronization primitives, it is further the case that thread migration
- could dynamically change the instance of a variable being accessed by a
- thread between operations. This requires additional care when reasoning
- about and protecting per-CPU variables.</p>
-<p class="Pp">For example, it may be desirable to protect access using
- <a class="Xr">critical_section(9)</a> to prevent both preemption and
- migration during use. Alternatively, it may be desirable to cache the CPU ID
- at the start of a sequence of accesses, using suitable synchronization to
- make non-atomic sequences safe in the presence of migration.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>DPCPU_DEFINE_STATIC(int, foo_int);
-DPCPU_DEFINE_STATIC(struct mutex, foo_lock);
-
-void
-foo_int_increment(void)
-{
- int cpu, value;
-
- /* Safe as atomic access. */
- atomic_add_int(DPCPU_PTR(foo_int), 1);
-
- /*
- * Protect with a critical section, which prevents preemption
- * and migration. However, access to instances from remote CPUs
- * is not safe, as critical sections prevent concurrent access
- * only from the current CPU.
- */
- critical_enter();
- value = DPCPU_GET(foo_int);
- value++;
- DPCPU_SET(foo_int, value);
- critical_exit();
-
- /*
- * Protect with a per-CPU mutex, tolerating migration, but
- * potentially accessing the variable from multiple CPUs if
- * migration occurs after reading curcpu. Remote access to a
- * per-CPU variable is safe as long as the correct mutex is
- * acquired.
- */
- cpu = curcpu;
- mtx_lock(DPCPU_ID_PTR(cpu, foo_lock));
- value = DPCPU_ID_GET(cpu, foo_int);
- value++;
- DPCPU_ID_SET(cpu, foo_int);
- mtx_unlock(DPCPU_ID_PTR(cpu, foo_lock));
-}</pre>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">critical_enter(9)</a>,
- <a class="Xr">mutex(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">dpcpu</code> was first introduced by
- <span class="An">Jeff Roberson</span> in <span class="Ux">FreeBSD
- 8.0</span>. This manual page was written by <span class="An">Robert N. M.
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 5, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/drbr.9 3.html b/static/freebsd/man9/drbr.9 3.html
deleted file mode 100644
index 7b88f6ba..00000000
--- a/static/freebsd/man9/drbr.9 3.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DRBR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DRBR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">drbr</code>, <code class="Nm">drbr_free</code>,
- <code class="Nm">drbr_enqueue</code>, <code class="Nm">drbr_dequeue</code>,
- <code class="Nm">drbr_dequeue_cond</code>,
- <code class="Nm">drbr_flush</code>, <code class="Nm">drbr_empty</code>,
- <code class="Nm">drbr_inuse</code> &#x2014; <span class="Nd">network driver
- interface to buf_ring</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">drbr_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">drbr_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">drbr_dequeue</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">drbr_dequeue_cond</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">int (*func)
- (struct mbuf *, void *)</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">drbr_flush</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">drbr_empty</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">drbr_inuse</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- buf_ring *br</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">drbr</code> functions provide an API to
- network drivers for using <a class="Xr">buf_ring(9)</a> for enqueueing and
- dequeueing packets. This is meant as a replacement for the IFQ interface for
- packet queuing. It allows a packet to be enqueued with a single atomic and
- packet dequeue to be done without any per-packet atomics as it is protected
- by the driver's tx queue lock. If <code class="Dv">INVARIANTS</code> is
- enabled,
- <a class="permalink" href="#drbr_dequeue"><code class="Fn" id="drbr_dequeue">drbr_dequeue</code></a>()
- will assert that the tx queue lock is held when it is called.</p>
-<p class="Pp" id="drbr_free">The
- <a class="permalink" href="#drbr_free"><code class="Fn">drbr_free</code></a>()
- function frees all the enqueued mbufs and then frees the buf_ring.</p>
-<p class="Pp" id="drbr_enqueue">The
- <a class="permalink" href="#drbr_enqueue"><code class="Fn">drbr_enqueue</code></a>()
- function is used to enqueue an mbuf to a buf_ring, falling back to the
- ifnet's IFQ if <a class="Xr">ALTQ(4)</a> is enabled.</p>
-<p class="Pp" id="drbr_dequeue~2">The
- <a class="permalink" href="#drbr_dequeue~2"><code class="Fn">drbr_dequeue</code></a>()
- function is used to dequeue an mbuf from a buf_ring or, if
- <a class="Xr">ALTQ(4)</a> is enabled, from the ifnet's IFQ.</p>
-<p class="Pp" id="drbr_dequeue_cond">The
- <a class="permalink" href="#drbr_dequeue_cond"><code class="Fn">drbr_dequeue_cond</code></a>()
- function is used to conditionally dequeue an mbuf from a buf_ring based on
- whether <var class="Fa">func</var> returns <code class="Dv">TRUE</code> or
- <code class="Dv">FALSE</code>.</p>
-<p class="Pp" id="drbr_flush">The
- <a class="permalink" href="#drbr_flush"><code class="Fn">drbr_flush</code></a>()
- function frees all mbufs enqueued in the buf_ring and the ifnet's IFQ.</p>
-<p class="Pp" id="drbr_empty">The
- <a class="permalink" href="#drbr_empty"><code class="Fn">drbr_empty</code></a>()
- function returns <code class="Dv">TRUE</code> if there are no mbufs
- enqueued, <code class="Dv">FALSE</code> otherwise.</p>
-<p class="Pp" id="drbr_inuse">The
- <a class="permalink" href="#drbr_inuse"><code class="Fn">drbr_inuse</code></a>()
- function returns the number of mbufs enqueued. Note to users that this is
- intrinsically racy as there is no guarantee that there will not be more
- mbufs when <code class="Fn">drbr_dequeue</code>() is actually called.
- Provided the tx queue lock is held there will not be less.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">drbr_enqueue</code>() function returns
- <code class="Er">ENOBUFS</code> if there are no slots available in the
- buf_ring and <code class="Dv">0</code> on success.</p>
-<p class="Pp">The <code class="Fn">drbr_dequeue</code>() and
- <code class="Fn">drbr_dequeue_cond</code>() functions return an mbuf on
- success and <code class="Dv">NULL</code> if the buf_ring is empty.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD
- 8.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 27, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/driver.9 3.html b/static/freebsd/man9/driver.9 3.html
deleted file mode 100644
index 3b34b562..00000000
--- a/static/freebsd/man9/driver.9 3.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DRIVER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DRIVER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">driver</code> &#x2014; <span class="Nd">structure
- describing a device driver</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<div class="Bd Li">
-<pre>#include &lt;sys/param.h&gt;
-#include &lt;sys/kernel.h&gt;
-#include &lt;sys/bus.h&gt;
-#include &lt;sys/module.h&gt;
-
-static int foo_probe(device_t);
-static int foo_attach(device_t);
-static int foo_detach(device_t);
-static int foo_frob(device_t, int, int);
-static int foo_twiddle(device_t, char *);
-
-static device_method_t foo_methods[] = {
- /* Methods from the device interface */
- DEVMETHOD(device_probe, foo_probe),
- DEVMETHOD(device_attach, foo_attach),
- DEVMETHOD(device_detach, foo_detach),
-
- /* Methods from the bogo interface */
- DEVMETHOD(bogo_frob, foo_frob),
- DEVMETHOD(bogo_twiddle, foo_twiddle),
-
- /* Terminate method list */
- DEVMETHOD_END
-};
-
-static driver_t foo_driver = {
- &quot;foo&quot;,
- foo_methods,
- sizeof(struct foo_softc)
-};
-
-DRIVER_MODULE(foo, bogo, foo_driver, NULL, NULL);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each driver in the kernel is described by a
- <code class="Dv">driver_t</code> structure. The structure contains the name
- of the device, a pointer to a list of methods, an indication of the kind of
- device which the driver implements and the size of the private data which
- the driver needs to associate with a device instance. Each driver will
- implement one or more sets of methods (called interfaces). The example
- driver implements the standard &quot;driver&quot; interface and the
- fictitious &quot;bogo&quot; interface.</p>
-<p class="Pp">When a driver is registered with the system (by the
- <code class="Dv">DRIVER_MODULE</code> macro, see
- <a class="Xr">DRIVER_MODULE(9)</a>), it is added to the list of drivers
- contained in the devclass of its parent bus type. For instance all PCI
- drivers would be contained in the devclass named &quot;pci&quot; and all ISA
- drivers would be in the devclass named &quot;isa&quot;. The reason the
- drivers are not held in the device object of the parent bus is to handle
- multiple instances of a given type of bus. The
- <code class="Dv">DRIVER_MODULE</code> macro will also create the devclass
- with the name of the driver and can optionally call extra initialisation
- code in the driver by specifying an extra module event handler and argument
- as the last two arguments.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">DEVICE_ATTACH(9)</a>, <a class="Xr">DEVICE_DETACH(9)</a>,
- <a class="Xr">DEVICE_IDENTIFY(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>,
- <a class="Xr">DEVICE_SHUTDOWN(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">driver</code> framework first appeared in
- <span class="Ux">FreeBSD 2.2.7</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 19, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ecn.9 3.html b/static/freebsd/man9/ecn.9 3.html
deleted file mode 100644
index aa2145aa..00000000
--- a/static/freebsd/man9/ecn.9 3.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ECN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ECN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ecn</code>,
- <code class="Nm">ip_ecn_ingress</code>,
- <code class="Nm">ip_ecn_egress</code>,
- <code class="Nm">ip6_ecn_ingress</code>,
- <code class="Nm">ip6_ecn_egress</code> &#x2014; <span class="Nd">IP ECN
- interfaces for tunnel encapsulation/decapsulation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/netinet/ip_ecn.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/netinet6/ip6_ecn.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Constants"><a class="permalink" href="#Constants">Constants</a></h2>
-<p class="Pp"><code class="Dv">ECN_COMPLETE</code>
- <code class="Dv">ECN_ALLOWED</code> <code class="Dv">ECN_FORBIDDEN</code>
- <code class="Dv">ECN_NOCARE</code></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ECN_Manipulation_Functions"><a class="permalink" href="#ECN_Manipulation_Functions">ECN
- Manipulation Functions</a></h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ip_ecn_ingress</code>(<var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t
- *inner</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ip6_ecn_ingress</code>(<var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint32_t
- *inner</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ip_ecn_egress</code>(<var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t
- *inner</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ip6_ecn_egress</code>(<var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint32_t
- *inner</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#ip_ecn_ingress"><code class="Fn" id="ip_ecn_ingress">ip_ecn_ingress</code></a>()
- and <code class="Fn">ip_ecn_egress</code>() interfaces implement Explicit
- Congestion Notification (ECN) processing for tunnel encapsulation (ingress)
- and decapsulation (egress). They operate on the ECN bits in the IP Type of
- Service (TOS) or IPv6 Traffic Class (TCLASS) header field. These functions
- implements the standard specification of RFC6040 in
- <var class="Vt">ECN_ALLOWED</var> mode for
- <code class="Fn">ip_ecn_egress</code>() with addition of
- <var class="Vt">ECN_FORBIDDEN</var> mode as compatibility mode in
- <code class="Fn">ip_ecn_ingress</code>().</p>
-<section class="Ss">
-<h2 class="Ss" id="Interface"><a class="permalink" href="#Interface">Interface</a></h2>
-<p class="Pp">The functions for manipulating <var class="Vt">ip_tos</var> and
- <var class="Vt">ipv6_flow</var> are as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><code class="Fn">ip_ecn_ingress</code>()
- <code class="Fn">ip6_ecn_ingress</code>()</dt>
- <dd>Perform ECN processing at encapsulation time (ingress) based on the ECN
- bits of the <var class="Vt">ip_tos</var> field in <var class="Vt">struct
- ip</var> or the <var class="Vt">ip6_flow</var> field in
- <var class="Vt">struct ip6_hdr</var> as <var class="Va">inner</var> to
- <var class="Va">outer</var>. It also copies the DSCP value from
- <var class="Va">inner</var> to <var class="Va">outer</var>.</dd>
- <dt><code class="Fn">ip_ecn_egress</code>()
- <code class="Fn">ip6_ecn_egress</code>()</dt>
- <dd>Perform ECN processing at decapsulation time (egress) based on the ECN
- bits of <var class="Va">outer</var> to <var class="Va">inner</var>.
- <var class="Vt">ECN_ALLOWED</var> mode may modify the
- <var class="Va">inner</var> ECN bits or instruct the caller to drop or log
- by returning <var class="Vt">ECN_WARN</var> or
- <var class="Vt">ECN_ALARM</var> values.</dd>
-</dl>
-</div>
-<p class="Pp" id="ip_ecn_egress">Return codes for
- <a class="permalink" href="#ip_ecn_egress"><code class="Fn">ip_ecn_egress</code></a>()
- are as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ECN_DROP"><a class="permalink" href="#ECN_DROP"><code class="Dv">ECN_DROP</code></a></dt>
- <dd>(0) Caller MUST drop the packet.</dd>
- <dt id="ECN_SUCCESS"><a class="permalink" href="#ECN_SUCCESS"><code class="Dv">ECN_SUCCESS</code></a></dt>
- <dd>(1) Processing succeeded; inner ECN bits may have been updated.</dd>
- <dt id="ECN_WARN"><a class="permalink" href="#ECN_WARN"><code class="Dv">ECN_WARN</code></a></dt>
- <dd>(2) Processing succeeded; caller MAY log a warning for an anomalous ECN
- combination.</dd>
- <dt id="ECN_ALARM"><a class="permalink" href="#ECN_ALARM"><code class="Dv">ECN_ALARM</code></a></dt>
- <dd>(3) Processing succeeded; caller SHOULD log and MAY raise an alarm for a
- serious ECN anomaly.</dd>
-</dl>
-</div>
-<p class="Pp">The following modes are handled by functions:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ECN_COMPLETE"><a class="permalink" href="#ECN_COMPLETE"><code class="Dv">ECN_COMPLETE</code></a></dt>
- <dd>Normal mode as defined in RFC6040. ECN bits are preserved through
- encapsulation; decapsulation follows RFC6040 rules and it returns
- <var class="Vt">ECN_WARN</var> or <var class="Vt">ECN_ALARM</var> values
- when a potentially dangerous packet detected.</dd>
- <dt id="ECN_ALLOWED"><a class="permalink" href="#ECN_ALLOWED"><code class="Dv">ECN_ALLOWED</code></a></dt>
- <dd>Normal mode as defined in RFC6040 without security checks. ECN bits are
- preserved through encapsulation; decapsulation follows RFC6040 rules.</dd>
- <dt id="ECN_FORBIDDEN"><a class="permalink" href="#ECN_FORBIDDEN"><code class="Dv">ECN_FORBIDDEN</code></a></dt>
- <dd>Compatibility mode. ECN is stripped on encapsulation and decapsulation
- will drop packets that carry CE in the outer header. This mode should not
- be used in
- <a class="permalink" href="#ip_ecn_egress~2"><code class="Fn" id="ip_ecn_egress~2">ip_ecn_egress</code></a>()
- or
- <a class="permalink" href="#ip6_ecn_egress"><code class="Fn" id="ip6_ecn_egress">ip6_ecn_egress</code></a>()
- since the <var class="Vt">ECN_ALLOWED</var> mode already covers all
- possible scenarios as specified in RFC6040.</dd>
- <dt id="ECN_NOCARE"><a class="permalink" href="#ECN_NOCARE"><code class="Dv">ECN_NOCARE</code></a></dt>
- <dd>leave ECN bits unchanged and ignored.</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="IPV6_HANDLING"><a class="permalink" href="#IPV6_HANDLING">IPV6
- HANDLING</a></h2>
-<p class="Pp">IPv6 interfaces
- <a class="permalink" href="#ip6_ecn_ingress"><code class="Fn" id="ip6_ecn_ingress">ip6_ecn_ingress</code></a>()
- and <code class="Fn">ip6_ecn_egress</code>() extract the 8-bit DSCP and ECN
- values from the 32-bit <var class="Vt">ip6_flow</var> and insert it to IPv4
- equivalent interfaces.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ip(4)</a>, <a class="Xr">ip6(4)</a>,
- <a class="Xr">ipsec(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Historically <code class="Fn">ip_ecn_egress</code>() used a
- boolean-style return. The current API preserves numeric mapping for drop
- (ECN_DROP == 0) and success (ECN_SUCCESS == 1) but defines additional
- non-zero status codes (ECN_WARN, ECN_ALARM). Callers that only test for
- non-zero success will continue to treat WARN/ALARM as success.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Pouria Mousavizadeh Tehrani</span>
- &lt;<a class="Mt" href="mailto:pouria@FreeBSD.org">pouria@FreeBSD.org</a>&gt;</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 19, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/efirt.9 3.html b/static/freebsd/man9/efirt.9 3.html
deleted file mode 100644
index 6c662062..00000000
--- a/static/freebsd/man9/efirt.9 3.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EFIRT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EFIRT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">efirt</code>, <code class="Nm">efi_rt_ok</code>,
- <code class="Nm">efi_get_table</code>, <code class="Nm">efi_get_time</code>,
- <code class="Nm">efi_get_time_capabilities</code>,
- <code class="Nm">efi_reset_system</code>,
- <code class="Nm">efi_set_time</code>, <code class="Nm">efi_var_get</code>,
- <code class="Nm">efi_var_nextname</code>,
- <code class="Nm">efi_var_set</code> &#x2014; <span class="Nd">kernel access
- to UEFI runtime services</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options EFIRT</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/efi.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_rt_ok</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_get_table</code>(<var class="Fa" style="white-space: nowrap;">struct
- uuid *uuid</var>, <var class="Fa" style="white-space: nowrap;">void
- **ptr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_get_time</code>(<var class="Fa" style="white-space: nowrap;">struct
- efi_tm *tm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_get_time_capabilities</code>(<var class="Fa" style="white-space: nowrap;">struct
- efi_tmcap *tmcap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_reset_system</code>(<var class="Fa" style="white-space: nowrap;">enum
- efi_reset type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_set_time</code>(<var class="Fa" style="white-space: nowrap;">struct
- efi_tm *tm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_var_get</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid
- *vendor</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *attrib</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *datasize</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_var_nextname</code>(<var class="Fa" style="white-space: nowrap;">size_t
- *namesize</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid
- *vendor</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">efi_var_set</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid
- *vendor</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- attrib</var>, <var class="Fa" style="white-space: nowrap;">size_t
- datasize</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">All of the following calls will return
- <code class="Dv">ENXIO</code> if UEFI runtime services are not available.
- <code class="Nm">efirt</code> is currently only available on amd64 and
- arm64.</p>
-<p class="Pp" id="efi_rt_ok">The
- <a class="permalink" href="#efi_rt_ok"><code class="Fn">efi_rt_ok</code></a>()
- Returns 0 if UEFI runtime services are present and functional, or
- <code class="Dv">ENXIO</code> if not.</p>
-<p class="Pp" id="efi_get_table">The
- <a class="permalink" href="#efi_get_table"><code class="Fn">efi_get_table</code></a>()
- function gets a table by uuid from the UEFI system table. Returns 0 if the
- table was found and populates *ptr with the address. Returns
- <code class="Dv">ENXIO</code> if the configuration table or system table are
- unset. Returns <code class="Dv">ENOENT</code> if the requested table cannot
- be found.</p>
-<p class="Pp" id="efi_get_time">The
- <a class="permalink" href="#efi_get_time"><code class="Fn">efi_get_time</code></a>()
- function gets the current time from the RTC, if available. Returns 0 and
- populates the <var class="Vt">struct efi_tm</var> on success. Returns
- <code class="Dv">EINVAL</code> if the <var class="Vt">struct efi_tm</var> is
- <code class="Dv">NULL</code>, or <code class="Dv">EIO</code> if the time
- could not be retrieved due to a hardware error.</p>
-<p class="Pp" id="efi_get_time_capabilities">The
- <a class="permalink" href="#efi_get_time_capabilities"><code class="Fn">efi_get_time_capabilities</code></a>()
- function gets the capabilities from the RTC. Returns 0 and populates the
- <var class="Vt">struct efi_tmcap</var> on success. Returns
- <code class="Dv">EINVAL</code> if the <var class="Vt">struct efi_tm</var> is
- <code class="Dv">NULL</code>, or <code class="Dv">EIO</code> if the time
- could not be retrieved due to a hardware error.</p>
-<p class="Pp" id="efi_reset_system">The
- <a class="permalink" href="#efi_reset_system"><code class="Fn">efi_reset_system</code></a>()
- function requests a reset of the system. The <var class="Fa">type</var>
- argument may be one of the <var class="Vt">enum efi_reset</var> values:</p>
-<dl class="Bl-tag">
- <dt id="EFI_RESET_COLD"><a class="permalink" href="#EFI_RESET_COLD"><code class="Dv">EFI_RESET_COLD</code></a></dt>
- <dd>Perform a cold reset of the system, and reboot.</dd>
- <dt id="EFI_RESET_WARM"><a class="permalink" href="#EFI_RESET_WARM"><code class="Dv">EFI_RESET_WARM</code></a></dt>
- <dd>Perform a warm reset of the system, and reboot.</dd>
- <dt id="EFI_RESET_SHUTDOWN"><a class="permalink" href="#EFI_RESET_SHUTDOWN"><code class="Dv">EFI_RESET_SHUTDOWN</code></a></dt>
- <dd>Power off the system.</dd>
-</dl>
-<p class="Pp" id="efi_set_time">The
- <a class="permalink" href="#efi_set_time"><code class="Fn">efi_set_time</code></a>()
- function sets the time on the RTC to the time described by the
- <var class="Vt">struct efi_tm</var> passed in. Returns 0 on success,
- <code class="Dv">EINVAL</code> if a time field is out of range, or
- <code class="Dv">EIO</code> if the time could not be set due to a hardware
- error.</p>
-<p class="Pp" id="efi_var_get">The
- <a class="permalink" href="#efi_var_get"><code class="Fn">efi_var_get</code></a>()
- function fetches the variable identified by <var class="Fa">vendor</var> and
- <var class="Fa">name</var>. Returns 0 and populates
- <var class="Fa">attrib</var>, <var class="Fa">datasize</var>, and
- <var class="Fa">data</var> on success. Otherwise, one of the following
- errors are returned:</p>
-<dl class="Bl-tag">
- <dt id="ENOENT"><a class="permalink" href="#ENOENT"><code class="Dv">ENOENT</code></a></dt>
- <dd>The variable was not found.</dd>
- <dt id="EOVERFLOW"><a class="permalink" href="#EOVERFLOW"><code class="Dv">EOVERFLOW</code></a></dt>
- <dd><var class="Fa">datasize</var> is not sufficient to hold the variable
- data. <var class="Fa">namesize</var> is updated to reflect the size needed
- to complete the request.</dd>
- <dt id="EINVAL"><a class="permalink" href="#EINVAL"><code class="Dv">EINVAL</code></a></dt>
- <dd>One of <var class="Fa">name</var>, <var class="Fa">vendor</var>, or
- <var class="Fa">datasize</var> are NULL. Alternatively,
- <var class="Fa">datasize</var> is large enough to hold the response but
- <var class="Fa">data</var> is NULL.</dd>
- <dt id="EIO"><a class="permalink" href="#EIO"><code class="Dv">EIO</code></a></dt>
- <dd>The variable could not be retrieved due to a hardware error.</dd>
- <dt id="EDOOFUS"><a class="permalink" href="#EDOOFUS"><code class="Dv">EDOOFUS</code></a></dt>
- <dd>The variable could not be retrieved due to an authentication failure.</dd>
-</dl>
-<p class="Pp" id="efi_var_nextname">The
- <a class="permalink" href="#efi_var_nextname"><code class="Fn">efi_var_nextname</code></a>()
- function is used for enumeration of variables. On the initial call to
- <code class="Fn">efi_var_nextname</code>(), <var class="Fa">name</var>
- should be an empty string. Subsequent calls should pass in the last
- <var class="Fa">name</var> and <var class="Fa">vendor</var> returned until
- <code class="Dv">ENOENT</code> is returned. Returns 0 and populates
- <var class="Fa">namesize</var>, <var class="Fa">name</var>, and
- <var class="Fa">vendor</var> with the next variable's data. Otherwise,
- returns one of the following errors:</p>
-<dl class="Bl-tag">
- <dt id="ENOENT~2"><a class="permalink" href="#ENOENT~2"><code class="Dv">ENOENT</code></a></dt>
- <dd>The next variable was not found.</dd>
- <dt id="EOVERFLOW~2"><a class="permalink" href="#EOVERFLOW~2"><code class="Dv">EOVERFLOW</code></a></dt>
- <dd><var class="Fa">datasize</var> is not sufficient to hold the variable
- data. <var class="Fa">namesize</var> is updated to reflect the size needed
- to complete the request.</dd>
- <dt id="EINVAL~2"><a class="permalink" href="#EINVAL~2"><code class="Dv">EINVAL</code></a></dt>
- <dd>One of <var class="Fa">name</var>, <var class="Fa">vendor</var>, or
- <var class="Fa">datasize</var> are NULL.</dd>
- <dt id="EIO~2"><a class="permalink" href="#EIO~2"><code class="Dv">EIO</code></a></dt>
- <dd>The variable could not be retrieved due to a hardware error.</dd>
-</dl>
-<p class="Pp" id="efi_var_set">The
- <a class="permalink" href="#efi_var_set"><code class="Fn">efi_var_set</code></a>()
- function sets the variable described by <var class="Fa">name</var> and
- <var class="Fa">vendor</var>. Returns 0 if the variable has been
- successfully. Otherwise, returns one of the following errors:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~3"><a class="permalink" href="#EINVAL~3"><code class="Dv">EINVAL</code></a></dt>
- <dd>Either <var class="Fa">attrib</var> was an invalid combination of
- attributes, <var class="Fa">datasize</var> exceeds the maximum allowed
- size, or <var class="Fa">name</var> is an empty Unicode stirng.</dd>
- <dt id="EAGAIN"><a class="permalink" href="#EAGAIN"><code class="Dv">EAGAIN</code></a></dt>
- <dd>Not enough storage is available to hold the variable and its data.</dd>
- <dt id="EIO~3"><a class="permalink" href="#EIO~3"><code class="Dv">EIO</code></a></dt>
- <dd>The variable could not be saved due to a hardware error.</dd>
- <dt id="EROFS"><a class="permalink" href="#EROFS"><code class="Dv">EROFS</code></a></dt>
- <dd>The variable in question is read-only or may not be deleted.</dd>
- <dt id="EDOOFUS~2"><a class="permalink" href="#EDOOFUS~2"><code class="Dv">EDOOFUS</code></a></dt>
- <dd>The variable could not be set due to an authentication failure.</dd>
- <dt id="ENOENT~3"><a class="permalink" href="#ENOENT~3"><code class="Dv">ENOENT</code></a></dt>
- <dd>The variable trying to be updated or deleted was not found.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">efidev(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span>
- &lt;<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 2, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/epoch.9 4.html b/static/freebsd/man9/epoch.9 4.html
deleted file mode 100644
index eb84213b..00000000
--- a/static/freebsd/man9/epoch.9 4.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EPOCH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EPOCH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">epoch</code>,
- <code class="Nm">epoch_context</code>, <code class="Nm">epoch_alloc</code>,
- <code class="Nm">epoch_free</code>, <code class="Nm">epoch_enter</code>,
- <code class="Nm">epoch_exit</code>, <code class="Nm">epoch_wait</code>,
- <code class="Nm">epoch_enter_preempt</code>,
- <code class="Nm">epoch_exit_preempt</code>,
- <code class="Nm">epoch_wait_preempt</code>,
- <code class="Nm">epoch_call</code>,
- <code class="Nm">epoch_drain_callbacks</code>,
- <code class="Nm">in_epoch</code>, <code class="Nm">in_epoch_verbose</code>
- &#x2014; <span class="Nd">kernel epoch based reclamation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/epoch.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>struct epoch; /* Opaque */</pre>
-</div>
-<br/>
-<var class="Vt">typedef struct epoch *epoch_t</var>;
-<div class="Bd Pp Li">
-<pre>struct epoch_context {
- void *data[2];
-};</pre>
-</div>
-<br/>
-<var class="Vt">typedef struct epoch_context *epoch_context_t</var>;
-<br/>
-<var class="Vt">typedef void epoch_callback_t(epoch_context_t)</var>;
-<div class="Bd Pp Li">
-<pre>struct epoch_tracker; /* Opaque */</pre>
-</div>
-<br/>
-<var class="Vt">typedef struct epoch_tracker *epoch_tracker_t</var>;
-<p class="Pp"><var class="Ft">epoch_t</var>
- <br/>
- <code class="Fn">epoch_alloc</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_free</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_enter</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_exit</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_wait</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_enter_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_tracker_t
- et</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_exit_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_tracker_t
- et</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_wait_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_call</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_callback_t
- callback</var>, <var class="Fa" style="white-space: nowrap;">epoch_context_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">epoch_drain_callbacks</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">in_epoch</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">in_epoch_verbose</code>(<var class="Fa" style="white-space: nowrap;">epoch_t
- epoch</var>, <var class="Fa" style="white-space: nowrap;">int
- dump_onfail</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Epochs are used to guarantee liveness and immutability of data by
- deferring reclamation and mutation until a grace period has elapsed. Epochs
- do not have any lock ordering issues. Entering and leaving an epoch section
- will never block.</p>
-<p class="Pp" id="epoch_alloc">Epochs are allocated with
- <a class="permalink" href="#epoch_alloc"><code class="Fn">epoch_alloc</code></a>().
- The <var class="Fa">name</var> argument is used for debugging convenience
- when the <code class="Cd">EPOCH_TRACE</code> kernel option is configured. By
- default, epochs do not allow preemption during sections. By default mutexes
- cannot be held across
- <a class="permalink" href="#epoch_wait_preempt"><code class="Fn" id="epoch_wait_preempt">epoch_wait_preempt</code></a>().
- The <var class="Fa">flags</var> specified are formed by
- <a class="permalink" href="#OR"><i class="Em" id="OR">OR</i></a>'ing the
- following values:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="EPOCH_LOCKED"><a class="permalink" href="#EPOCH_LOCKED"><code class="Dv">EPOCH_LOCKED</code></a></dt>
- <dd>Permit holding mutexes across <code class="Fn">epoch_wait_preempt</code>()
- (requires <code class="Dv">EPOCH_PREEMPT</code>). When doing this one must
- be cautious of creating a situation where a deadlock is possible.</dd>
- <dt id="EPOCH_PREEMPT"><a class="permalink" href="#EPOCH_PREEMPT"><code class="Dv">EPOCH_PREEMPT</code></a></dt>
- <dd>The <var class="Vt">epoch</var> will allow preemption during sections.
- Only non-sleepable locks may be acquired during a preemptible epoch. The
- functions <code class="Fn">epoch_enter_preempt</code>(),
- <code class="Fn">epoch_exit_preempt</code>(), and
- <code class="Fn">epoch_wait_preempt</code>() must be used in place of
- <code class="Fn">epoch_enter</code>(),
- <code class="Fn">epoch_exit</code>(), and
- <code class="Fn">epoch_wait</code>(), respectively.</dd>
-</dl>
-</div>
-<p class="Pp" id="epoch_free"><var class="Vt">epoch</var>s are freed with
- <a class="permalink" href="#epoch_free"><code class="Fn">epoch_free</code></a>().</p>
-<p class="Pp" id="epoch_enter">Threads indicate the start of an epoch critical
- section by calling
- <a class="permalink" href="#epoch_enter"><code class="Fn">epoch_enter</code></a>()
- (or
- <a class="permalink" href="#epoch_enter_preempt"><code class="Fn" id="epoch_enter_preempt">epoch_enter_preempt</code></a>()
- for preemptible epochs). Threads call
- <a class="permalink" href="#epoch_exit"><code class="Fn" id="epoch_exit">epoch_exit</code></a>()
- (or
- <a class="permalink" href="#epoch_exit_preempt"><code class="Fn" id="epoch_exit_preempt">epoch_exit_preempt</code></a>()
- for preemptible epochs) to indicate the end of a critical section.
- <var class="Vt">struct epoch_tracker</var>s are stack objects whose pointers
- are passed to <code class="Fn">epoch_enter_preempt</code>() and
- <code class="Fn">epoch_exit_preempt</code>() (much like
- <var class="Vt">struct rm_priotracker</var>).</p>
-<p class="Pp" id="epoch_call">Threads can defer work until a grace period has
- expired since any thread has entered the epoch either synchronously or
- asynchronously.
- <a class="permalink" href="#epoch_call"><code class="Fn">epoch_call</code></a>()
- defers work asynchronously by invoking the provided
- <var class="Fa">callback</var> at a later time.
- <code class="Fn">epoch_wait</code>() (or
- <code class="Fn">epoch_wait_preempt</code>()) blocks the current thread
- until the grace period has expired and the work can be done safely.</p>
-<p class="Pp" id="epoch_wait">Default, non-preemptible epoch wait
- (<a class="permalink" href="#epoch_wait"><code class="Fn">epoch_wait</code></a>())
- is guaranteed to have much shorter completion times relative to preemptible
- epoch wait
- (<a class="permalink" href="#epoch_wait_preempt~2"><code class="Fn" id="epoch_wait_preempt~2">epoch_wait_preempt</code></a>()).
- (In the default type, none of the threads in an epoch section will be
- preempted before completing its section.)</p>
-<p class="Pp" id="in_epoch">INVARIANTS can assert that a thread is in an epoch
- by using
- <a class="permalink" href="#in_epoch"><code class="Fn">in_epoch</code></a>().
- <code class="Fn">in_epoch</code>(<var class="Fa">epoch</var>) is equivalent
- to invoking
- <a class="permalink" href="#in_epoch_verbose"><code class="Fn" id="in_epoch_verbose">in_epoch_verbose</code></a>(<var class="Fa">epoch</var>,
- <var class="Fa">0</var>). If <code class="Cd">EPOCH_TRACE</code> is enabled,
- <code class="Fn">in_epoch_verbose</code>(<var class="Fa">epoch</var>,
- <var class="Fa">1</var>) provides additional verbose debugging
- information.</p>
-<p class="Pp" id="epoch_wait~2">The epoch API currently does not support
- sleeping in epoch_preempt sections. A caller should never call
- <a class="permalink" href="#epoch_wait~2"><code class="Fn">epoch_wait</code></a>()
- in the middle of an epoch section for the same epoch as this will lead to a
- deadlock.</p>
-<p class="Pp" id="epoch_drain_callbacks">The
- <a class="permalink" href="#epoch_drain_callbacks"><code class="Fn">epoch_drain_callbacks</code></a>()
- function is used to drain all pending callbacks which have been invoked by
- prior <code class="Fn">epoch_call</code>() function calls on the same epoch.
- This function is useful when there are shared memory structure(s) referred
- to by the epoch callback(s) which are not refcounted and are rarely freed.
- The typical place for calling this function is right before freeing or
- invalidating the shared resource(s) used by the epoch callback(s). This
- function can sleep and is not optimized for performance.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">in_epoch</code>(<var class="Fa">curepoch</var>)
- will return 1 if curthread is in curepoch, 0 otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Async free example: Thread 1:</p>
-<div class="Bd Pp Li">
-<pre>int
-in_pcbladdr(struct inpcb *inp, struct in_addr *faddr, struct in_laddr *laddr,
- struct ucred *cred)
-{
- /* ... */
- epoch_enter(net_epoch);
- CK_STAILQ_FOREACH(ifa, &amp;ifp-&gt;if_addrhead, ifa_link) {
- sa = ifa-&gt;ifa_addr;
- if (sa-&gt;sa_family != AF_INET)
- continue;
- sin = (struct sockaddr_in *)sa;
- if (prison_check_ip4(cred, &amp;sin-&gt;sin_addr) == 0) {
- ia = (struct in_ifaddr *)ifa;
- break;
- }
- }
- epoch_exit(net_epoch);
- /* ... */
-}</pre>
-</div>
-Thread 2:
-<div class="Bd Pp Li">
-<pre>void
-ifa_free(struct ifaddr *ifa)
-{
-
- if (refcount_release(&amp;ifa-&gt;ifa_refcnt))
- epoch_call(net_epoch, ifa_destroy, &amp;ifa-&gt;ifa_epoch_ctx);
-}
-
-void
-if_purgeaddrs(struct ifnet *ifp)
-{
-
- /* .... *
- IF_ADDR_WLOCK(ifp);
- CK_STAILQ_REMOVE(&amp;ifp-&gt;if_addrhead, ifa, ifaddr, ifa_link);
- IF_ADDR_WUNLOCK(ifp);
- ifa_free(ifa);
-}</pre>
-</div>
-<p class="Pp">Thread 1 traverses the ifaddr list in an epoch. Thread 2 unlinks
- with the corresponding epoch safe macro, marks as logically free, and then
- defers deletion. More general mutation or a synchronous free would have to
- follow a call to <code class="Fn">epoch_wait</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>,
- <a class="Xr">sleep(9)</a>, <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">epoch</code> framework first appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">One must be cautious when using
- <code class="Fn">epoch_wait_preempt</code>(). Threads are pinned during
- epoch sections, so if a thread in a section is then preempted by a higher
- priority compute bound thread on that CPU, it can be prevented from leaving
- the section indefinitely.</p>
-<p class="Pp">Epochs are not a straight replacement for read locks. Callers must
- use safe list and tailq traversal routines in an epoch (see ck_queue). When
- modifying a list referenced from an epoch section safe removal routines must
- be used and the caller can no longer modify a list entry in place. An item
- to be modified must be handled with copy on write and frees must be deferred
- until after a grace period has elapsed.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 25, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ether_gen_addr.9 4.html b/static/freebsd/man9/ether_gen_addr.9 4.html
deleted file mode 100644
index d8f4aea2..00000000
--- a/static/freebsd/man9/ether_gen_addr.9 4.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ETHER_GEN_ADDR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ETHER_GEN_ADDR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ether_gen_addr</code> &#x2014;
- <span class="Nd">generate an arbitrary MAC address for use</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socket.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if_var.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/ethernet.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ether_gen_addr</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- ether_addr *hwaddr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#ether_gen_addr"><code class="Fn" id="ether_gen_addr">ether_gen_addr</code></a>()
- function generates an arbitrary MAC address for use by an ethernet interface
- that does not have an assigned address.</p>
-<p class="Pp">By default, <code class="Nm">ether_gen_addr</code> attempts to
- generate a stable MAC address using the hostid of the jail that the
- <var class="Ar">ifp</var> is being added to. During early boot, the hostid
- may not be set on machines that haven't yet populated
- <span class="Pa">/etc/hostid</span>, or on machines that do not use
- <a class="Xr">loader(8)</a>.</p>
-<p class="Pp"><code class="Nm">ether_gen_addr</code> can fail to derive a MAC
- address due to memory allocation failure, or because the hostid has not been
- populated. In these cases, a locally-administered unicast MAC address will
- be randomly generated and returned via the <var class="Ar">hwaddr</var>
- parameter.</p>
-<p class="Pp">If <code class="Nm">ether_gen_addr</code> succeeds, then it will
- return a MAC address in the FreeBSD Foundation OUI,
- &#x201C;58:9c:fc&#x201D;, via the <var class="Ar">hwaddr</var>
- parameter.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span>
- &lt;<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 1, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/eventtimers.9 4.html b/static/freebsd/man9/eventtimers.9 4.html
deleted file mode 100644
index f08938bc..00000000
--- a/static/freebsd/man9/eventtimers.9 4.html
+++ /dev/null
@@ -1,252 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EVENTTIMERS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EVENTTIMERS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">eventtimers</code> &#x2014;
- <span class="Nd">kernel event timers subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/timeet.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>struct eventtimer;
-
-typedef int et_start_t(struct eventtimer *et,
- sbintime_t first, sbintime_t period);
-typedef int et_stop_t(struct eventtimer *et);
-typedef void et_event_cb_t(struct eventtimer *et, void *arg);
-typedef int et_deregister_cb_t(struct eventtimer *et, void *arg);
-
-struct eventtimer {
- SLIST_ENTRY(eventtimer) et_all;
- char *et_name;
- int et_flags;
-#define ET_FLAGS_PERIODIC 1
-#define ET_FLAGS_ONESHOT 2
-#define ET_FLAGS_PERCPU 4
-#define ET_FLAGS_C3STOP 8
-#define ET_FLAGS_POW2DIV 16
- int et_quality;
- int et_active;
- uint64_t et_frequency;
- sbintime_t et_min_period;
- sbintime_t et_max_period;
- et_start_t *et_start;
- et_stop_t *et_stop;
- et_event_cb_t *et_event_cb;
- et_deregister_cb_t *et_deregister_cb;
- void *et_arg;
- void *et_priv;
- struct sysctl_oid *et_sysctl;
-};</pre>
-</div>
-<br/>
-<var class="Ft">int</var>
-<br/>
-<code class="Fn">et_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>);
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_deregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">et_change_frequency</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- newfreq</var>);</p>
-<p class="Pp"><code class="Fn">ET_LOCK</code>();</p>
-<p class="Pp"><code class="Fn">ET_UNLOCK</code>();</p>
-<p class="Pp"><var class="Ft">struct eventtimer *</var>
- <br/>
- <code class="Fn">et_find</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- check</var>, <var class="Fa" style="white-space: nowrap;">int
- want</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>,
- <var class="Fa" style="white-space: nowrap;">et_event_cb_t *event</var>,
- <var class="Fa" style="white-space: nowrap;">et_deregister_cb_t
- *deregister</var>, <var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_start</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t first</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t period</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_stop</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_ban</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">et_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- eventtimer *et</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Event timers are responsible for generating interrupts at
- specified time or periodically, to run different time-based events.
- Subsystem consists of three main parts:</p>
-<dl class="Bl-tag">
- <dt>Drivers</dt>
- <dd>Manage hardware to generate requested time events.</dd>
- <dt id="hardclock">Consumers</dt>
- <dd><span class="Pa">sys/kern/kern_clocksource.c</span> uses event timers to
- supply kernel with
- <a class="permalink" href="#hardclock"><code class="Fn">hardclock</code></a>(),
- <a class="permalink" href="#statclock"><code class="Fn" id="statclock">statclock</code></a>()
- and
- <a class="permalink" href="#profclock"><code class="Fn" id="profclock">profclock</code></a>()
- time events.</dd>
- <dt>Glue code</dt>
- <dd><span class="Pa">sys/sys/timeet.h</span>,
- <span class="Pa">sys/kern/kern_et.c</span> provide APIs for event timer
- drivers and consumers.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_API"><a class="permalink" href="#DRIVER_API">DRIVER
- API</a></h1>
-<p class="Pp">Driver API is built around eventtimer structure. To register its
- functionality driver allocates that structure and calls
- <a class="permalink" href="#et_register"><code class="Fn" id="et_register">et_register</code></a>().
- Driver should fill following fields there:</p>
-<dl class="Bl-tag">
- <dt id="et_name"><var class="Va">et_name</var></dt>
- <dd>Unique name of the event timer for management purposes.</dd>
- <dt id="et_flags"><var class="Va">et_flags</var></dt>
- <dd>Set of flags, describing timer capabilities:
- <dl class="Bl-tag Bl-compact">
- <dt>ET_FLAGS_PERIODIC</dt>
- <dd>Periodic mode supported.</dd>
- <dt>ET_FLAGS_ONESHOT</dt>
- <dd>One-shot mode supported.</dd>
- <dt>ET_FLAGS_PERCPU</dt>
- <dd>Timer is per-CPU.</dd>
- <dt>ET_FLAGS_C3STOP</dt>
- <dd>Timer may stop in CPU sleep state.</dd>
- <dt>ET_FLAGS_POW2DIV</dt>
- <dd>Timer supports only 2^n divisors.</dd>
- </dl>
- </dd>
- <dt id="et_quality"><var class="Va">et_quality</var></dt>
- <dd>Abstract value to certify whether this timecounter is better than the
- others. Higher value means better.</dd>
- <dt id="et_frequency"><var class="Va">et_frequency</var></dt>
- <dd>Timer oscillator's base frequency, if applicable and known. Used by
- consumers to predict set of possible frequencies that could be obtained by
- dividing it. Should be zero if not applicable or unknown.</dd>
- <dt id="et_min_period"><var class="Va">et_min_period</var>,
- <var class="Va">et_max_period</var></dt>
- <dd>Minimal and maximal reliably programmable time periods.</dd>
- <dt id="et_start"><var class="Va">et_start</var></dt>
- <dd>Driver's timer start function pointer.</dd>
- <dt id="et_stop"><var class="Va">et_stop</var></dt>
- <dd>Driver's timer stop function pointer.</dd>
- <dt id="et_priv"><var class="Va">et_priv</var></dt>
- <dd>Driver's private data storage.</dd>
-</dl>
-<p class="Pp">After the event timer functionality is registered, it is
- controlled via <var class="Va">et_start</var> and
- <var class="Va">et_stop</var> methods. <var class="Va">et_start</var> method
- is called to start the specified event timer. The last two arguments are
- used to specify time when events should be generated.
- <var class="Va">first</var> argument specifies time period before the first
- event generated. In periodic mode NULL value specifies that first period is
- equal to the <var class="Va">period</var> argument value.
- <var class="Va">period</var> argument specifies the time period between
- following events for the periodic mode. The NULL value there specifies the
- one-shot mode. At least one of these two arguments should be not NULL. When
- event time arrive, driver should call <var class="Va">et_event_cb</var>
- callback function, passing <var class="Va">et_arg</var> as the second
- argument. <var class="Va">et_stop</var> method is called to stop the
- specified event timer. For the per-CPU event timers
- <var class="Va">et_start</var> and <var class="Va">et_stop</var> methods
- control timers associated with the current CPU.</p>
-<p class="Pp" id="et_deregister">Driver may deregister its functionality by
- calling
- <a class="permalink" href="#et_deregister"><code class="Fn">et_deregister</code></a>().</p>
-<p class="Pp" id="et_change_frequency">If the frequency of the clock hardware
- can change while it is running (for example, during power-saving modes), the
- driver must call
- <a class="permalink" href="#et_change_frequency"><code class="Fn">et_change_frequency</code></a>()
- on each change. If the given event timer is the active timer,
- <code class="Fn">et_change_frequency</code>() stops the timer on all CPUs,
- updates <var class="Va">et-&gt;frequency</var>, then restarts the timer on
- all CPUs so that all current events are rescheduled using the new frequency.
- If the given timer is not currently active,
- <code class="Fn">et_change_frequency</code>() simply updates
- <var class="Va">et-&gt;frequency</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONSUMER_API"><a class="permalink" href="#CONSUMER_API">CONSUMER
- API</a></h1>
-<p class="Pp"><code class="Fn">et_find</code>() allows consumer to find
- available event timer, optionally matching specific name and/or capability
- flags. Consumer may read returned eventtimer structure, but should not
- modify it. When wanted event timer is found,
- <code class="Fn">et_init</code>() should be called for it, submitting
- <var class="Va">event</var> and optionally <var class="Va">deregister</var>
- callbacks functions, and the opaque argument <var class="Va">arg</var>. That
- argument will be passed as argument to the callbacks. Event callback
- function will be called on scheduled time events. It is called from the
- hardware interrupt context, so no sleep is permitted there. Deregister
- callback function may be called to report consumer that the event timer
- functionality is no longer available. On this call, consumer should stop
- using event timer before the return.</p>
-<p class="Pp" id="et_start~2">After the timer is found and initialized, it can
- be controlled via
- <a class="permalink" href="#et_start~2"><code class="Fn">et_start</code></a>()
- and <code class="Fn">et_stop</code>(). The arguments are the same as
- described in driver API. Per-CPU event timers can be controlled only from
- specific CPUs.</p>
-<p class="Pp" id="et_ban"><a class="permalink" href="#et_ban"><code class="Fn">et_ban</code></a>()
- allows consumer to mark event timer as broken via clearing both one-shot and
- periodic capability flags, if it was somehow detected.
- <a class="permalink" href="#et_free"><code class="Fn" id="et_free">et_free</code></a>()
- is the opposite to
- <a class="permalink" href="#et_init"><code class="Fn" id="et_init">et_init</code></a>().
- It releases the event timer for other consumers use.</p>
-<p class="Pp" id="ET_LOCK"><a class="permalink" href="#ET_LOCK"><code class="Fn">ET_LOCK</code></a>()
- and
- <a class="permalink" href="#ET_UNLOCK"><code class="Fn" id="ET_UNLOCK">ET_UNLOCK</code></a>()
- macros should be used to manage <a class="Xr">mutex(9)</a> lock around
- <a class="permalink" href="#et_find"><code class="Fn" id="et_find">et_find</code></a>(),
- <code class="Fn">et_init</code>() and <code class="Fn">et_free</code>()
- calls to serialize access to the list of the registered event timers and the
- pointers returned by <code class="Fn">et_find</code>().
- <code class="Fn">et_start</code>() and <code class="Fn">et_stop</code>()
- calls should be serialized in consumer's internal way to avoid concurrent
- timer hardware access.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">eventtimers(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Alexander Motin</span>
- &lt;<a class="Mt" href="mailto:mav@FreeBSD.org">mav@FreeBSD.org</a>&gt;</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 2, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/extattr.9 3.html b/static/freebsd/man9/extattr.9 3.html
deleted file mode 100644
index 94bcd948..00000000
--- a/static/freebsd/man9/extattr.9 3.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EXTATTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EXTATTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">extattr</code> &#x2014; <span class="Nd">virtual
- file system named extended attributes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/extattr.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Named extended attributes allow additional meta-data to be
- associated with vnodes representing files and directories. The semantics of
- this additional data is that of a &quot;name=value&quot; pair, where a name
- may be defined or undefined, and if defined, associated with zero or more
- bytes of arbitrary binary data. Extended attribute names exist within a set
- of namespaces; each operation on an extended attribute is required to
- provide the namespace to which to operation refers. If the same name is
- present in multiple namespaces, the extended attributes associated with the
- names are stored and manipulated independently. The following two namespaces
- are defined universally, although individual file systems may implement
- additional namespaces, or not implement these namespaces:
- <code class="Dv">EXTATTR_NAMESPACE_USER</code>,
- <code class="Dv">EXTATTR_NAMESPACE_SYSTEM</code>. The semantics of these
- attributes are intended to be as follows: user attribute data is protected
- according the normal discretionary and mandatory protections associated with
- the data in the file or directory; system attribute data is protected such
- that appropriate privilege is required to directly access or manipulate
- these attributes. By default, processes in a <a class="Xr">jail(8)</a>
- cannot access the system attribute data unless the
- <var class="Va">allow.extattr</var> configuration parameter is
- specified.</p>
-<p class="Pp">Reads of extended attribute data may return specific contiguous
- regions of the meta-data, in the style of <a class="Xr">VOP_READ(9)</a>, but
- writes will replace the entire current &quot;value&quot; associated with a
- given name. As there are a plethora of file systems with differing extended
- attributes, availability and functionality of these functions may be
- limited, and they should be used with awareness of the underlying semantics
- of the supporting file system. Authorization schemes for extended attribute
- data may also vary by file system, as well as maximum attribute size, and
- whether or not any or specific new attributes may be defined.</p>
-<p class="Pp">Extended attributes are named using a null-terminated character
- string. Depending on underlying file system semantics, this name may or may
- not be case-sensitive. Appropriate vnode extended attribute calls are:
- <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>,
- and <a class="Xr">VOP_SETEXTATTR(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">jail(8)</a>, <a class="Xr">VFS(9)</a>,
- <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>,
- <a class="Xr">VOP_SETEXTATTR(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">In addition, the interface does not provide a mechanism to
- retrieve the current set of available attributes; it has been suggested that
- providing a <code class="Dv">NULL</code> attribute name should cause a list
- of defined attributes for the passed file or directory, but this is not
- currently implemented.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 5, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/exterror.9 3.html b/static/freebsd/man9/exterror.9 3.html
deleted file mode 100644
index c28538a1..00000000
--- a/static/freebsd/man9/exterror.9 3.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">EXTERROR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">EXTERROR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">exterror</code> &#x2014; <span class="Nd">provide
- extended error information to userspace</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<div class="Bd Li">
-<pre>#define EXTERR_CATEGORY EXTERR_CAT_MYCATEGORY</pre>
-</div>
-<br/>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/exterrvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">struct kexterr;</var></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">exterr_clear</code>(<var class="Fa" style="white-space: nowrap;">struct
- kexterr *ke</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">exterr_set_from</code>(<var class="Fa" style="white-space: nowrap;">const
- struct kexterr *ke</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">EXTERROR</code>(<var class="Fa" style="white-space: nowrap;">int
- error</var>, <var class="Fa" style="white-space: nowrap;">const char
- *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">EXTERROR_KE</code>(<var class="Fa" style="white-space: nowrap;">struct
- kexterr *ke</var>, <var class="Fa" style="white-space: nowrap;">int
- error</var>, <var class="Fa" style="white-space: nowrap;">const char
- *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">exterror</code> framework allows the kernel
- to return additional information about an error along with the standard
- <a class="Xr">errno(3)</a> error code, which is terse and often lacking
- context.</p>
-<p class="Pp">The terseness is especially visible with commonly overloaded error
- codes like <code class="Er">EINVAL</code> or <code class="Er">EIO</code>,
- which occur at many places for a given syscall, or even outside the context
- of the current kernel call. Identifying the specific cause for the returned
- error using only the <var class="Va">errno</var> value requires searching
- for all instances that the error is returned in the kernel and trying to
- guess which is the most likely code path to have returned the error.
- <code class="Nm">exterror</code> attaches additional data to the error
- itself and records the error category and the kernel source code file line
- number. The intent of <code class="Nm">exterror</code> is to make it easier
- for a user to identify the cause of the error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USAGE"><a class="permalink" href="#USAGE">USAGE</a></h1>
-<p class="Pp">Before <code class="Nm">exterror</code> can be used in the given
- source .c file, the category of extended errors should be allocated in the
- <code class="In">&lt;<a class="In">sys/exterr_cat.h</a>&gt;</code> file. The
- category is the unique integer, that, together with the source line number,
- uniquely identifies the extended error occurrence. Then, the
- <var class="Va">EXTERR_CATEGORY</var> symbol should be defined as an alias
- for the allocated category, as shown in the summary.</p>
-<p class="Pp">A typical code fragment to report an error is just</p>
-<div class="Bd Bd-indent">return (EINVAL);</div>
-An extended error can augment the error code with additional information:
-<div class="Bd Bd-indent">return (EXTERROR(EINVAL, &quot;Invalid
- length&quot;));</div>
-The error data and metadata is saved in the current thread storage. The metadata
- includes the category and the source file line number.
-<p class="Pp" id="EXTERROR">Arguments to the
- <a class="permalink" href="#EXTERROR"><code class="Fn">EXTERROR</code></a>()
- macro:</p>
-<ul class="Bl-dash">
- <li>The first argument to <code class="Fn">EXTERROR</code>() is the errno
- error code.</li>
- <li>The second argument is a constant string with the unbound lifetime, which
- should tersely provide enough human-readable details about the error.</li>
- <li>The <code class="Fn">EXTERROR</code>() macro can take two optional 64-bit
- integer arguments, whose meaning is specific to the subsystem. The format
- string may include up to two printf-like format specifiers to insert the
- optional argument values in the user output, which is done in userspace.
- <p class="Pp">The format specifier must be for an integer type, and include
- the &#x201C;j&#x201D; format modifier to accept only the types
- <var class="Vt">intmax_t</var> or <var class="Vt">uintmax_t</var>.</p>
- </li>
-</ul>
-<p class="Pp">The strings passed as the second argument are only retained in the
- kernel text if the <code class="Cd">option EXTERR_STRINGS</code> was enabled
- in the kernel config. Otherwise they are stripped at compile time and are
- not available to userspace at runtime.</p>
-<p class="Pp" id="EXTERROR~2">The
- <a class="permalink" href="#EXTERROR~2"><code class="Fn">EXTERROR</code></a>()
- macro can be used in any context where the current thread is defined.
- Specifically, <code class="Fn">EXTERROR</code>() cannot be used in interrupt
- contexts and context switch code. Additionally, use of
- <code class="Fn">EXTERROR</code>() in kernel threads is not sensible as
- there is no userspace to retrieve the extended error data.</p>
-<p class="Pp" id="EXTERROR_KE">The
- <a class="permalink" href="#EXTERROR_KE"><code class="Fn">EXTERROR_KE</code></a>()
- macro is similar to <code class="Fn">EXTERROR</code>(), but it takes an
- explicit pointer <var class="Fa">kep</var> to the <var class="Vt">struct
- kexterr</var> to fill with the extended error information. The macro
- expression value is <var class="Vt">void</var>. See below for description of
- the asynchronous i/o error facilities.</p>
-<p class="Pp" id="exterr_clear">The
- <a class="permalink" href="#exterr_clear"><code class="Fn">exterr_clear</code></a>()
- function clears the content of the <var class="Vt">struct kexterr</var>
- pointed to by the argument <var class="Fa">ke</var>.</p>
-<p class="Pp" id="exterr_set_from">The
- <a class="permalink" href="#exterr_set_from"><code class="Fn">exterr_set_from</code></a>()
- function sets the current thread extended error data from the
- <var class="Fa">struct kexterr</var> pointed to by the argument
- <var class="Fa">ke</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USERSPACE_ACCESS_TO_EXTENDED_ERROR_DATA"><a class="permalink" href="#USERSPACE_ACCESS_TO_EXTENDED_ERROR_DATA">USERSPACE
- ACCESS TO EXTENDED ERROR DATA</a></h1>
-<p class="Pp">There is no syscall overhead for using
- <code class="Nm">exterror</code> in the non-error case. When an error occurs
- that has supplied extended information, the kernel copies out that
- information into the userspace per-thread area that was registered with the
- kernel, typically on image activation, or later at thread startup. The area
- is controlled by the <a class="Xr">exterrctl(2)</a> internal syscall,
- normally done by the userspace C runtime.</p>
-<p class="Pp">Userspace programs do not need to access the extended information
- area directly. There is no field that is stable for the specific error
- condition. Instead, the base <span class="Lb">library
- &#x201C;c&#x201D;</span> functions <a class="Xr">err(3)</a> and
- <a class="Xr">warn(3)</a> were modified to print the extended information if
- it is available in addition to the usual <var class="Va">errno</var>
- decoding.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ASYNCHRONOUS_INPUT/OUTPUT"><a class="permalink" href="#ASYNCHRONOUS_INPUT/OUTPUT">ASYNCHRONOUS
- INPUT/OUTPUT</a></h1>
-<p class="Pp">Due to the nature of the <span class="Ux">FreeBSD</span> i/o
- subsystem, most input/output requests, presented as buffers (as in
- <var class="Vt">struct buf</var>) and geom bio's ( <var class="Vt">struct
- bio</var>) are processed asynchronously in filesystem- and geom-private
- threads. This makes it challenging to pass any extended error information
- from the geom providers and drivers, where an error typically occurs, back
- to the thread that initiated the request, and is the consumer of the
- result.</p>
-<p class="Pp" id="EXTERROR_KE~2">To alleviate the mismatch, both
- <var class="Vt">struct buf</var> and <var class="Vt">struct bio</var> have
- member of the <var class="Vt">struct kexterr</var> type. For buffers, the
- <var class="Va">b_exterr</var> for <var class="Vt">struct buf</var>, and
- <var class="Va">bio_exterr</var> for <var class="Vt">struct bio</var>.
- Asynchronous i/o code can use the
- <a class="permalink" href="#EXTERROR_KE~2"><code class="Fn">EXTERROR_KE</code></a>()
- macro, passing the pointer to the current request's embedded
- <var class="Vt">struct kexterr</var>, to record the extended error. In both
- cases, the <var class="Va">BIO_EXTERR</var> flag should be set to indicate
- that whole extended error is valid, not only the
- <var class="Va">b_error</var> or <var class="Va">bio_error</var> values.</p>
-<p class="Pp">Both VFS and geom generic layers, and several geom providers that
- generate subordinate bio's from the original request, are aware of the
- extended errors. They pass <var class="Vt">kexterr</var> from the failed
- request back to the thread that create the request.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">errno(3)</a>, <a class="Xr">err(3)</a>,
- <a class="Xr">uexterr_gettext(3)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">exterror</code> facility was introduced in
- <span class="Ux">FreeBSD 15.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 5, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/fail.9 3.html b/static/freebsd/man9/fail.9 3.html
deleted file mode 100644
index 273245d4..00000000
--- a/static/freebsd/man9/fail.9 3.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">FAIL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">FAIL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">DEBUG_FP</code>,
- <code class="Nm">KFAIL_POINT_CODE</code>,
- <code class="Nm">KFAIL_POINT_CODE_FLAGS</code>,
- <code class="Nm">KFAIL_POINT_CODE_COND</code>,
- <code class="Nm">KFAIL_POINT_ERROR</code>,
- <code class="Nm">KFAIL_POINT_EVAL</code>,
- <code class="Nm">KFAIL_POINT_DECLARE</code>,
- <code class="Nm">KFAIL_POINT_DEFINE</code>,
- <code class="Nm">KFAIL_POINT_GOTO</code>,
- <code class="Nm">KFAIL_POINT_RETURN</code>,
- <code class="Nm">KFAIL_POINT_RETURN_VOID</code>,
- <code class="Nm">KFAIL_POINT_SLEEP_CALLBACKS</code>,
- <code class="Nm">fail_point</code> &#x2014; <span class="Nd">fail
- points</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/fail.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_CODE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">code</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_CODE_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>,
- <var class="Fa" style="white-space: nowrap;">code</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_CODE_COND</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">cond</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>,
- <var class="Fa" style="white-space: nowrap;">code</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_ERROR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">error_var</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_EVAL</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">code</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">flags</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_GOTO</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">error_var</var>,
- <var class="Fa" style="white-space: nowrap;">label</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_RETURN</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_RETURN_VOID</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">KFAIL_POINT_SLEEP_CALLBACKS</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">pre_func</var>,
- <var class="Fa" style="white-space: nowrap;">pre_arg</var>,
- <var class="Fa" style="white-space: nowrap;">post_func</var>,
- <var class="Fa" style="white-space: nowrap;">post_arg</var>,
- <var class="Fa" style="white-space: nowrap;">code</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Fail points are used to add code points where errors may be
- injected in a user controlled fashion. Fail points provide a convenient
- wrapper around user-provided error injection code, providing a
- <a class="Xr">sysctl(9)</a> MIB, and a parser for that MIB that describes
- how the error injection code should fire.</p>
-<p class="Pp" id="KFAIL_POINT_CODE">The base fail point macro is
- <a class="permalink" href="#KFAIL_POINT_CODE"><code class="Fn">KFAIL_POINT_CODE</code></a>()
- where <var class="Fa">parent</var> is a sysctl tree (frequently
- <b class="Sy">DEBUG_FP</b> for kernel fail points, but various subsystems
- may wish to provide their own fail point trees), and
- <var class="Fa">name</var> is the name of the MIB in that tree, and
- <var class="Fa">code</var> is the error injection code. The
- <var class="Fa">code</var> argument does not require braces, but it is
- considered good style to use braces for any multi-line code arguments.
- Inside the <var class="Fa">code</var> argument, the evaluation of
- <a class="permalink" href="#RETURN_VALUE"><b class="Sy" id="RETURN_VALUE">RETURN_VALUE</b></a>
- is derived from the <code class="Fn">return</code>() value set in the sysctl
- MIB.</p>
-<p class="Pp" id="KFAIL_POINT_CODE_FLAGS">Additionally,
- <a class="permalink" href="#KFAIL_POINT_CODE_FLAGS"><code class="Fn">KFAIL_POINT_CODE_FLAGS</code></a>()
- provides a <var class="Fa">flags</var> argument which controls the fail
- point's behaviour. This can be used to e.g., mark the fail point's context
- as non-sleepable, which causes the <b class="Sy">sleep</b> action to be
- coerced to a busy wait. The supported flags are:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt>FAIL_POINT_USE_TIMEOUT_PATH</dt>
- <dd>Rather than sleeping on a <code class="Fn">sleep</code>() call, just fire
- the post-sleep function after a timeout fires.</dd>
- <dt>FAIL_POINT_NONSLEEPABLE</dt>
- <dd>Mark the fail point as being in a non-sleepable context, which coerces
- <code class="Fn">sleep</code>() calls to <code class="Fn">delay</code>()
- calls.</dd>
-</dl>
-<p class="Pp" id="KFAIL_POINT_CODE_COND">Likewise,
- <a class="permalink" href="#KFAIL_POINT_CODE_COND"><code class="Fn">KFAIL_POINT_CODE_COND</code></a>()
- supplies a <var class="Fa">cond</var> argument, which allows you to set the
- condition under which the fail point's code may fire. This is equivalent
- to:</p>
-<div class="Bd Pp Li">
-<pre> if (cond)
- KFAIL_POINT_CODE_FLAGS(...);
-
-</pre>
-</div>
-See <a class="Sx" href="#SYSCTL_VARIABLES">SYSCTL VARIABLES</a> below.
-<p class="Pp" id="KFAIL_POINT_*">The remaining
- <a class="permalink" href="#KFAIL_POINT_*"><code class="Fn">KFAIL_POINT_*</code></a>()
- macros are wrappers around common error injection paths:</p>
-<dl class="Bl-inset">
- <dt id="KFAIL_POINT_RETURN"><a class="permalink" href="#KFAIL_POINT_RETURN"><code class="Fn">KFAIL_POINT_RETURN</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>)</dt>
- <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., return
- RETURN_VALUE)</b></dd>
- <dt id="KFAIL_POINT_RETURN_VOID"><a class="permalink" href="#KFAIL_POINT_RETURN_VOID"><code class="Fn">KFAIL_POINT_RETURN_VOID</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>)</dt>
- <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., return)</b></dd>
- <dt id="KFAIL_POINT_ERROR"><a class="permalink" href="#KFAIL_POINT_ERROR"><code class="Fn">KFAIL_POINT_ERROR</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>, <var class="Fa">error_var</var>)</dt>
- <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., error_var =
- RETURN_VALUE)</b></dd>
- <dt id="KFAIL_POINT_GOTO"><a class="permalink" href="#KFAIL_POINT_GOTO"><code class="Fn">KFAIL_POINT_GOTO</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>, <var class="Fa">error_var</var>,
- <var class="Fa">label</var>)</dt>
- <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., { error_var =
- RETURN_VALUE; goto label;})</b></dd>
-</dl>
-<p class="Pp">You can also introduce fail points by separating the declaration,
- definition, and evaluation portions.</p>
-<dl class="Bl-inset">
- <dt id="KFAIL_POINT_DECLARE"><a class="permalink" href="#KFAIL_POINT_DECLARE"><code class="Fn">KFAIL_POINT_DECLARE</code></a>(<var class="Fa">name</var>)</dt>
- <dd>is used to declare the <b class="Sy">fail_point</b> struct.</dd>
- <dt id="KFAIL_POINT_DEFINE"><a class="permalink" href="#KFAIL_POINT_DEFINE"><code class="Fn">KFAIL_POINT_DEFINE</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>, <var class="Fa">flags</var>)</dt>
- <dd>defines and initializes the <b class="Sy">fail_point</b> and sets up its
- <a class="Xr">sysctl(9)</a>.</dd>
- <dt id="KFAIL_POINT_EVAL"><a class="permalink" href="#KFAIL_POINT_EVAL"><code class="Fn">KFAIL_POINT_EVAL</code></a>(<var class="Fa">name</var>,
- <var class="Fa">code</var>)</dt>
- <dd>is used at the point that the fail point is executed.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYSCTL_VARIABLES"><a class="permalink" href="#SYSCTL_VARIABLES">SYSCTL
- VARIABLES</a></h1>
-<p class="Pp">The <code class="Fn">KFAIL_POINT_*</code>() macros add sysctl MIBs
- where specified. Many base kernel MIBs can be found in the
- <a class="permalink" href="#debug.fail_point"><b class="Sy" id="debug.fail_point">debug.fail_point</b></a>
- tree (referenced in code by <b class="Sy">DEBUG_FP</b>).</p>
-<p class="Pp">The sysctl variable may be set in a number of ways:</p>
-<div class="Bd Pp Li">
-<pre> [&lt;pct&gt;%][&lt;cnt&gt;*]&lt;type&gt;[(args...)][-&gt;&lt;more terms&gt;]</pre>
-</div>
-<p class="Pp">The &lt;type&gt; argument specifies which action to take; it can
- be one of:</p>
-<dl class="Bl-tag">
- <dt id="off"><a class="permalink" href="#off"><b class="Sy">off</b></a></dt>
- <dd>Take no action (does not trigger fail point code)</dd>
- <dt id="return"><a class="permalink" href="#return"><b class="Sy">return</b></a></dt>
- <dd>Trigger fail point code with specified argument</dd>
- <dt id="sleep"><a class="permalink" href="#sleep"><b class="Sy">sleep</b></a></dt>
- <dd>Sleep the specified number of milliseconds</dd>
- <dt id="panic"><a class="permalink" href="#panic"><b class="Sy">panic</b></a></dt>
- <dd>Panic</dd>
- <dt id="break"><a class="permalink" href="#break"><b class="Sy">break</b></a></dt>
- <dd>Break into the debugger, or trap if there is no debugger support</dd>
- <dt id="print"><a class="permalink" href="#print"><b class="Sy">print</b></a></dt>
- <dd>Print that the fail point executed</dd>
- <dt id="pause"><a class="permalink" href="#pause"><b class="Sy">pause</b></a></dt>
- <dd>Threads sleep at the fail point until the fail point is set to
- <b class="Sy">off</b></dd>
- <dt id="yield"><a class="permalink" href="#yield"><b class="Sy">yield</b></a></dt>
- <dd>Thread yields the cpu when the fail point is evaluated</dd>
- <dt id="delay"><a class="permalink" href="#delay"><b class="Sy">delay</b></a></dt>
- <dd>Similar to sleep, but busy waits the cpu. (Useful in non-sleepable
- contexts.)</dd>
-</dl>
-<p class="Pp">The &lt;pct&gt;% and &lt;cnt&gt;* modifiers prior to &lt;type&gt;
- control when &lt;type&gt; is executed. The &lt;pct&gt;% form (e.g.
- &quot;1.2%&quot;) can be used to specify a probability that &lt;type&gt;
- will execute. This is a decimal in the range (0, 100] which can specify up
- to 1/10,000% precision. The &lt;cnt&gt;* form (e.g. &quot;5*&quot;) can be
- used to specify the number of times &lt;type&gt; should be executed before
- this &lt;term&gt; is disabled. Only the last probability and the last count
- are used if multiple are specified, i.e. &quot;1.2%2%&quot; is the same as
- &quot;2%&quot;. When both a probability and a count are specified, the
- probability is evaluated before the count, i.e. &quot;2%5*&quot; means
- &quot;2% of the time, but only 5 times total&quot;.</p>
-<p class="Pp" id="return~2">The operator -&gt; can be used to express cascading
- terms. If you specify &lt;term1&gt;-&gt;&lt;term2&gt;, it means that if
- &lt;term1&gt; does not &#x2018;<code class="Li">execute</code>&#x2019;,
- &lt;term2&gt; is evaluated. For the purpose of this operator, the
- <a class="permalink" href="#return~2"><code class="Fn">return</code></a>()
- and <code class="Fn">print</code>() operators are the only types that
- cascade. A <code class="Fn">return</code>() term only cascades if the code
- executes, and a <code class="Fn">print</code>() term only cascades when
- passed a non-zero argument. A pid can optionally be specified. The fail
- point term is only executed when invoked by a process with a matching
- p_pid.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<dl class="Bl-tag">
- <dt id="sysctl"><a class="permalink" href="#sysctl"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;2.1%return(5)&quot;</b></a></dt>
- <dd>21/1000ths of the time, execute <var class="Fa">code</var> with
- RETURN_VALUE set to 5.</dd>
- <dt id="sysctl~2"><a class="permalink" href="#sysctl~2"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;2%return(5)-&gt;5%return(22)&quot;</b></a></dt>
- <dd>2/100ths of the time, execute <var class="Fa">code</var> with RETURN_VALUE
- set to 5. If that does not happen, 5% of the time execute
- <var class="Fa">code</var> with RETURN_VALUE set to 22.</dd>
- <dt id="sysctl~3"><a class="permalink" href="#sysctl~3"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;5*return(5)-&gt;0.1%return(22)&quot;</b></a></dt>
- <dd>For 5 times, return 5. After that, 1/1000th of the time, return 22.</dd>
- <dt id="sysctl~4"><a class="permalink" href="#sysctl~4"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;0.1%5*return(5)&quot;</b></a></dt>
- <dd>Return 5 for 1 in 1000 executions, but only 5 times total.</dd>
- <dt id="sysctl~5"><a class="permalink" href="#sysctl~5"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;1%*sleep(50)&quot;</b></a></dt>
- <dd>1/100th of the time, sleep 50ms.</dd>
- <dt id="sysctl~6"><a class="permalink" href="#sysctl~6"><b class="Sy">sysctl
- debug.fail_point.foobar=&quot;1*return(5)[pid 1234]&quot;</b></a></dt>
- <dd>Return 5 once, when pid 1234 executes the fail point.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by</p>
-<p class="Pp"><span class="An">Matthew Bryan</span>
- &lt;<a class="Mt" href="mailto:matthew.bryan@isilon.com">matthew.bryan@isilon.com</a>&gt;
- and</p>
-<p class="Pp"><span class="An">Zach Loafman</span>
- &lt;<a class="Mt" href="mailto:zml@FreeBSD.org">zml@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">It is easy to shoot yourself in the foot by setting fail points
- too aggressively or setting too many in combination. For example, forcing
- <code class="Fn">malloc</code>() to fail consistently is potentially harmful
- to uptime.</p>
-<p class="Pp" id="FAIL_POINT_NONSLEEPABLE">The <code class="Fn">sleep</code>()
- sysctl setting may not be appropriate in all situations. Currently,
- <code class="Fn">fail_point_eval</code>() does not verify whether the
- context is appropriate for calling <code class="Fn">msleep</code>(). You can
- force it to evaluate a <b class="Sy">sleep</b> action as a
- <b class="Sy">delay</b> action by specifying the
- <a class="permalink" href="#FAIL_POINT_NONSLEEPABLE"><b class="Sy">FAIL_POINT_NONSLEEPABLE</b></a>
- flag at the point the fail point is declared.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 6, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/fdt_pinctrl.9 3.html b/static/freebsd/man9/fdt_pinctrl.9 3.html
deleted file mode 100644
index 4e0102b7..00000000
--- a/static/freebsd/man9/fdt_pinctrl.9 3.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">fdt_pinctrl(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">fdt_pinctrl(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">fdt_pinctrl</code> &#x2014;
- <span class="Nd">helper functions for FDT pinmux controller
- drivers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/fdt/fdt_pinctrl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fdt_pinctrl_configure</code>(<var class="Fa" style="white-space: nowrap;">device_t
- client</var>, <var class="Fa" style="white-space: nowrap;">u_int
- index</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fdt_pinctrl_configure_by_name</code>(<var class="Fa" style="white-space: nowrap;">device_t
- client</var>, <var class="Fa" style="white-space: nowrap;">const char *
- name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fdt_pinctrl_register</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pinctrl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *pinprop</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fdt_pinctrl_configure_tree</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pinctrl</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="Xr">fdt_pinctrl(4)</a> provides an API for manipulating
- I/O pin configurations on pinmux controllers and pinmux clients. On the
- controller side, the standard newbus probe and attach methods are
- implemented. As part of handling attach, it calls the
- <a class="permalink" href="#fdt_pinctrl_register"><code class="Fn" id="fdt_pinctrl_register">fdt_pinctrl_register</code></a>()
- function to register itself as a pinmux controller. Then
- <code class="Fn">fdt_pinctrl_configure_tree</code>() is used to walk the
- device tree and configure pins specified by the pinctrl-0 property for all
- active devices. The driver also implements the
- <code class="Fn">fdt_pinctrl_configure</code>() method, which allows client
- devices to change their pin configurations after startup. If a client device
- requires a pin configuration change at some point of its lifecycle, it uses
- the <code class="Fn">fdt_pinctrl_configure</code>() or
- <code class="Fn">fdt_pinctrl_configure_by_name</code>() functions.</p>
-<p class="Pp" id="fdt_pinctrl_configure"><a class="permalink" href="#fdt_pinctrl_configure"><code class="Fn">fdt_pinctrl_configure</code></a>()
- is used by client device <var class="Fa">client</var> to request a pin
- configuration described by the pinctrl-N property with index
- <var class="Fa">index</var>.</p>
-<p class="Pp" id="fdt_pinctrl_configure_by_name"><a class="permalink" href="#fdt_pinctrl_configure_by_name"><code class="Fn">fdt_pinctrl_configure_by_name</code></a>()
- is used by client device <var class="Fa">client</var> to request the pin
- configuration with name <var class="Fa">name</var>.</p>
-<p class="Pp" id="fdt_pinctrl_register~2"><a class="permalink" href="#fdt_pinctrl_register~2"><code class="Fn">fdt_pinctrl_register</code></a>()
- registers a pinctrl driver so that it can be used by other devices which
- call <code class="Fn">fdt_pinctrl_configure</code>() or
- <code class="Fn">fdt_pinctrl_configure_by_name</code>(). It also registers
- each child node of the pinctrl driver's node which contains a property with
- the name given in <var class="Fa">pinprop</var>. If
- <var class="Fa">pinprop</var> is <code class="Dv">NULL</code>, every
- descendant node is registered. It is possible for the driver to register
- itself as a pinmux controller for more than one pin property type by calling
- <code class="Fn">fdt_pinctrl_register</code>() multiple types.</p>
-<p class="Pp" id="fdt_pinctrl_configure_tree"><a class="permalink" href="#fdt_pinctrl_configure_tree"><code class="Fn">fdt_pinctrl_configure_tree</code></a>()
- walks through enabled devices in the device tree. If the pinctrl-0 property
- contains references to child nodes of the specified pinctrl device, their
- pins are configured.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>static int
-foo_configure_pins(device_t dev, phandle_t cfgxref)
-{
- phandle_t cfgnode;
- uint32_t *pins, *functions;
- int npins, nfunctions;
-
- cfgnode = OF_node_from_xref(cfgxref);
- pins = NULL;
- npins = OF_getencprop_alloc_multi(cfgnode, &quot;foo,pins&quot;, sizeof(*pins),
- (void **)&amp;pins);
- functions = NULL;
- nfunctions = OF_getencprop_alloc_multi(cfgnode, &quot;foo,functions&quot;,
- sizeof(*functions), (void **)&amp;functions);
- ...
-}
-
-static int
-foo_is_gpio(device_t dev, device_t gpiodev, bool *is_gpio)
-{
- return (foo_is_pin_func_gpio(is_gpio));
-}
-
-static int
-foo_set_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t flags)
-{
- int rv;
-
- rv = foo_is_pin_func_gpio(is_gpio);
- if (rv != 0)
- return (rv);
- foo_set_flags(pin, flags);
- return (0);
-}
-
-static int
-foo_get_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t *flags)
-{
- int rv;
-
- rv = foo_is_pin_func_gpio(is_gpio);
- if (rv != 0)
- return (rv);
- foo_get_flags(pin, flags);
- return (0);
-}
-
-static int
-foo_attach(device_t dev)
-{
- ...
-
- fdt_pinctrl_register(dev, &quot;foo,pins&quot;);
- /*
- * It is possible to register more than one pinprop handler
- */
- fdt_pinctrl_register(dev, &quot;bar,pins&quot;);
- fdt_pinctrl_configure_tree(dev);
-
- return (0);
-}
-
-static device_method_t foo_methods[] = {
- ...
-
- /* fdt_pinctrl interface */
- DEVMETHOD(fdt_pinctrl_configure, foo_configure_pins),
- DEVMETHOD(fdt_pinctrl_is_gpio, foo_is_gpio),
- DEVMETHOD(fdt_pinctrl_set_flags, foo_set_flags),
- DEVMETHOD(fdt_pinctrl_get_flags, foo_get_flags),
-
- /* Terminate method list */
- DEVMETHOD_END
-};
-
-DRIVER_MODULE(foo, simplebus, foo_driver, foo_devclass, NULL, NULL);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fdt_pinctrl(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 23, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/fetch.9 3.html b/static/freebsd/man9/fetch.9 3.html
deleted file mode 100644
index 05657272..00000000
--- a/static/freebsd/man9/fetch.9 3.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">FETCH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">FETCH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">fetch</code>, <code class="Nm">fubyte</code>,
- <code class="Nm">fuword</code>, <code class="Nm">fuword16</code>,
- <code class="Nm">fuword32</code>, <code class="Nm">fuword64</code>,
- <code class="Nm">fueword</code>, <code class="Nm">fueword32</code>,
- <code class="Nm">fueword64</code> &#x2014; <span class="Nd">fetch data from
- user-space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fubyte</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">fuword</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fuword16</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>);</p>
-<p class="Pp"><var class="Ft">int32_t</var>
- <br/>
- <code class="Fn">fuword32</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>);</p>
-<p class="Pp"><var class="Ft">int64_t</var>
- <br/>
- <code class="Fn">fuword64</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fueword</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>, <var class="Fa" style="white-space: nowrap;">long
- *val</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fueword32</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- *val</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fueword64</code>(<var class="Fa" style="white-space: nowrap;">volatile
- const void *base</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- *val</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">fetch</code> functions are designed to copy
- small amounts of data from user-space of the current process. If the user
- address is naturally aligned, then the operation will be performed
- atomically. Otherwise it may fail or be performed non-atomically, depending
- on the platform.</p>
-<p class="Pp">The <code class="Nm">fetch</code> routines provide the following
- functionality:</p>
-<dl class="Bl-tag">
- <dt id="fubyte"><a class="permalink" href="#fubyte"><code class="Fn">fubyte</code></a>()</dt>
- <dd>Fetches a byte of data from the user-space address
- <span class="Pa">base</span>. The byte read is zero-extended into the
- results variable.</dd>
- <dt><code class="Fn">fuword</code>()</dt>
- <dd>Fetches a word of data (long) from the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="fuword16"><a class="permalink" href="#fuword16"><code class="Fn">fuword16</code></a>()</dt>
- <dd>Fetches 16 bits of data from the user-space address
- <span class="Pa">base</span>. The half-word read is zero-extended into the
- results variable.</dd>
- <dt><code class="Fn">fuword32</code>()</dt>
- <dd>Fetches 32 bits of data from the user-space address
- <span class="Pa">base</span>.</dd>
- <dt><code class="Fn">fuword64</code>()</dt>
- <dd>Fetches 64 bits of data from the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="fueword"><a class="permalink" href="#fueword"><code class="Fn">fueword</code></a>()</dt>
- <dd>Fetches a word of data (long) from the user-space address
- <span class="Pa">base</span> and stores the result in the variable pointed
- by <span class="Pa">val</span>.</dd>
- <dt id="fueword32"><a class="permalink" href="#fueword32"><code class="Fn">fueword32</code></a>()</dt>
- <dd>Fetches 32 bits of data from the user-space address
- <span class="Pa">base</span> and stores the result in the variable pointed
- by <span class="Pa">val</span>.</dd>
- <dt id="fueword64"><a class="permalink" href="#fueword64"><code class="Fn">fueword64</code></a>()</dt>
- <dd>Fetches 64 bits of data from the user-space address
- <span class="Pa">base</span> and stores the result in the variable pointed
- by <span class="Pa">val</span>.</dd>
-</dl>
-<p class="Pp" id="fuword">The callers of
- <a class="permalink" href="#fuword"><code class="Fn">fuword</code></a>(),
- <a class="permalink" href="#fuword32"><code class="Fn" id="fuword32">fuword32</code></a>()
- and
- <a class="permalink" href="#fuword64"><code class="Fn" id="fuword64">fuword64</code></a>()
- functions cannot distinguish between -1 read from userspace and function
- failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">fubyte</code>(),
- <code class="Fn">fuword</code>(), <code class="Fn">fuword16</code>(),
- <code class="Fn">fuword32</code>(), and <code class="Fn">fuword64</code>()
- functions return the data fetched or -1 on failure. The
- <code class="Fn">fueword</code>(), <code class="Fn">fueword32</code>() and
- <code class="Fn">fueword64</code>() functions return 0 on success and -1 on
- failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">copy(9)</a>, <a class="Xr">store(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 22, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/firmware.9 3.html b/static/freebsd/man9/firmware.9 3.html
deleted file mode 100644
index 06e4ca52..00000000
--- a/static/freebsd/man9/firmware.9 3.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">FIRMWARE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">FIRMWARE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">firmware_register</code>,
- <code class="Nm">firmware_unregister</code>,
- <code class="Nm">firmware_get</code>,
- <code class="Nm">firmware_get_flags</code>,
- <code class="Nm">firmware_put</code> &#x2014; <span class="Nd">firmware
- image loading and management</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/linker.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/firmware.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>struct firmware {
- const char *name; /* system-wide name */
- const void *data; /* location of image */
- size_t datasize; /* size of image in bytes */
- unsigned int version; /* version of the image */
-};</pre>
-</div>
-<br/>
-<var class="Ft">const struct firmware *</var>
-<br/>
-<code class="Fn">firmware_register</code>(<var class="Fa">const char
- *imagename</var>, <var class="Fa">const void *data</var>,
- <var class="Fa">size_t datasize</var>, <var class="Fa">unsigned int
- version</var>, <var class="Fa">const struct firmware *parent</var>);
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">firmware_unregister</code>(<var class="Fa" style="white-space: nowrap;">const
- char *imagename</var>);</p>
-<p class="Pp"><var class="Ft">const struct firmware *</var>
- <br/>
- <code class="Fn">firmware_get</code>(<var class="Fa" style="white-space: nowrap;">const
- char *imagename</var>);</p>
-<p class="Pp"><var class="Ft">const struct firmware *</var>
- <br/>
- <code class="Fn">firmware_get_flags</code>(<var class="Fa" style="white-space: nowrap;">const
- char *imagename</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">firmware_put</code>(<var class="Fa" style="white-space: nowrap;">const
- struct firmware *fp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">firmware</code> abstraction provides a
- convenient interface for loading <code class="Nm">firmware images</code>
- into the kernel, and for accessing such images from kernel components.</p>
-<p class="Pp">A <code class="Nm">firmware image</code> (or
- <code class="Nm">image</code> for brevity) is an opaque block of data
- residing in kernel memory. It is associated to a unique
- <code class="Nm">imagename</code> which constitutes a search key, and to an
- integer <code class="Nm">version</code> number, which is also an opaque
- piece of information for the firmware subsystem.</p>
-<p class="Pp" id="firmware_register">An image is registered with the
- <code class="Nm">firmware</code> subsystem by calling the function
- <a class="permalink" href="#firmware_register"><code class="Fn">firmware_register</code></a>(),
- and unregistered by calling <code class="Fn">firmware_unregister</code>().
- These functions are usually (but not exclusively) called by specially
- crafted kernel modules that contain the firmware image. The modules can be
- statically compiled in the kernel, or loaded by
- <span class="Pa">/boot/loader</span>, manually at runtime, or on demand by
- the firmware subsystem.</p>
-<p class="Pp">Firmware binary files may also be loaded directly rather than
- embedded into kernel modules.</p>
-<p class="Pp" id="firmware_get"><code class="Nm">Clients</code> of the firmware
- subsystem can request access to a given image by calling the function
- <a class="permalink" href="#firmware_get"><code class="Fn">firmware_get</code></a>()
- with the <code class="Nm">imagename</code> they want as an argument, or by
- calling
- <a class="permalink" href="#firmware_get_flags"><code class="Fn" id="firmware_get_flags">firmware_get_flags</code></a>()
- with the <code class="Nm">imagename</code> and <code class="Nm">flags</code>
- they want as an arguments. If a matching image is not already registered,
- the firmware subsystem will try to load it using the mechanisms specified
- below (typically, a kernel module with
- <code class="Nm">firmware_register</code> the same name as the image).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="API_DESCRIPTION"><a class="permalink" href="#API_DESCRIPTION">API
- DESCRIPTION</a></h1>
-<p class="Pp">The kernel <code class="Nm">firmware_register</code> firmware API
- is made of the following functions:</p>
-<p class="Pp" id="firmware_register~2"><a class="permalink" href="#firmware_register~2"><code class="Fn">firmware_register</code></a>()
- registers with the kernel an image of size <code class="Nm">datasize</code>
- located at address <code class="Nm">data</code>, under the name
- <code class="Nm">imagename</code>.</p>
-<p class="Pp">The function returns NULL on error (e.g. because an image with the
- same name already exists, or the image table is full), or a
- <var class="Ft">const struct firmware *</var> pointer to the image
- requested.</p>
-<p class="Pp" id="firmware_unregister"><a class="permalink" href="#firmware_unregister"><code class="Fn">firmware_unregister</code></a>()
- tries to unregister the firmware image <code class="Nm">imagename</code>
- from the system. The function is successful and returns 0 if there are no
- pending references to the image, otherwise it does not unregister the image
- and returns EBUSY.</p>
-<p class="Pp" id="firmware_get~2"><a class="permalink" href="#firmware_get~2"><code class="Fn">firmware_get</code></a>()
- and
- <a class="permalink" href="#firmware_get_flags~2"><code class="Fn" id="firmware_get_flags~2">firmware_get_flags</code></a>()
- return the requested firmware image. The <var class="Fa">flags</var>
- argument may be set to <code class="Dv">FIRMWARE_GET_NOWARN</code> to
- indicate that errors on firmware load or registration should only be logged
- in case of <code class="Nm">booverbose</code>. If the image is not yet
- registered with the system, the functions try to load it. This involves the
- linker subsystem and disk access, so <code class="Fn">firmware_get</code>()
- or <code class="Fn">firmware_get_flags</code>() must not be called with any
- locks (except for <var class="Va">Giant</var>). Note also that if the
- firmware image is loaded from a filesystem it must already be mounted. In
- particular this means that it may be necessary to defer requests from a
- driver attach method unless it is known the root filesystem is already
- mounted.</p>
-<p class="Pp" id="firmware_get~3">On success,
- <a class="permalink" href="#firmware_get~3"><code class="Fn">firmware_get</code></a>()
- and
- <a class="permalink" href="#firmware_get_flags~3"><code class="Fn" id="firmware_get_flags~3">firmware_get_flags</code></a>()
- return a pointer to the image description and increase the reference count
- for this image. On failure, the functions return NULL.</p>
-<p class="Pp" id="firmware_put"><a class="permalink" href="#firmware_put"><code class="Fn">firmware_put</code></a>()
- drops a reference to a firmware image. The <var class="Fa">flags</var>
- argument may be set to <code class="Dv">FIRMWARE_UNLOAD</code> to indicate
- that firmware_put is free to reclaim resources associated with the firmware
- image if this is the last reference. By default a firmware image will be
- deferred to a <a class="Xr">taskqueue(9)</a> thread so the call may be done
- while holding a lock. In certain cases, such as on driver detach, this
- cannot be allowed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FIRMWARE_LOADING_VIA_MODULES"><a class="permalink" href="#FIRMWARE_LOADING_VIA_MODULES">FIRMWARE
- LOADING VIA MODULES</a></h1>
-<p class="Pp">As mentioned before, any component of the system can register
- firmware images at any time by simply calling
- <code class="Fn">firmware_register</code>().</p>
-<p class="Pp" id="firmware_register~3">This is typically done when a module
- containing a firmware image is given control, whether compiled in, or
- preloaded by <span class="Pa">/boot/loader</span>, or manually loaded with
- <a class="Xr">kldload(8)</a>. However, a system can implement additional
- mechanisms to bring these images into memory before calling
- <a class="permalink" href="#firmware_register~3"><code class="Fn">firmware_register</code></a>().</p>
-<p class="Pp" id="firmware_get~4">When
- <a class="permalink" href="#firmware_get~4"><code class="Fn">firmware_get</code></a>()
- or
- <a class="permalink" href="#firmware_get_flags~4"><code class="Fn" id="firmware_get_flags~4">firmware_get_flags</code></a>()
- does not find the requested image, it tries to load it using one of the
- available loading mechanisms. At the moment, there is only one, namely
- <code class="Nm">Loadable kernel modules</code>.</p>
-<p class="Pp">A firmware image named <code class="Nm">foo</code> is looked up by
- trying to load the module named <code class="Nm">foo.ko</code>, using the
- facilities described in <a class="Xr">kld(4)</a>. In particular, images are
- looked up in the directories specified by the sysctl variable
- <code class="Nm">kern.module_path</code> which on most systems defaults to
- <span class="Pa">/boot/kernel;/boot/modules</span>.</p>
-<p class="Pp" id="firmware_get~5">Note that in case a module contains multiple
- images, the caller should first request a
- <a class="permalink" href="#firmware_get~5"><code class="Fn">firmware_get</code></a>()
- or
- <a class="permalink" href="#firmware_get_flags~5"><code class="Fn" id="firmware_get_flags~5">firmware_get_flags</code></a>()
- for the first image contained in the module, followed by requests for the
- other images.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUILDING_FIRMWARE_LOADABLE_MODULES"><a class="permalink" href="#BUILDING_FIRMWARE_LOADABLE_MODULES">BUILDING
- FIRMWARE LOADABLE MODULES</a></h1>
-<p class="Pp">A firmware module is built by embedding the
- <code class="Nm">firmware image</code> into a suitable loadable kernel
- module that calls <code class="Fn">firmware_register</code>() on loading,
- and <code class="Fn">firmware_unregister</code>() on unloading.</p>
-<p class="Pp">Various system scripts and makefiles let you build a module by
- simply writing a Makefile with the following entries:</p>
-<div class="Bd Pp Li">
-<pre>
- KMOD= imagename
- FIRMWS= image_file:imagename[:version]
- .include &lt;bsd.kmod.mk&gt;
-
-</pre>
-</div>
-where KMOD is the basename of the module; FIRMWS is a list of colon-separated
- tuples indicating the image_file's to be embedded in the module, the imagename
- and version of each firmware image.
-<p class="Pp">If you need to embed firmware images into a system, you should
- write appropriate entries in the &lt;files.arch&gt; or &lt;files&gt; file,
- e.g. this example is from <code class="Nm">sys/conf/files</code></p>
-<div class="Bd Pp Li">
-<pre>iwn1000fw.c optional iwn1000fw | iwnfw \
- compile-with &quot;${AWK} -f $S/tools/fw_stub.awk iwn1000.fw:iwn1000fw -miwn1000fw -c${.TARGET}&quot; \
- no-ctfconvert no-implicit-rule before-depend local \
- clean &quot;iwn1000fw.c&quot;
-#
-# NB: ld encodes the path in the binary symbols generated for the
-# firmware image so link the file to the object directory to
-# get known values for reference in the _fw.c file.
-#
-iwn1000fw.fwo optional iwn1000fw | iwnfw \
- dependency &quot;iwn1000.fw&quot; \
- compile-with &quot;${NORMAL_FWO}&quot; \
- no-implicit-rule \
- clean &quot;iwn1000fw.fwo&quot;</pre>
-</div>
-<p class="Pp">Firmware was previously committed to the source tree as uuencoded
- files, but this is no longer required; the binary firmware file should be
- committed to the tree as provided by the vendor.</p>
-<p class="Pp">Note that generating the firmware modules in this way requires the
- availability of the following tools: <a class="Xr">awk(1)</a>,
- <a class="Xr">make(1)</a>, the compiler and the linker.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOADING_BINARY_FIRMWARE_FILES"><a class="permalink" href="#LOADING_BINARY_FIRMWARE_FILES">LOADING
- BINARY FIRMWARE FILES</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Binary_Firmware_Format"><a class="permalink" href="#Binary_Firmware_Format">Binary
- Firmware Format</a></h2>
-<p class="Pp">Binary firmware files can also be loaded, either from
- <span class="Pa">/boot/loader</span>, or when
- <code class="Nm">firmware_get</code> cannot find the registered firmware
- from a kernel module. Binary firmware files are raw binary files that the
- creator of the firmware made. They offer an easier way to load firmware, but
- one that lacks the full flexibility and generality of kernel modules with
- the following restrictions:</p>
-<ul class="Bl-bullet Bl-compact">
- <li>Binary firmware files only hold one set of firmware.</li>
- <li>They do not offer kernel module dependencies to ensure they are loaded
- automatically by the boot loader.</li>
- <li>They cannot be compiled into the kernel.</li>
- <li>The <code class="Nm">imagename</code> is identical to the full path name
- used to load the module.</li>
- <li>The version number is assumed to be zero.</li>
-</ul>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Loading_from_/boot/loader"><a class="permalink" href="#Loading_from_/boot/loader">Loading
- from <span class="Pa">/boot/loader</span></a></h2>
-<p class="Pp">Binary firmware files may be loaded either from the command line
- with &#x201C;load -t firmware /boot/firmware/filename&#x201D; or using the
- <a class="Xr">loader.conf(5)</a> mechanism to load modules with a type of
- &#x201C;firmware&#x201D; For example</p>
-<div class="Bd Pp Li">
-<pre>wififw_load=&quot;YES&quot;
-wififw_name=&quot;/boot/firmware/wifi2034_fw.bin&quot;
-wififw_type=&quot;firmware&quot;</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="On_demand_loading_from_firmware_get"><a class="permalink" href="#On_demand_loading_from_firmware_get">On
- demand loading from <code class="Nm">firmware_get</code></a></h2>
-<p class="Pp">If no kernel module with an embedded firmware image named
- <code class="Nm">imagename</code> is loaded, then
- <code class="Nm">imagename</code> will be appended to the module path (by
- default <span class="Pa">/boot/firmware/</span>) and if that file exists, it
- will be loaded and registered using
- <code class="Nm">firmware_register</code> using the full path to the
- filename as <code class="Nm">imagename</code>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Searching_for_imagename"><a class="permalink" href="#Searching_for_imagename">Searching
- for imagename</a></h2>
-<p class="Pp"><code class="Nm">firmware_get</code> uses the following algorithm
- to find firmware images:</p>
-<ul class="Bl-bullet Bl-compact">
- <li>If an existing firmware image is registered for
- <var class="Fa">imagename,</var> that image is returned.</li>
- <li>If <var class="Fa">imagename</var> matches the trailing subpath of a
- registered image with a full path, that image is returned.</li>
- <li>The kernel linker searches for a kernel module named
- <var class="Fa">imagename</var>. If a kernel module is found, it is
- loaded, and the list of registered firmware images is searched again. If a
- match is found, the matching image is returned.</li>
- <li>The kernel searches for a file named <var class="Fa">imagename</var> in
- the firmware image path (by default
- <span class="Pa">/boot/firmware/</span>). If that file exists and can be
- read, it contents are registered as a firmware image with the full path as
- the <code class="Nm">imagename</code> and that firmware is returned.
- Currently, there is an 8MB limit on the size of the firmware image. This
- can be changed by by the sysctl variable
- <code class="Nm">debug.max_firmware_size</code>.</li>
-</ul>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">kld(4)</a>, <a class="Xr">module(9)</a></p>
-<p class="Pp"><span class="Pa">/boot/firmware</span></p>
-<p class="Pp"><span class="Pa">/usr/share/examples/kld/firmware</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">firmware</code> system was introduced in
- <span class="Ux">FreeBSD 6.1</span>. Binary firmware loading was introduced
- in <span class="Ux">FreeBSD 15.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Max Laier</span>
- &lt;<a class="Mt" href="mailto:mlaier@FreeBSD.org">mlaier@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 25, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/fpu_kern.9 3.html b/static/freebsd/man9/fpu_kern.9 3.html
deleted file mode 100644
index 9d23f79c..00000000
--- a/static/freebsd/man9/fpu_kern.9 3.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">FPU_KERN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">FPU_KERN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">fpu_kern</code> &#x2014;
- <span class="Nd">facility to use the FPU in the kernel</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/fpu.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct fpu_kern_ctx *</var>
- <br/>
- <code class="Fn">fpu_kern_alloc_ctx</code>(<var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">fpu_kern_free_ctx</code>(<var class="Fa" style="white-space: nowrap;">struct
- fpu_kern_ctx *ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">fpu_kern_enter</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct
- fpu_kern_ctx *ctx</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fpu_kern_leave</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct
- fpu_kern_ctx *ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">fpu_kern_thread</code>(<var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">is_fpu_kern_thread</code>(<var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">fpu_kern</code> family of functions allows
- the use of FPU hardware in kernel code. Modern FPUs are not limited to
- providing hardware implementation for floating point arithmetic; they offer
- advanced accelerators for cryptography and other computational-intensive
- algorithms. These facilities share registers with the FPU hardware.</p>
-<p class="Pp">Typical kernel code does not need access to the FPU. Saving a
- large register file on each entry to the kernel would waste time. When
- kernel code uses the FPU, the current FPU state must be saved to avoid
- corrupting the user-mode state, and vice versa.</p>
-<p class="Pp">The management of the save and restore is automatic. The processor
- catches accesses to the FPU registers when the non-current context tries to
- access them. Explicit calls are required for the allocation of the save area
- and the notification of the start and end of the code using the FPU.</p>
-<p class="Pp" id="fpu_kern_alloc_ctx">The
- <a class="permalink" href="#fpu_kern_alloc_ctx"><code class="Fn">fpu_kern_alloc_ctx</code></a>()
- function allocates the memory used by <code class="Nm">fpu_kern</code> to
- track the use of the FPU hardware state and the related software state. The
- <code class="Fn">fpu_kern_alloc_ctx</code>() function requires the
- <var class="Fa">flags</var> argument, which currently accepts the following
- flags:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="FPU_KERN_NOWAIT"><a class="permalink" href="#FPU_KERN_NOWAIT"><code class="Dv">FPU_KERN_NOWAIT</code></a></dt>
- <dd>Do not wait for the available memory if the request could not be satisfied
- without sleep.</dd>
- <dt>0</dt>
- <dd>No special handling is required.</dd>
-</dl>
-</div>
-<p class="Pp">The function returns the allocated context area, or
- <var class="Va">NULL</var> if the allocation failed.</p>
-<p class="Pp" id="fpu_kern_free_ctx">The
- <a class="permalink" href="#fpu_kern_free_ctx"><code class="Fn">fpu_kern_free_ctx</code></a>()
- function frees the context previously allocated by
- <code class="Fn">fpu_kern_alloc_ctx</code>().</p>
-<p class="Pp" id="fpu_kern_enter">The
- <a class="permalink" href="#fpu_kern_enter"><code class="Fn">fpu_kern_enter</code></a>()
- function designates the start of the region of kernel code where the use of
- the FPU is allowed. Its arguments are:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">td</var></dt>
- <dd>Currently must be <var class="Va">curthread</var>.</dd>
- <dt><var class="Fa">ctx</var></dt>
- <dd>The context save area previously allocated by
- <code class="Fn">fpu_kern_alloc_ctx</code>() and not currently in use by
- another call to <code class="Fn">fpu_kern_enter</code>().</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>This argument currently accepts the following flags:
- <div class="Bd-indent">
- <dl class="Bl-tag">
- <dt id="FPU_KERN_NORMAL"><a class="permalink" href="#FPU_KERN_NORMAL"><code class="Dv">FPU_KERN_NORMAL</code></a></dt>
- <dd>Indicates that the caller intends to access the full FPU state. Must
- be specified currently.</dd>
- <dt id="FPU_KERN_KTHR"><a class="permalink" href="#FPU_KERN_KTHR"><code class="Dv">FPU_KERN_KTHR</code></a></dt>
- <dd>Indicates that no saving of the current FPU state should be performed,
- if the thread called <a class="Xr">fpu_kern_thread(9)</a> function.
- This is intended to minimize code duplication in callers which could
- be used from both kernel thread and syscall contexts. The
- <code class="Fn">fpu_kern_leave</code>() function correctly handles
- such contexts.</dd>
- <dt id="FPU_KERN_NOCTX"><a class="permalink" href="#FPU_KERN_NOCTX"><code class="Dv">FPU_KERN_NOCTX</code></a></dt>
- <dd>Avoid nesting save area. If the flag is specified, the
- <var class="Fa">ctx</var> must be passed as
- <var class="Va">NULL</var>. The flag should only be used for really
- short code blocks which can be executed in a critical section. It
- avoids the need to allocate the FPU context by the cost of increased
- system latency.</dd>
- </dl>
- </div>
- </dd>
-</dl>
-</div>
-<p class="Pp">The function does not sleep or block. It could cause an FPU trap
- during execution, and on the first FPU access after the function returns, as
- well as after each context switch. On i386 and amd64 this will be the
- <code class="Nm">Device Not Available</code> exception (see Intel Software
- Developer Manual for the reference).</p>
-<p class="Pp" id="fpu_kern_leave">The
- <a class="permalink" href="#fpu_kern_leave"><code class="Fn">fpu_kern_leave</code></a>()
- function ends the region started by
- <code class="Fn">fpu_kern_enter</code>(). It is erroneous to use the FPU in
- the kernel before <code class="Fn">fpu_kern_enter</code>() or after
- <code class="Fn">fpu_kern_leave</code>(). The function takes the
- <var class="Fa">td</var> thread argument, which currently must be
- <var class="Va">curthread</var>, and the <var class="Fa">ctx</var> context
- pointer, previously passed to <code class="Fn">fpu_kern_enter</code>().
- After the function returns, the context may be freed or reused by another
- invocation of <code class="Fn">fpu_kern_enter</code>(). The function always
- returns 0.</p>
-<p class="Pp" id="fpu_kern_thread">The
- <a class="permalink" href="#fpu_kern_thread"><code class="Fn">fpu_kern_thread</code></a>()
- function enables an optimization for threads which never leave to the
- usermode. The current thread will reuse the usermode save area for the
- kernel FPU state instead of requiring an explicitly allocated context. There
- are no flags defined for the function, and no error states that the function
- returns. Once this function has been called, neither
- <code class="Fn">fpu_kern_enter</code>() nor
- <code class="Fn">fpu_kern_leave</code>() is required to be called and the
- fpu is available for use in the calling thread.</p>
-<p class="Pp" id="is_fpu_kern_thread">The
- <a class="permalink" href="#is_fpu_kern_thread"><code class="Fn">is_fpu_kern_thread</code></a>()
- function returns the boolean indicating whether the current thread entered
- the mode enabled by <code class="Fn">fpu_kern_thread</code>(). There is
- currently no flags defined for the function, the return value is true if the
- current thread have the permanent FPU save area, and false otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">The <code class="Nm">fpu_kern</code> is currently implemented only
- for the i386, amd64, arm64, and powerpc architectures.</p>
-<p class="Pp">There is no way to handle floating point exceptions raised from
- kernel mode.</p>
-<p class="Pp">The unused <var class="Fa">flags</var> arguments to the
- <code class="Nm">fpu_kern</code> functions are to be extended to allow
- specification of the set of the FPU hardware state used by the code region.
- This would allow optimizations of saving and restoring the state.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">fpu_kern</code> facitily and this manual page
- were written by <span class="An">Konstantin Belousov</span>
- &lt;<a class="Mt" href="mailto:kib@FreeBSD.org">kib@FreeBSD.org</a>&gt;. The
- arm64 support was added by
- <br/>
- <span class="An">Andrew Turner</span>
- &lt;<a class="Mt" href="mailto:andrew@FreeBSD.org">andrew@FreeBSD.org</a>&gt;.
- The powerpc support was added by
- <br/>
- <span class="An">Shawn Anastasio</span>
- &lt;<a class="Mt" href="mailto:sanastasio@raptorengineering.com">sanastasio@raptorengineering.com</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp"><code class="Fn">fpu_kern_leave</code>() should probably have type
- <var class="Ft">void</var> (like
- <code class="Fn">fpu_kern_enter</code>()).</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 13, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_access.9 3.html b/static/freebsd/man9/g_access.9 3.html
deleted file mode 100644
index 9c60e98a..00000000
--- a/static/freebsd/man9/g_access.9 3.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_ACCESS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_ACCESS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_access</code> &#x2014; <span class="Nd">control
- access to GEOM consumers and their providers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">g_access</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_consumer *cp</var>, <var class="Fa" style="white-space: nowrap;">int
- dcr</var>, <var class="Fa" style="white-space: nowrap;">int dcw</var>,
- <var class="Fa" style="white-space: nowrap;">int dce</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#g_access"><code class="Fn" id="g_access">g_access</code></a>()
- function allows to open, close, and generally change access to the provider
- which is attached to the given consumer <var class="Fa">cp</var>. The
- arguments <var class="Fa">dcr</var>, <var class="Fa">dcw</var>, and
- <var class="Fa">dce</var> represent relative read, write, and exclusive
- access count changes. Read and write access counts are self explanatory, and
- exclusive access counts deny write access to other interested parties. A
- provider's access count is the sum of the access counts of all attached
- consumers.</p>
-<p class="Pp" id="g_access~2">After attaching a consumer to a provider with
- <a class="Xr">g_attach(9)</a>, the
- <a class="permalink" href="#g_access~2"><code class="Fn">g_access</code></a>()
- function has to be called on the consumer before starting I/O requests.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">The consumer has to be attached to a provider.</p>
-<p class="Pp">The intended change must not result in a negative access
- count.</p>
-<p class="Pp">No-operation is not permitted (<var class="Fa">dcr</var> =
- <var class="Fa">dcw</var> = <var class="Fa">dce</var> =
- <code class="Li">0</code>).</p>
-<p class="Pp">The provider's geom must have an access method defined (e.g.,
- <var class="Va">gp-&gt;access</var>).</p>
-<p class="Pp">The topology lock has to be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_access</code>() function returns 0 if
- successful; otherwise an error code is returned. Note that
- <code class="Fn">g_access</code>() cannot fail when the arguments
- <var class="Fa">dcr</var>, <var class="Fa">dcw</var>, and
- <var class="Fa">dce</var> are less than or equal to 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Create a consumer, attach it to a given provider, gain read access
- and read first sector.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-some_function(struct g_geom *mygeom, struct g_provider *pp)
-{
- struct g_consumer *cp;
- void *ptr;
- int error;
-
- g_topology_assert();
-
- /* Create new consumer on 'mygeom' geom. */
- cp = g_new_consumer(mygeom);
- /* Attach newly created consumer to given provider. */
- if (g_attach(cp, pp) != 0) {
- g_destroy_consumer(cp);
- return;
- }
- /* Open provider for reading through our consumer. */
- error = g_access(cp, 1, 0, 0);
- if (error != 0) {
- printf(&quot;Cannot access provider: %s\n&quot;, error);
- g_detach(cp);
- g_destroy_consumer(cp);
- return;
- }
-
- /*
- * Don't hold topology lock while reading.
- */
- g_topology_unlock();
- ptr = g_read_data(cp, 0, pp-&gt;sectorsize, &amp;error);
- if (ptr == NULL)
- printf(&quot;Error while reading: %d\n&quot;, error);
- /*
- * Do something useful with data.
- */
- g_topology_lock();
-
- /* Disconnect from provider (release access count). */
- g_access(cp, -1, 0, 0);
- /* Detach from provider. */
- g_detach(cp);
- /* Destroy consumer. */
- g_destroy_consumer(cp);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">Possible errors:</p>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The function is trying to open a provider with an exclusive access count,
- but it is already open for writing.</dd>
- <dt id="EPERM~2">[<a class="permalink" href="#EPERM~2"><code class="Er">EPERM</code></a>]</dt>
- <dd>The function is trying to open a provider for writing, but it is already
- exclusively open.</dd>
-</dl>
-<p class="Pp">Any other error that can be returned by the provider's access
- method.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_attach(9)</a>,
- <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>,
- <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_attach.9 3.html b/static/freebsd/man9/g_attach.9 3.html
deleted file mode 100644
index 21fb0f5f..00000000
--- a/static/freebsd/man9/g_attach.9 3.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_ATTACH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_ATTACH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_attach</code>, <code class="Nm">g_detach</code>
- &#x2014; <span class="Nd">attach/detach GEOM consumers to/from
- providers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">g_attach</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_consumer *cp</var>, <var class="Fa" style="white-space: nowrap;">struct
- g_provider *pp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_detach</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_consumer *cp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#g_attach"><code class="Fn" id="g_attach">g_attach</code></a>()
- function attaches given consumer <var class="Fa">cp</var> to given provider
- <var class="Fa">pp</var>, thus establishing a communication channel between
- the consumer and the provider that allows to change access counts and
- perform I/O operations.</p>
-<p class="Pp" id="g_detach">The
- <a class="permalink" href="#g_detach"><code class="Fn">g_detach</code></a>()
- function detaches given consumer <var class="Fa">cp</var> from its
- corresponding provider, tearing down the communication channel between
- them.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp"><code class="Fn">g_attach</code>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The consumer must not be attached to a provider.</li>
- <li>The operation must not create a topology loop.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-<p class="Pp" id="g_detach~2"><a class="permalink" href="#g_detach~2"><code class="Fn">g_detach</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The consumer has to be attached.</li>
- <li>The access count has to be 0.</li>
- <li>There must be no active requests.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_attach</code>() function returns 0 if
- successful; otherwise an error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Create a consumer, attach it to a given provider, gain read access
- and clean up.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-some_function(struct g_geom *mygeom, struct g_provider *pp)
-{
- struct g_consumer *cp;
-
- g_topology_assert();
-
- /* Create new consumer on 'mygeom' geom. */
- cp = g_new_consumer(mygeom);
- /* Attach newly created consumer to given provider. */
- if (g_attach(cp, pp) != 0) {
- g_destroy_consumer(cp);
- return;
- }
- /* Open provider for reading through our consumer. */
- if (g_access(cp, 1, 0, 0) != 0) {
- g_detach(cp);
- g_destroy_consumer(cp);
- return;
- }
-
- g_topology_unlock();
- /*
- * Read data from provider.
- */
- g_topology_lock();
-
- /* Disconnect from provider (release access count). */
- g_access(cp, -1, 0, 0);
- /* Detach from provider. */
- g_detach(cp);
- /* Destroy consumer. */
- g_destroy_consumer(cp);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">Possible errors:</p>
-<dl class="Bl-tag">
- <dt id="ELOOP">[<a class="permalink" href="#ELOOP"><code class="Er">ELOOP</code></a>]</dt>
- <dd>The operation creates a topology loop.</dd>
- <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt>
- <dd>Provider got orphaned.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>,
- <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 10, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_bio.9 3.html b/static/freebsd/man9/g_bio.9 3.html
deleted file mode 100644
index fcd3ab31..00000000
--- a/static/freebsd/man9/g_bio.9 3.html
+++ /dev/null
@@ -1,270 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_BIO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_BIO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_new_bio</code>,
- <code class="Nm">g_clone_bio</code>, <code class="Nm">g_destroy_bio</code>,
- <code class="Nm">g_format_bio</code>, <code class="Nm">g_print_bio</code>,
- <code class="Nm">g_reset_bio</code> &#x2014; <span class="Nd">GEOM bio
- controlling functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct bio *</var>
- <br/>
- <code class="Fn">g_new_bio</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">struct bio *</var>
- <br/>
- <code class="Fn">g_alloc_bio</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">struct bio *</var>
- <br/>
- <code class="Fn">g_clone_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">struct bio *</var>
- <br/>
- <code class="Fn">g_duplicate_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_destroy_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_format_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct
- bio *bp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_print_bio</code>(<var class="Fa">struct sbuf *sb</var>,
- <var class="Fa">const char *prefix</var>, <var class="Fa">const struct bio
- *bp</var>, <var class="Fa">const char *fmtsuffix</var>,
- <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_reset_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- bio *bp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">A <var class="Vt">struct bio</var> is used by GEOM to describe I/O
- requests, its most important fields are described below:</p>
-<dl class="Bl-tag">
- <dt id="bio_cmd"><var class="Va">bio_cmd</var></dt>
- <dd>I/O request command. There are five I/O requests available in GEOM:
- <dl class="Bl-tag">
- <dt id="BIO_READ"><a class="permalink" href="#BIO_READ"><code class="Dv">BIO_READ</code></a></dt>
- <dd>A read request.</dd>
- <dt id="BIO_WRITE"><a class="permalink" href="#BIO_WRITE"><code class="Dv">BIO_WRITE</code></a></dt>
- <dd>A write request.</dd>
- <dt id="BIO_DELETE"><a class="permalink" href="#BIO_DELETE"><code class="Dv">BIO_DELETE</code></a></dt>
- <dd>Indicates that a certain range of data is no longer used and that it
- can be erased or freed as the underlying technology supports.
- Technologies like flash adaptation layers can arrange to erase the
- relevant blocks before they will become reassigned and cryptographic
- devices may want to fill random bits into the range to reduce the
- amount of data available for attack.</dd>
- <dt id="BIO_GETATTR"><a class="permalink" href="#BIO_GETATTR"><code class="Dv">BIO_GETATTR</code></a></dt>
- <dd>Inspect and manipulate out-of-band attributes on a particular provider
- or path. Attributes are named by ascii strings and are stored in the
- <var class="Va">bio_attribute</var> field.</dd>
- <dt id="BIO_FLUSH"><a class="permalink" href="#BIO_FLUSH"><code class="Dv">BIO_FLUSH</code></a></dt>
- <dd>Tells underlying providers to flush their write caches.</dd>
- </dl>
- </dd>
- <dt id="bio_flags"><var class="Va">bio_flags</var></dt>
- <dd>Available flags:
- <dl class="Bl-tag">
- <dt id="BIO_ERROR"><a class="permalink" href="#BIO_ERROR"><code class="Dv">BIO_ERROR</code></a></dt>
- <dd>Request failed (error value is stored in
- <var class="Va">bio_error</var> field).</dd>
- <dt id="BIO_DONE"><a class="permalink" href="#BIO_DONE"><code class="Dv">BIO_DONE</code></a></dt>
- <dd>Request finished.</dd>
- </dl>
- </dd>
- <dt id="bio_cflags"><var class="Va">bio_cflags</var></dt>
- <dd>Private use by the consumer.</dd>
- <dt id="bio_pflags"><var class="Va">bio_pflags</var></dt>
- <dd>Private use by the provider.</dd>
- <dt id="bio_offset"><var class="Va">bio_offset</var></dt>
- <dd>Offset into provider.</dd>
- <dt id="bio_data"><var class="Va">bio_data</var></dt>
- <dd>Pointer to data buffer.</dd>
- <dt id="bio_error"><var class="Va">bio_error</var></dt>
- <dd>Error value when <code class="Dv">BIO_ERROR</code> is set.</dd>
- <dt id="bio_done"><var class="Va">bio_done</var></dt>
- <dd>Pointer to function which will be called when the request is
- finished.</dd>
- <dt id="bio_driver1"><var class="Va">bio_driver1</var></dt>
- <dd>Private use by the provider.</dd>
- <dt id="bio_driver2"><var class="Va">bio_driver2</var></dt>
- <dd>Private use by the provider.</dd>
- <dt id="bio_caller1"><var class="Va">bio_caller1</var></dt>
- <dd>Private use by the consumer.</dd>
- <dt id="bio_caller2"><var class="Va">bio_caller2</var></dt>
- <dd>Private use by the consumer.</dd>
- <dt id="bio_attribute"><var class="Va">bio_attribute</var></dt>
- <dd>Attribute string for <code class="Dv">BIO_GETATTR</code> request.</dd>
- <dt id="bio_from"><var class="Va">bio_from</var></dt>
- <dd>Consumer to use for request (attached to provider stored in
- <var class="Va">bio_to</var> field) (typically read-only for a
- class).</dd>
- <dt id="bio_to"><var class="Va">bio_to</var></dt>
- <dd>Destination provider (typically read-only for a class).</dd>
- <dt id="bio_length"><var class="Va">bio_length</var></dt>
- <dd>Request length in bytes.</dd>
- <dt id="bio_completed"><var class="Va">bio_completed</var></dt>
- <dd>Number of bytes completed, but they may not be completed from the front of
- the request.</dd>
- <dt id="bio_children"><var class="Va">bio_children</var></dt>
- <dd>Number of <var class="Vt">bio</var> clones (typically read-only for a
- class).</dd>
- <dt id="bio_inbed"><var class="Va">bio_inbed</var></dt>
- <dd>Number of finished <var class="Vt">bio</var> clones.</dd>
- <dt id="bio_parent"><var class="Va">bio_parent</var></dt>
- <dd>Pointer to parent <var class="Vt">bio</var>.</dd>
-</dl>
-<p class="Pp" id="g_new_bio">The
- <a class="permalink" href="#g_new_bio"><code class="Fn">g_new_bio</code></a>()
- function allocates a new, empty <var class="Vt">bio</var> structure.</p>
-<p class="Pp" id="g_alloc_bio"><a class="permalink" href="#g_alloc_bio"><code class="Fn">g_alloc_bio</code></a>()
- - same as <code class="Fn">g_new_bio</code>(), but always succeeds
- (allocates bio with the <code class="Dv">M_WAITOK</code> malloc flag).</p>
-<p class="Pp" id="g_clone_bio">The
- <a class="permalink" href="#g_clone_bio"><code class="Fn">g_clone_bio</code></a>()
- function allocates a new <var class="Vt">bio</var> structure and copies the
- following fields from the <var class="Vt">bio</var> given as an argument to
- clone: <var class="Va">bio_cmd</var>, <var class="Va">bio_length</var>,
- <var class="Va">bio_offset</var>, <var class="Va">bio_data</var>,
- <var class="Va">bio_attribute</var>. The field
- <var class="Va">bio_parent</var> in the clone points to the passed
- <var class="Vt">bio</var> and the field <var class="Va">bio_children</var>
- in the passed <var class="Vt">bio</var> is incremented.</p>
-<p class="Pp">This function should be used for every request which enters
- through the provider of a particular geom and needs to be scheduled down.
- Proper order is:</p>
-<p class="Pp"></p>
-<ol class="Bl-enum Bl-compact">
- <li>Clone the received <var class="Vt">struct bio</var>.</li>
- <li>Modify the clone.</li>
- <li>Schedule the clone on its own consumer.</li>
-</ol>
-<p class="Pp" id="g_duplicate_bio"><a class="permalink" href="#g_duplicate_bio"><code class="Fn">g_duplicate_bio</code></a>()
- - same as <code class="Fn">g_clone_bio</code>(), but always succeeds
- (allocates bio with the <code class="Dv">M_WAITOK</code> malloc flag).</p>
-<p class="Pp" id="g_destroy_bio">The
- <a class="permalink" href="#g_destroy_bio"><code class="Fn">g_destroy_bio</code></a>()
- function deallocates and destroys the given <var class="Vt">bio</var>
- structure.</p>
-<p class="Pp" id="g_format_bio">The
- <a class="permalink" href="#g_format_bio"><code class="Fn">g_format_bio</code></a>()
- function prints information about the given <var class="Vt">bio</var>
- structure into the provided <var class="Vt">sbuf</var>.</p>
-<p class="Pp" id="g_print_bio">The
- <a class="permalink" href="#g_print_bio"><code class="Fn">g_print_bio</code></a>()
- function is a convenience wrapper around
- <code class="Fn">g_format_bio</code>() that can be used for debugging
- purposes. It prints a provided <var class="Fa">prefix</var> string, followed
- by the formatted <var class="Vt">bio</var>, followed by a
- <var class="Fa">fmtsuffix</var> in the style of <a class="Xr">printf(9)</a>.
- Any of the prefix or suffix strings may be the empty string.
- <code class="Fn">g_print_bio</code>() always prints a newline character at
- the end of the line.</p>
-<p class="Pp" id="g_reset_bio">The
- <a class="permalink" href="#g_reset_bio"><code class="Fn">g_reset_bio</code></a>()
- function resets the given <var class="Vt">bio</var> structure back to its
- initial state. <code class="Fn">g_reset_bio</code>() preserves internal data
- structures, while setting all user visible fields to their initial values.
- When reusing a <var class="Vt">bio</var> obtained from
- <code class="Fn">g_new_bio</code>(), <code class="Fn">g_alloc_bio</code>(),
- <code class="Fn">g_clone_bio</code>(), or
- <code class="Fn">g_duplicate_bio</code>() for multiple transactions,
- <code class="Fn">g_reset_bio</code>() must be called between the
- transactions in lieu of
- <a class="permalink" href="#bzero"><code class="Fn" id="bzero">bzero</code></a>().
- While not strictly required for a <var class="Vt">bio</var> structure
- created by other means, <code class="Fn">g_reset_bio</code>() should be used
- to initialize it and between transactions.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_new_bio</code>() and
- <code class="Fn">g_clone_bio</code>() functions return a pointer to the
- allocated <var class="Vt">bio</var>, or <code class="Dv">NULL</code> if an
- error occurred.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Implementation of
- &#x201C;<code class="Dv">NULL</code>-transformation&#x201D;, meaning that an
- I/O request is cloned and scheduled down without any modifications. Let us
- assume that field <var class="Va">ex_consumer</var> in structure
- <var class="Vt">example_softc</var> contains a consumer attached to the
- provider we want to operate on.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-example_start(struct bio *bp)
-{
- struct example_softc *sc;
- struct bio *cbp;
-
- g_print_bio(&quot;Request received: &quot;, bp, &quot;&quot;);
-
- sc = bp-&gt;bio_to-&gt;geom-&gt;softc;
- if (sc == NULL) {
- g_io_deliver(bp, ENXIO);
- return;
- }
-
- /* Let's clone our bio request. */
- cbp = g_clone_bio(bp);
- if (cbp == NULL) {
- g_io_deliver(bp, ENOMEM);
- return;
- }
- cbp-&gt;bio_done = g_std_done; /* Standard 'done' function. */
-
- /* Ok, schedule it down. */
- /*
- * The consumer can be obtained from
- * LIST_FIRST(&amp;bp-&gt;bio_to-&gt;geom-&gt;consumer) as well,
- * if there is only one in our geom.
- */
- g_io_request(cbp, sc-&gt;ex_consumer);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">dtrace_io(4)</a>, <a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_consumer(9)</a>,
- <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 26, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_consumer.9 3.html b/static/freebsd/man9/g_consumer.9 3.html
deleted file mode 100644
index dbd9d284..00000000
--- a/static/freebsd/man9/g_consumer.9 3.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_CONSUMER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_CONSUMER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_new_consumer</code>,
- <code class="Nm">g_destroy_consumer</code> &#x2014; <span class="Nd">GEOM
- consumers management</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct g_consumer *</var>
- <br/>
- <code class="Fn">g_new_consumer</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_geom *gp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_destroy_consumer</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_consumer *cp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">A GEOM consumer is the backdoor through which a geom connects to
- another GEOM provider and through which I/O requests are sent.</p>
-<p class="Pp" id="g_new_consumer">The
- <a class="permalink" href="#g_new_consumer"><code class="Fn">g_new_consumer</code></a>()
- function creates a new consumer on geom <var class="Fa">gp</var>. Before
- using the new consumer, it has to be attached to a provider with
- <a class="Xr">g_attach(9)</a> and opened with
- <a class="Xr">g_access(9)</a>.</p>
-<p class="Pp" id="g_destroy_consumer">The
- <a class="permalink" href="#g_destroy_consumer"><code class="Fn">g_destroy_consumer</code></a>()
- function destroys the given consumer and cancels all related pending events.
- This function is the last stage of killing an unwanted consumer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp"><code class="Fn">g_new_consumer</code>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The geom <var class="Fa">gp</var> has to have an
- <var class="Va">orphan</var> method defined.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-<p class="Pp" id="g_destroy_consumer~2"><a class="permalink" href="#g_destroy_consumer~2"><code class="Fn">g_destroy_consumer</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The consumer must not be attached to a provider.</li>
- <li>The access count has to be 0.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_new_consumer</code>() function returns a
- pointer to the newly created consumer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Create consumer, attach it to given provider, gain read access and
- clean up.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-some_function(struct g_geom *mygeom, struct g_provider *pp)
-{
- struct g_consumer *cp;
-
- g_topology_assert();
-
- /* Create new consumer on 'mygeom' geom. */
- cp = g_new_consumer(mygeom);
- /* Attach newly created consumer to given provider. */
- if (g_attach(cp, pp) != 0) {
- g_destroy_consumer(cp);
- return;
- }
- /* Open provider for reading through our consumer. */
- if (g_access(cp, 1, 0, 0) != 0) {
- g_detach(cp);
- g_destroy_consumer(cp);
- return;
- }
-
- g_topology_unlock();
- /*
- * Read data from provider.
- */
- g_topology_lock();
-
- /* Disconnect from provider (release access count). */
- g_access(cp, -1, 0, 0);
- /* Detach from provider. */
- g_detach(cp);
- /* Destroy consumer. */
- g_destroy_consumer(cp);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_data.9 3.html b/static/freebsd/man9/g_data.9 3.html
deleted file mode 100644
index 07a20eca..00000000
--- a/static/freebsd/man9/g_data.9 3.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_DATA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_DATA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_read_data</code>,
- <code class="Nm">g_write_data</code> &#x2014; <span class="Nd">read/write
- data from/to GEOM consumer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">g_read_data</code>(<var class="Fa">struct g_consumer
- *cp</var>, <var class="Fa">off_t offset</var>, <var class="Fa">off_t
- length</var>, <var class="Fa">int *error</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">g_write_data</code>(<var class="Fa">struct g_consumer
- *cp</var>, <var class="Fa">off_t offset</var>, <var class="Fa">void
- *ptr</var>, <var class="Fa">off_t length</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#g_read_data"><code class="Fn" id="g_read_data">g_read_data</code></a>()
- function reads <var class="Fa">length</var> bytes of data from the provider
- attached to consumer <var class="Fa">cp</var>, starting at offset
- <var class="Fa">offset</var>. The buffer returned from
- <code class="Fn">g_read_data</code>() is allocated with
- <a class="permalink" href="#g_malloc"><code class="Fn" id="g_malloc">g_malloc</code></a>(),
- so it should be freed by the caller with
- <a class="permalink" href="#g_free"><code class="Fn" id="g_free">g_free</code></a>()
- after use. If the operation fails, an error value will be stored in the
- <var class="Fa">error</var> argument if it is not
- <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="g_write_data">The
- <a class="permalink" href="#g_write_data"><code class="Fn">g_write_data</code></a>()
- function writes <var class="Fa">length</var> bytes of data from the buffer
- pointed to by <var class="Fa">ptr</var> to the provider attached to consumer
- <var class="Fa">cp</var>, starting at offset
- <var class="Fa">offset</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">The <var class="Fa">length</var> argument should be a multiple of
- the provider's sectorsize and less than or equal to
- <code class="Dv">DFLTPHYS</code> (<code class="Dv">DFLTPHYS</code> is
- defined in
- <code class="In">&lt;<a class="In">sys/param.h</a>&gt;</code>).</p>
-<p class="Pp">The topology lock must not be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_read_data</code>() function returns a
- pointer to a data buffer or <code class="Dv">NULL</code> if an error
- occurred. In that case an error value is stored in the
- <var class="Fa">error</var> argument unless it is
- <code class="Dv">NULL</code>.</p>
-<p class="Pp">The <code class="Fn">g_write_data</code>() function returns 0 if
- successful; otherwise an error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">Possible errors:</p>
-<dl class="Bl-tag">
- <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt>
- <dd>An I/O error occurred while reading from or writing to the consumer.</dd>
- <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt>
- <dd>Corrupted data was detected while reading from the consumer.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_event(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 30, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_event.9 3.html b/static/freebsd/man9/g_event.9 3.html
deleted file mode 100644
index 22b26793..00000000
--- a/static/freebsd/man9/g_event.9 3.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_EVENT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_EVENT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_post_event</code>,
- <code class="Nm">g_waitfor_event</code>,
- <code class="Nm">g_cancel_event</code> &#x2014; <span class="Nd">GEOM events
- management</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">g_post_event</code>(<var class="Fa" style="white-space: nowrap;">g_event_t
- *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int flag</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">g_waitfor_event</code>(<var class="Fa" style="white-space: nowrap;">g_event_t
- *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int flag</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_cancel_event</code>(<var class="Fa" style="white-space: nowrap;">void
- *ref</var>);</p>
-<p class="Pp"><var class="Ft">struct g_event *</var>
- <br/>
- <code class="Fn">g_alloc_event</code>(<var class="Fa" style="white-space: nowrap;">int
- flag</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_post_event_ep</code>(<var class="Fa" style="white-space: nowrap;">g_event_t
- *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">struct g_event *ep</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The GEOM framework has its own event queue to inform classes about
- important events. The event queue can be also used by GEOM classes
- themselves, for example to work around some restrictions in the I/O path,
- where sleeping, heavy weight tasks, etc. are not permitted.</p>
-<p class="Pp" id="g_post_event">The
- <a class="permalink" href="#g_post_event"><code class="Fn">g_post_event</code></a>()
- function tells the GEOM framework to call function
- <var class="Fa">func</var> with argument <var class="Fa">arg</var> from the
- event queue. The <var class="Fa">flag</var> argument is passed to
- <a class="Xr">malloc(9)</a> for memory allocations inside of
- <code class="Fn">g_post_event</code>(). The only allowed flags are
- <code class="Dv">M_WAITOK</code> and <code class="Dv">M_NOWAIT</code>. The
- rest of the arguments are used as references to identify the event. An event
- can be canceled by using any of the given references as an argument to
- <code class="Fn">g_cancel_event</code>(). The list of references has to end
- with a <code class="Dv">NULL</code> value.</p>
-<p class="Pp" id="g_waitfor_event">The
- <a class="permalink" href="#g_waitfor_event"><code class="Fn">g_waitfor_event</code></a>()
- function is a blocking version of the <code class="Fn">g_post_event</code>()
- function. It waits until the event is finished or canceled and then
- returns.</p>
-<p class="Pp" id="g_post_event_ep">The
- <a class="permalink" href="#g_post_event_ep"><code class="Fn">g_post_event_ep</code></a>()
- function posts the event with a pre-allocated <var class="Va">struct
- g_event</var>. An event may be pre-allocated with
- <code class="Fn">g_alloc_event</code>().</p>
-<p class="Pp" id="g_cancel_event">The
- <a class="permalink" href="#g_cancel_event"><code class="Fn">g_cancel_event</code></a>()
- function cancels all event(s) identified by <var class="Fa">ref</var>.
- Cancellation is equivalent to calling the requested function with requested
- arguments and argument <var class="Fa">flag</var> set to
- <code class="Dv">EV_CANCEL</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp"><code class="Fn">g_post_event</code>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The argument <var class="Fa">flag</var> has to be
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li>
- <li>The list of references has to end with a <code class="Dv">NULL</code>
- value.</li>
-</ul>
-<p class="Pp" id="g_waitfor_event~2"><a class="permalink" href="#g_waitfor_event~2"><code class="Fn">g_waitfor_event</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The argument <var class="Fa">flag</var> has to be
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li>
- <li>The list of references has to end with a <code class="Dv">NULL</code>
- value.</li>
- <li>The <code class="Fn">g_waitfor_event</code>() function cannot be called
- from an event, since doing so would result in a deadlock.</li>
-</ul>
-<p class="Pp" id="g_alloc_event"><a class="permalink" href="#g_alloc_event"><code class="Fn">g_alloc_event</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The argument <var class="Fa">flag</var> has to be
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li>
- <li id="g_free">The returned <var class="Va">struct g_event *</var> must be
- freed with
- <a class="permalink" href="#g_free"><code class="Fn">g_free</code></a>()
- if <code class="Fn">g_post_event_ep</code>() is not called.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_post_event</code>() and
- <code class="Fn">g_waitfor_event</code>() functions return 0 if successful;
- otherwise an error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Example of a function called from the event queue.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-example_event(void *arg, int flag)
-{
-
- if (flag == EV_CANCEL) {
- printf(&quot;Event with argument %p canceled.\n&quot;, arg);
- return;
- }
-
- printf(&quot;Event with argument %p called.\n&quot;, arg);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">Possible errors for the <code class="Fn">g_post_event</code>()
- function:</p>
-<dl class="Bl-tag">
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The <var class="Fa">flag</var> argument was set to
- <code class="Dv">M_NOWAIT</code> and there was insufficient memory.</dd>
-</dl>
-<p class="Pp">Possible errors for the <code class="Fn">g_waitfor_event</code>()
- function:</p>
-<dl class="Bl-tag">
- <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt>
- <dd>The event was canceled.</dd>
- <dt id="ENOMEM~2">[<a class="permalink" href="#ENOMEM~2"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The <var class="Fa">flag</var> argument was set to
- <code class="Dv">M_NOWAIT</code> and there was insufficient memory.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>,
- <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 23, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_geom.9 3.html b/static/freebsd/man9/g_geom.9 3.html
deleted file mode 100644
index df3c6f34..00000000
--- a/static/freebsd/man9/g_geom.9 3.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_GEOM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_GEOM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_new_geomf</code>,
- <code class="Nm">g_new_geom</code>, <code class="Nm">g_destroy_geom</code>
- &#x2014; <span class="Nd">geom management</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct g_geom *</var>
- <br/>
- <code class="Fn">g_new_geomf</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_class *mp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">struct g_geom *</var>
- <br/>
- <code class="Fn">g_new_geom</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_class *mp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_destroy_geom</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_geom *gp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The geom (do not confuse &#x201C;geom&#x201D; with
- &#x201C;GEOM&#x201D;) is an instance of a GEOM class. For example: in a
- typical i386 <span class="Ux">FreeBSD</span> system, there will be one geom
- of class MBR for each disk. The geom's name is not really important, it is
- only used in the XML dump and for debugging purposes. There can be many
- geoms with the same name.</p>
-<p class="Pp" id="g_new_geomf">The
- <a class="permalink" href="#g_new_geomf"><code class="Fn">g_new_geomf</code></a>()
- function creates a new geom, which will be an instance of the class
- <var class="Fa">mp</var>. The geom's name is created in a
- <a class="Xr">printf(3)</a>-like way from the rest of the arguments.</p>
-<p class="Pp" id="g_new_geom">The
- <a class="permalink" href="#g_new_geom"><code class="Fn">g_new_geom</code></a>()
- function is very similar to <code class="Fn">g_new_geomf</code>() except
- that it accepts a regular string instead of a
- <a class="Xr">printf(3)</a>-like format string as the geom's name.</p>
-<p class="Pp" id="g_destroy_geom">The
- <a class="permalink" href="#g_destroy_geom"><code class="Fn">g_destroy_geom</code></a>()
- function destroys the given geom immediately and cancels all related pending
- events.</p>
-<p class="Pp">The <var class="Vt">g_geom</var> structure contains fields that
- should be set by the caller after geom creation, but before creating any
- providers or consumers related to this geom (not all are required):</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Vt">g_start_t *</var> <var class="Va">start</var></dt>
- <dd>Pointer to a function used for I/O processing.</dd>
- <dt><var class="Vt">g_spoiled_t *</var> <var class="Va">spoiled</var></dt>
- <dd>Pointer to a function used for consumers spoiling.</dd>
- <dt><var class="Vt">g_dumpconf_t *</var> <var class="Va">dumpconf</var></dt>
- <dd>Pointer to a function used for configuration in XML format dumping.</dd>
- <dt><var class="Vt">g_access_t *</var> <var class="Va">access</var></dt>
- <dd>Pointer to a function used for access control.</dd>
- <dt><var class="Vt">g_orphan_t *</var> <var class="Va">orphan</var></dt>
- <dd>Pointer to a function used to inform about orphaned consumer.</dd>
- <dt><var class="Vt">g_ioctl_t *</var> <var class="Va">ioctl</var></dt>
- <dd>Pointer to a function used for handling ioctl requests.</dd>
- <dt><var class="Vt">void *</var> <var class="Va">softc</var></dt>
- <dd>Field for private use.</dd>
-</dl>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">If you intend to use providers in this geom you must set field
- <var class="Va">start</var> of your geom.</p>
-<p class="Pp">If you are planning to use consumers in your geom you must set
- fields <var class="Va">orphan</var> and <var class="Va">access</var> for
- it.</p>
-<p class="Pp" id="g_new_geomf~2"><a class="permalink" href="#g_new_geomf~2"><code class="Fn">g_new_geomf</code></a>()
- and <code class="Fn">g_new_geom</code>():</p>
-<ul class="Bl-item Bd-indent">
- <li>Class <var class="Fa">mp</var> must be valid (registered in GEOM).</li>
- <li>The topology lock has to be held.</li>
-</ul>
-<p class="Pp" id="g_destroy_geom~2"><a class="permalink" href="#g_destroy_geom~2"><code class="Fn">g_destroy_geom</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The geom cannot possess any providers.</li>
- <li>The geom cannot possess any consumers.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_new_geomf</code>() function returns a
- pointer to the newly created geom.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Create an example geom.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static void
-g_example_start(struct bio *bp)
-{
-
- [...]
-}
-
-static void
-g_example_orphan(struct g_consumer *cp)
-{
-
- g_topology_assert();
-
- [...]
-}
-
-static void
-g_example_spoiled(struct g_consumer *cp)
-{
-
- g_topology_assert();
-
- [...]
-}
-
-static int
-g_example_access(struct g_provider *pp, int dr, int dw, int de)
-{
-
- [...]
-}
-
-static struct g_geom *
-create_example_geom(struct g_class *myclass)
-{
- struct g_geom *gp;
-
- g_topology_lock();
- gp = g_new_geomf(myclass, &quot;example_geom&quot;);
- g_topology_unlock();
- gp-&gt;start = g_example_start;
- gp-&gt;orphan = g_example_orphan;
- gp-&gt;spoiled = g_example_spoiled;
- gp-&gt;access = g_example_access;
- gp-&gt;softc = NULL;
-
- return (gp);
-}
-
-static int
-destroy_example_geom(struct g_geom *gp)
-{
-
- g_topology_lock();
- if (!LIST_EMPTY(&amp;gp-&gt;provider) ||
- !LIST_EMPTY(&amp;gp-&gt;consumer)) {
- g_topology_unlock();
- return (EBUSY);
- }
- g_destroy_geom(gp);
- g_topology_unlock();
-
- return (0);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>,
- <a class="Xr">g_event(9)</a>, <a class="Xr">g_provider(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 24, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_provider.9 3.html b/static/freebsd/man9/g_provider.9 3.html
deleted file mode 100644
index 96d01924..00000000
--- a/static/freebsd/man9/g_provider.9 3.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_PROVIDER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_PROVIDER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_new_providerf</code>,
- <code class="Nm">g_destroy_provider</code>,
- <code class="Nm">g_error_provider</code> &#x2014; <span class="Nd">GEOM
- providers management</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct g_provider *</var>
- <br/>
- <code class="Fn">g_new_providerf</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_geom *gp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_destroy_provider</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_provider *pp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_error_provider</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_provider *pp</var>, <var class="Fa" style="white-space: nowrap;">int
- error</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">A GEOM provider is the front gate at which a geom offers service.
- A provider is &#x201C;a disk-like thing which appears in
- <span class="Pa">/dev</span>&#x201D; &#x2013; a logical disk in other words.
- All providers have three main properties: name, sectorsize and size.</p>
-<p class="Pp" id="g_new_providerf">The
- <a class="permalink" href="#g_new_providerf"><code class="Fn">g_new_providerf</code></a>()
- function creates a new provider on given geom <var class="Fa">gp</var>. The
- name of the provider, which will appear as device in
- <a class="Xr">devfs(4)</a>, is created in a <a class="Xr">printf(3)</a>-like
- way from the rest of the arguments. After creation, the caller has to set
- the provider's <var class="Va">mediasize</var> and
- <var class="Va">sectorsize</var>, as well as other desired initializations,
- and then call <code class="Fn">g_error_provider</code>() to reset the
- provider's error, which is initially set to
- <code class="Er">ENXIO</code>.</p>
-<p class="Pp" id="g_destroy_provider">The
- <a class="permalink" href="#g_destroy_provider"><code class="Fn">g_destroy_provider</code></a>()
- function destroys the given provider, cancels all related pending events and
- removes the corresponding devfs entry.</p>
-<p class="Pp" id="g_error_provider">The
- <a class="permalink" href="#g_error_provider"><code class="Fn">g_error_provider</code></a>()
- function is used to set the provider's error value. If set to a nonzero, all
- I/O requests will be denied, as well as increasing its access count will not
- be possible (error <var class="Fa">error</var> will be returned).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp"><a class="permalink" href="#g_new_provider"><code class="Fn" id="g_new_provider">g_new_provider</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The provider name should be unique, but this is not enforced by GEOM. If
- the name is not unique, one will end up with two (or more) files with the
- same name, which is a programmer error.</li>
- <li>The geom <var class="Fa">gp</var> has to have a
- <var class="Fa">start</var> method defined.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-<p class="Pp" id="g_destroy_provider~2"><a class="permalink" href="#g_destroy_provider~2"><code class="Fn">g_destroy_provider</code></a>():</p>
-<ul class="Bl-item Bd-indent">
- <li>The provider must not have consumers attached.</li>
- <li>The access count has to be 0.</li>
- <li>The topology lock has to be held.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_new_providerf</code>() function returns a
- pointer to the newly created provider.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Create an example provider, set its parameters and make it
- usable.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct g_provider *
-create_example_provider(struct g_geom *gp)
-{
- struct g_provider *pp;
-
- g_topology_lock();
- pp = g_new_providerf(gp, &quot;example_provider&quot;);
- g_topology_unlock();
- pp-&gt;mediasize = 65536;
- pp-&gt;sectorsize = 512;
- g_error_provider(pp, 0);
-
- return (pp);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>,
- <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>,
- <a class="Xr">g_provider_by_name(9)</a>,
- <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_provider_by_name.9 4.html b/static/freebsd/man9/g_provider_by_name.9 4.html
deleted file mode 100644
index 34be0003..00000000
--- a/static/freebsd/man9/g_provider_by_name.9 4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_PROVIDER_BY_NAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_PROVIDER_BY_NAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_provider_by_name</code> &#x2014;
- <span class="Nd">find GEOM provider with given name</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct g_provider *</var>
- <br/>
- <code class="Fn">g_provider_by_name</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#g_provider_by_name"><code class="Fn" id="g_provider_by_name">g_provider_by_name</code></a>()
- function searches for a provider called <var class="Fa">name</var> and
- returns the structure <var class="Vt">g_provider</var> bound to it. Argument
- <var class="Fa">name</var> can be a name or full path (i.e.,
- &#x201C;<span class="Pa">da0</span>&#x201D;, or
- &#x201C;<span class="Pa">/dev/da0</span>&#x201D;).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">The topology lock has to be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">g_provider_by_name</code>() function returns
- a pointer to the provider called <var class="Fa">name</var> or
- <code class="Dv">NULL</code> if there is no such provider.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>,
- <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>,
- <a class="Xr">g_provider(9)</a>, <a class="Xr">g_wither_geom(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 29, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/g_wither_geom.9 3.html b/static/freebsd/man9/g_wither_geom.9 3.html
deleted file mode 100644
index db3affc3..00000000
--- a/static/freebsd/man9/g_wither_geom.9 3.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">G_WITHER_GEOM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">G_WITHER_GEOM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">g_wither_geom</code> &#x2014;
- <span class="Nd">destroy geom and related providers and consumers when you
- get a chance</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">geom/geom.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">g_wither_geom</code>(<var class="Fa" style="white-space: nowrap;">struct
- g_geom *gp</var>, <var class="Fa" style="white-space: nowrap;">int
- error</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#g_wither_geom"><code class="Fn" id="g_wither_geom">g_wither_geom</code></a>()
- function tells GEOM that geom <var class="Fa">gp</var> is to be destroyed.
- GEOM sets an error on each provider of the given geom (in the orphaning
- process) and waits for a chance to destroy the geom. If the access count of
- any possessed consumer goes to 0, the consumer will be detached and
- destroyed automatically. If the last consumer attached to any possessed
- provider will be detached, the provider will be destroyed. If there are no
- more providers nor consumers, the geom will be destroyed.</p>
-<p class="Pp" id="g_wither_geom~2">This is an automatic &#x201C;garbage
- collect&#x201D; to avoid duplicated code in all classes. Before it is
- called, field <var class="Va">softc</var> should be disposed of and set to
- <code class="Dv">NULL</code>. Note that the
- <a class="permalink" href="#g_wither_geom~2"><code class="Fn">g_wither_geom</code></a>()
- function gives no guarantee that the geom will be immediately destroyed,
- mostly because the access counts of the geom's consumers and providers may
- not be 0. That is why calling this function for every geom from a given
- class is not enough to be sure that the class can be unloaded.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1>
-<p class="Pp">The argument <var class="Fa">error</var> must be nonzero.</p>
-<p class="Pp">The topology lock has to be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">geom(4)</a>,
- <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>,
- <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>,
- <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>,
- <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>,
- <a class="Xr">g_provider(9)</a>, <a class="Xr">g_provider_by_name(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Pawel Jakub
- Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/get_cyclecount.9 4.html b/static/freebsd/man9/get_cyclecount.9 4.html
deleted file mode 100644
index f12a259b..00000000
--- a/static/freebsd/man9/get_cyclecount.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">GET_CYCLECOUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">GET_CYCLECOUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">get_cyclecount</code> &#x2014;
- <span class="Nd">get the CPU's fast counter register contents</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">machine/cpu.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">get_cyclecount</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#get_cyclecount"><code class="Fn" id="get_cyclecount">get_cyclecount</code></a>()
- function uses a register available in most modern CPUs to return a value
- that is monotonically increasing inside each CPU.</p>
-<p class="Pp">On SMP systems, there will be a number of separate monotonic
- sequences, one for each CPU running. The value in the SMP case is selected
- from one of these sequences, dependent on which CPU was scheduled to service
- the request.</p>
-<p class="Pp" id="get_cyclecount~2">The speed and the maximum value of each
- counter is CPU-dependent. Some CPUs (such as the Intel 80486) do not have
- such a register, so
- <a class="permalink" href="#get_cyclecount~2"><code class="Fn">get_cyclecount</code></a>()
- on these platforms returns a (monotonic) combination of numbers represented
- by the structure returned by <a class="Xr">binuptime(9)</a>.</p>
-<p class="Pp">The AMD64 and Intel 64 processors use the
- <code class="Li">TSC</code> register.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">binuptime(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">get_cyclecount</code>() function first
- appeared in <span class="Ux">FreeBSD 5.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Mark
- Murray</span>
- &lt;<a class="Mt" href="mailto:markm@FreeBSD.org">markm@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 15, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/getenv.9 4.html b/static/freebsd/man9/getenv.9 4.html
deleted file mode 100644
index 889c8db7..00000000
--- a/static/freebsd/man9/getenv.9 4.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">GETENV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">GETENV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">freeenv</code>,
- <code class="Nm">kern_getenv</code>, <code class="Nm">getenv_int</code>,
- <code class="Nm">getenv_long</code>, <code class="Nm">getenv_string</code>,
- <code class="Nm">getenv_quad</code>, <code class="Nm">getenv_uint</code>,
- <code class="Nm">getenv_ulong</code>, <code class="Nm">getenv_bool</code>,
- <code class="Nm">getenv_is_true</code>,
- <code class="Nm">getenv_is_false</code>,
- <code class="Nm">kern_setenv</code>, <code class="Nm">testenv</code>,
- <code class="Nm">kern_unsetenv</code> &#x2014; <span class="Nd">kernel
- environment variable functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">freeenv</code>(<var class="Fa" style="white-space: nowrap;">char
- *env</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">kern_getenv</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_int</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_long</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">long
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_string</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">char
- *data</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_quad</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">quad_t
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_uint</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">unsigned int
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_ulong</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">unsigned long
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getenv_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">bool
- *data</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">getenv_is_true</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">getenv_is_false</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kern_setenv</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *value</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">testenv</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kern_unsetenv</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions set, unset, fetch, and parse variables from the
- kernel's environment.</p>
-<p class="Pp" id="kern_getenv">The
- <a class="permalink" href="#kern_getenv"><code class="Fn">kern_getenv</code></a>()
- function obtains the current value of the kernel environment variable
- <var class="Fa">name</var> and returns a pointer to the string value. The
- caller should not modify the string pointed to by the return value. The
- <code class="Fn">kern_getenv</code>() function may allocate temporary
- storage, so the <code class="Fn">freeenv</code>() function must be called to
- release any allocated resources when the value returned by
- <code class="Fn">kern_getenv</code>() is no longer needed.</p>
-<p class="Pp" id="freeenv">The
- <a class="permalink" href="#freeenv"><code class="Fn">freeenv</code></a>()
- function is used to release the resources allocated by a previous call to
- <code class="Fn">kern_getenv</code>(). The <var class="Fa">env</var>
- argument passed to <code class="Fn">freeenv</code>() is the pointer returned
- by the earlier call to <code class="Fn">kern_getenv</code>(). Like
- <a class="Xr">free(3)</a>, the <var class="Fa">env</var> argument can be
- <var class="Va">NULL</var>, in which case no action occurs.</p>
-<p class="Pp" id="kern_setenv">The
- <a class="permalink" href="#kern_setenv"><code class="Fn">kern_setenv</code></a>()
- function inserts or resets the kernel environment variable
- <var class="Fa">name</var> to <var class="Fa">value</var>. If the variable
- <var class="Fa">name</var> already exists, its value is replaced. This
- function can fail if an internal limit on the number of environment
- variables is exceeded.</p>
-<p class="Pp" id="kern_unsetenv">The
- <a class="permalink" href="#kern_unsetenv"><code class="Fn">kern_unsetenv</code></a>()
- function deletes the kernel environment variable
- <var class="Fa">name</var>.</p>
-<p class="Pp" id="testenv">The
- <a class="permalink" href="#testenv"><code class="Fn">testenv</code></a>()
- function is used to determine if a kernel environment variable exists. It
- returns a non-zero value if the variable <var class="Fa">name</var> exists
- and zero if it does not.</p>
-<p class="Pp" id="getenv_int">The
- <a class="permalink" href="#getenv_int"><code class="Fn">getenv_int</code></a>(),
- <a class="permalink" href="#getenv_long"><code class="Fn" id="getenv_long">getenv_long</code></a>(),
- <a class="permalink" href="#getenv_quad"><code class="Fn" id="getenv_quad">getenv_quad</code></a>(),
- <a class="permalink" href="#getenv_uint"><code class="Fn" id="getenv_uint">getenv_uint</code></a>(),
- and
- <a class="permalink" href="#getenv_ulong"><code class="Fn" id="getenv_ulong">getenv_ulong</code></a>()
- functions look for a kernel environment variable <var class="Fa">name</var>
- and parse it as a signed integer, long integer, signed 64-bit integer,
- unsigned integer, or an unsigned long integer, respectively. These functions
- fail and return zero if <var class="Fa">name</var> does not exist or if any
- invalid characters are present in its value. On success, these function
- store the parsed value in the integer variable pointed to by
- <var class="Fa">data</var>. If the parsed value overflows the integer type,
- a truncated value is stored in <var class="Fa">data</var> and zero is
- returned. If the value begins with a prefix of &#x201C;0x&#x201D; it is
- interpreted as hexadecimal. If it begins with a prefix of &#x201C;0&#x201D;
- it is interpreted as octal. Otherwise, the value is interpreted as decimal.
- The value may contain a single character suffix specifying a unit for the
- value. The interpreted value is multiplied by the unit's magnitude before
- being returned. The following unit suffixes are supported:</p>
-<table class="Bl-column Bd-indent">
- <tr id="Unit">
- <td><a class="permalink" href="#Unit"><b class="Sy">Unit</b></a></td>
- <td><a class="permalink" href="#Magnitude"><b class="Sy" id="Magnitude">Magnitude</b></a></td>
- </tr>
- <tr>
- <td>k</td>
- <td>2^10</td>
- </tr>
- <tr>
- <td>m</td>
- <td>2^20</td>
- </tr>
- <tr>
- <td>g</td>
- <td>2^30</td>
- </tr>
- <tr>
- <td>t</td>
- <td>2^40</td>
- </tr>
-</table>
-<p class="Pp" id="getenv_string">The
- <a class="permalink" href="#getenv_string"><code class="Fn">getenv_string</code></a>()
- function stores a copy of the kernel environment variable
- <var class="Fa">name</var> in the buffer described by
- <var class="Fa">data</var> and <var class="Fa">size</var>. If the variable
- does not exist, zero is returned. If the variable exists, up to
- <var class="Fa">size - 1</var> characters of its value are copied to the
- buffer pointed to by <var class="Fa">data</var> followed by a null character
- and a non-zero value is returned.</p>
-<p class="Pp" id="getenv_bool">The
- <a class="permalink" href="#getenv_bool"><code class="Fn">getenv_bool</code></a>()
- function interprets the value of the kernel environment variable
- <var class="Fa">name</var> as a boolean value by performing a
- case-insensitive comparison against the strings &quot;1&quot;,
- &quot;0&quot;, &quot;true&quot;, and &quot;false&quot;. If the environment
- variable exists and has a valid boolean value, then that value will be
- copied to the variable pointed to by <var class="Fa">data</var>. If the
- environment variable exists but is not a boolean value, then a warning will
- be printed to the kernel message buffer. The
- <a class="permalink" href="#getenv_is_true"><code class="Fn" id="getenv_is_true">getenv_is_true</code></a>()
- and
- <a class="permalink" href="#getenv_is_false"><code class="Fn" id="getenv_is_false">getenv_is_false</code></a>()
- functions are wrappers around <code class="Fn">getenv_bool</code>() that
- simplify testing for a desired boolean value.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">kern_getenv</code>() function returns a
- pointer to an environment variable's value on success or
- <code class="Dv">NULL</code> if the variable does not exist.</p>
-<p class="Pp">The <code class="Fn">kern_setenv</code>() and
- <code class="Fn">kern_unsetenv</code>() functions return zero on success and
- -1 on failure.</p>
-<p class="Pp">The <code class="Fn">testenv</code>() function returns zero if the
- specified environment variable does not exist and a non-zero value if it
- does exist.</p>
-<p class="Pp">The <code class="Fn">getenv_int</code>(),
- <code class="Fn">getenv_long</code>(),
- <code class="Fn">getenv_string</code>(),
- <code class="Fn">getenv_quad</code>(),
- <code class="Fn">getenv_uint</code>(),
- <code class="Fn">getenv_ulong</code>(), and
- <code class="Fn">getenv_bool</code>() functions return a non-zero value on
- success and zero on failure.</p>
-<p class="Pp">The <code class="Fn">getenv_is_true</code>() and
- <code class="Fn">getenv_is_false</code>() functions return
- <code class="Dv">true</code> if the specified environment variable exists
- and its value matches the desired boolean condition, and
- <code class="Dv">false</code> otherwise.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 21, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/getnewvnode.9 4.html b/static/freebsd/man9/getnewvnode.9 4.html
deleted file mode 100644
index 2d14c2c8..00000000
--- a/static/freebsd/man9/getnewvnode.9 4.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">GETNEWVNODE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">GETNEWVNODE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">getnewvnode</code> &#x2014; <span class="Nd">get
- a new vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">getnewvnode</code>(<var class="Fa" style="white-space: nowrap;">const
- char *tag</var>, <var class="Fa" style="white-space: nowrap;">struct mount
- *mp</var>, <var class="Fa" style="white-space: nowrap;">struct vop_vector
- *vops</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#getnewvnode"><code class="Fn" id="getnewvnode">getnewvnode</code></a>()
- function initializes a new vnode, assigning it the vnode operations passed
- in <var class="Fa">vops</var>.</p>
-<p class="Pp" id="getnewvnode~2">The arguments to
- <a class="permalink" href="#getnewvnode~2"><code class="Fn">getnewvnode</code></a>()
- are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">tag</var></dt>
- <dd>The file system type string. This field should only be referenced for
- debugging or for userland utilities.</dd>
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point to add the new vnode to.</dd>
- <dt><var class="Fa">vops</var></dt>
- <dd>The vnode operations to assign to the new vnode.</dd>
- <dt><var class="Fa">vpp</var></dt>
- <dd>Points to the new vnode upon successful completion.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">getnewvnode</code>() returns 0 on success.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">It never returns an error, instead either succeeds or blocks
- indefinitely.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 1, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/gone_in.9 4.html b/static/freebsd/man9/gone_in.9 4.html
deleted file mode 100644
index 6cf83b16..00000000
--- a/static/freebsd/man9/gone_in.9 4.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">GONE_IN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">GONE_IN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">gone_in</code>,
- <code class="Nm">gone_in_dev</code> &#x2014; <span class="Nd">deprecation
- notice functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">gone_in</code>(<var class="Fa" style="white-space: nowrap;">int
- major</var>, <var class="Fa" style="white-space: nowrap;">const char
- *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">gone_in_dev</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int major</var>,
- <var class="Fa" style="white-space: nowrap;">const char *msg</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">gone_in</code> functions are used to provide
- a notice that the kernel is actively using a driver or some other
- functionality that is deprecated, and is planned for removal in a future
- <span class="Ux">FreeBSD</span> release. The notice is sent to the kernel
- <a class="Xr">dmesg(8)</a> log and will appear on the console. The
- <var class="Fa">major</var> argument specifies the major version of the
- <span class="Ux">FreeBSD</span> release that will remove the deprecated
- functionality. The notice shall be printed only once, thus
- <code class="Nm">gone_in</code> functions are safe to use in often executed
- code paths.</p>
-<p class="Pp"><code class="Nm">gone_in_dev</code> will prepend driver name
- before the notice.</p>
-<p class="Pp">In releases before <var class="Fa">major</var> the provided notice
- will be appended with &#x201C;To be removed in FreeBSD
- <var class="Fa">major</var>&#x201D;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Bd-indent Li">
-<pre>void
-example_api(foo_t *args)
-{
- gone_in(16, &quot;Warning! %s[%u] uses obsolete API. &quot;,
- curthread-&gt;td_proc-&gt;p_comm, curthread-&gt;td_proc-&gt;p_pid);
-
- /* API implementation omitted. */
-}
-
-int
-example_driver_attach(struct example_driver_softc *sc)
-{
- /* Attach code omitted. */
-
- gone_in_dev(sc-&gt;dev, 16, &quot;driver is deprecated&quot;);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">gone_in</code> functions first appeared in
- <span class="Ux">FreeBSD 11</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 24, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/groupmember.9 4.html b/static/freebsd/man9/groupmember.9 4.html
deleted file mode 100644
index a3b9f6a0..00000000
--- a/static/freebsd/man9/groupmember.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">GROUPMEMBER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">GROUPMEMBER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">groupmember</code> &#x2014;
- <span class="Nd">checks if credentials mandate some group
- membership</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ucred.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">groupmember</code>(<var class="Fa" style="white-space: nowrap;">gid_t
- gid</var>, <var class="Fa" style="white-space: nowrap;">const struct ucred
- *cred</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">realgroupmember</code>(<var class="Fa" style="white-space: nowrap;">gid_t
- gid</var>, <var class="Fa" style="white-space: nowrap;">const struct ucred
- *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#groupmember"><code class="Fn" id="groupmember">groupmember</code></a>()
- function checks if credentials <var class="Fa">cred</var> indicate that the
- associated subject or object is a member of the group designated by the
- group ID <var class="Fa">gid</var>.</p>
-<p class="Pp">Considered groups in <var class="Fa">cred</var> are the effective
- and supplementary groups. The real group is not taken into account.</p>
-<p class="Pp" id="realgroupmember">Function
- <a class="permalink" href="#realgroupmember"><code class="Fn">realgroupmember</code></a>()
- works the same except that it considers instead the real and supplementary
- groups, and not the effective one.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">groupmember</code>() and
- <code class="Fn">realgroupmember</code>() functions return
- <code class="Dv">true</code> if the given credentials indicate membership of
- the group <var class="Fa">gid</var>, or <code class="Dv">false</code>
- otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">getgroups(2)</a>, <a class="Xr">setgroups(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was initially written by <span class="An">Chad
- David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;
- and was revised by <span class="An">Olivier Certner</span>
- &lt;<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 31, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hardclock.9 3.html b/static/freebsd/man9/hardclock.9 3.html
deleted file mode 100644
index 446d83ea..00000000
--- a/static/freebsd/man9/hardclock.9 3.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HARDCLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HARDCLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hardclock</code> &#x2014;
- <span class="Nd">real-time timer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hardclock</code>(<var class="Fa" style="white-space: nowrap;">int
- cnt</var>, <var class="Fa" style="white-space: nowrap;">int
- usermode</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#hardclock"><code class="Fn" id="hardclock">hardclock</code></a>()
- function is called periodically based on pending work. The rate ranges from
- <var class="Va">hz</var> times per second on a very busy system, to twice a
- second on an idle system. The <var class="Fa">cnt</var> argument reports an
- estimate of the number of ticks since the last call. Over long timescales,
- the average sum of <var class="Fa">cnt</var> over one second is
- <var class="Va">hz</var>. See <a class="Xr">hz(9)</a> for important details
- over shorter time scales. The <var class="Fa">usermode</var> argument is
- non-zero when <code class="Fn">hardclock</code>() is called from an context
- that interrupted usermode execution.</p>
-<p class="Pp" id="hardclock~2"><a class="permalink" href="#hardclock~2"><code class="Fn">hardclock</code></a>()
- may perform different tasks such as:</p>
-<ul class="Bl-bullet Bd-indent">
- <li>Run the current process's virtual and profile time (decrease the
- corresponding timers, if they are activated, and generate
- <code class="Li">SIGVTALRM</code> or <code class="Li">SIGPROF</code>,
- respectively).</li>
- <li>Increment the time-of-day, taking care of any <a class="Xr">ntpd(8)</a> or
- <a class="Xr">adjtime(2)</a> induced changes and leap seconds, as well as
- any necessary compensations to keep in sync with PPS signals or external
- clocks, if supported by the kernel.</li>
- <li>Schedule softclock interrupts (<a class="Xr">swi(9)</a>) processing.</li>
- <li>Collect <a class="Xr">hwpmc(4)</a> statistics.</li>
- <li>Do device polling, when enabled (see <a class="Xr">polling(4)</a>).</li>
- <li>Implement software <a class="Xr">watchdog(9)</a> processing.</li>
- <li>Enqueue <a class="Xr">epoch(9)</a> processing.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">adjtime(2)</a>, <a class="Xr">ntp_adjtime(2)</a>,
- <a class="Xr">signal(3)</a>, <a class="Xr">hwpmc(4)</a>,
- <a class="Xr">polling(4)</a>, <a class="Xr">ntpd(8)</a>,
- <a class="Xr">epoch(9)</a>, <a class="Xr">eventtimers(9)</a>,
- <a class="Xr">hz(9)</a>, <a class="Xr">swi(9)</a>,
- <a class="Xr">watchdog(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 27, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hash.9 3.html b/static/freebsd/man9/hash.9 3.html
deleted file mode 100644
index 7c754137..00000000
--- a/static/freebsd/man9/hash.9 3.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HASH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HASH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hash</code>, <code class="Nm">hash32</code>,
- <code class="Nm">hash32_buf</code>, <code class="Nm">hash32_str</code>,
- <code class="Nm">hash32_strn</code>, <code class="Nm">hash32_stre</code>,
- <code class="Nm">hash32_strne</code>, <code class="Nm">jenkins_hash</code>,
- <code class="Nm">jenkins_hash32</code>,
- <code class="Nm">murmur3_32_hash</code>,
- <code class="Nm">murmur3_32_hash32</code> &#x2014; <span class="Nd">general
- kernel hashing functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/hash.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">hash32_buf</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">hash32_str</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">hash32_strn</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">hash32_stre</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">int end</var>,
- <var class="Fa" style="white-space: nowrap;">const char **ep</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">hash32_strne</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">int end</var>,
- <var class="Fa" style="white-space: nowrap;">const char **ep</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">jenkins_hash</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">jenkins_hash32</code>(<var class="Fa" style="white-space: nowrap;">const
- uint32_t *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- count</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">murmur3_32_hash</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">murmur3_32_hash32</code>(<var class="Fa" style="white-space: nowrap;">const
- uint32_t *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- count</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- hash</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#hash32"><code class="Fn" id="hash32">hash32</code></a>()
- functions are used to give a consistent and general interface to a decent
- hashing algorithm within the kernel. These functions can be used to hash
- ASCII <code class="Dv">NUL</code> terminated strings, as well as blocks of
- memory.</p>
-<p class="Pp">A <var class="Fa">len</var> argument is the length of the buffer
- in bytes. A <var class="Fa">count</var> argument is the length of the buffer
- in 32-bit words.</p>
-<p class="Pp" id="hash32_buf">The
- <a class="permalink" href="#hash32_buf"><code class="Fn">hash32_buf</code></a>()
- function is used as a general buffer hashing function. The argument
- <var class="Fa">buf</var> is used to pass in the location, and
- <var class="Fa">len</var> is the length of the buffer in bytes. The argument
- <var class="Fa">hash</var> is used to extend an existing hash, or is passed
- the initial value <code class="Dv">HASHINIT</code> to start a new hash.</p>
-<p class="Pp" id="hash32_str">The
- <a class="permalink" href="#hash32_str"><code class="Fn">hash32_str</code></a>()
- function is used to hash a <code class="Dv">NUL</code> terminated string
- passed in <var class="Fa">buf</var> with initial hash value given in
- <var class="Fa">hash</var>.</p>
-<p class="Pp" id="hash32_strn">The
- <a class="permalink" href="#hash32_strn"><code class="Fn">hash32_strn</code></a>()
- function is like the <code class="Fn">hash32_str</code>() function, except
- it also takes a <var class="Fa">len</var> argument, which is the maximal
- length of the expected string.</p>
-<p class="Pp" id="hash32_stre">The
- <a class="permalink" href="#hash32_stre"><code class="Fn">hash32_stre</code></a>()
- and
- <a class="permalink" href="#hash32_strne"><code class="Fn" id="hash32_strne">hash32_strne</code></a>()
- functions are helper functions used by the kernel to hash pathname
- components. These functions have the additional termination condition of
- terminating when they find a character given by <var class="Fa">end</var> in
- the string to be hashed. If the argument <var class="Fa">ep</var> is not
- <code class="Dv">NULL</code>, it is set to the point in the buffer at which
- the hash function terminated hashing.</p>
-<p class="Pp" id="jenkins_hash">The
- <a class="permalink" href="#jenkins_hash"><code class="Fn">jenkins_hash</code></a>()
- function has same semantics as the <code class="Fn">hash32_buf</code>(), but
- provides more advanced hashing algorithm with better distribution.</p>
-<p class="Pp" id="jenkins_hash32">The
- <a class="permalink" href="#jenkins_hash32"><code class="Fn">jenkins_hash32</code></a>()
- uses same hashing algorithm as the <code class="Fn">jenkins_hash</code>()
- function, but works only on <var class="Ft">uint32_t</var> sized arrays,
- thus is simpler and faster. It accepts an array of
- <var class="Ft">uint32_t</var> values in its first argument and size of this
- array in the second argument.</p>
-<p class="Pp" id="murmur3_32_hash">The
- <a class="permalink" href="#murmur3_32_hash"><code class="Fn">murmur3_32_hash</code></a>()
- and
- <a class="permalink" href="#murmur3_32_hash32"><code class="Fn" id="murmur3_32_hash32">murmur3_32_hash32</code></a>()
- functions are similar to <code class="Fn">jenkins_hash</code>() and
- <code class="Fn">jenkins_hash32</code>(), but implement the 32-bit version
- of MurmurHash3.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">hash32</code>() functions return a 32 bit
- hash value of the buffer or string.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Bd-indent Li">
-<pre>LIST_HEAD(head, cache) *hashtbl = NULL;
-u_long mask = 0;
-
-void
-sample_init(void)
-{
-
- hashtbl = hashinit(numwanted, type, flags, &amp;mask);
-}
-
-void
-sample_use(char *str, int len)
-{
- uint32_t hash;
-
- hash = hash32_str(str, HASHINIT);
- hash = hash32_buf(&amp;len, sizeof(len), hash);
- hashtbl[hash &amp; mask] = len;
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">free(9)</a>, <a class="Xr">hashinit(9)</a>,
- <a class="Xr">malloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LIMITATIONS"><a class="permalink" href="#LIMITATIONS">LIMITATIONS</a></h1>
-<p class="Pp">The <code class="Fn">hash32</code>() functions are only 32 bit
- functions. They will prove to give poor 64 bit performance, especially for
- the top 32 bits. At the current time, this is not seen as a great
- limitation, as these hash values are usually used to index into an array.
- Should these hash values be used for other means, this limitation should be
- revisited.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">hash</code> functions first appeared in
- <span class="Ux">NetBSD 1.6</span>. The current implementation of
- <code class="Nm">hash32</code> functions was first committed to
- <span class="Ux">OpenBSD 3.2</span>, and later imported to
- <span class="Ux">FreeBSD 6.1</span>. The
- <code class="Nm">jenkins_hash</code> functions were added in
- <span class="Ux">FreeBSD 10.0</span>. The
- <code class="Nm">murmur3_32_hash</code> functions were added in
- <span class="Ux">FreeBSD 10.1</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">hash32</code> functions were written by
- <span class="An">Tobias Weingartner</span>. The
- <code class="Nm">jenkins_hash</code> functions were written by
- <br/>
- <span class="An">Bob Jenkins</span>. The
- <code class="Nm">murmur3_32_hash</code> functions were written by
- <br/>
- <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 30, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hashalloc.9 3.html b/static/freebsd/man9/hashalloc.9 3.html
deleted file mode 100644
index c53cd5aa..00000000
--- a/static/freebsd/man9/hashalloc.9 3.html
+++ /dev/null
@@ -1,253 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HASHALLOC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HASHALLOC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hashalloc</code>,
- <code class="Nm">hashfree</code> &#x2014; <span class="Nd">allocate and free
- kernel hash tables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/malloc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/hash.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">hashalloc</code>(<var class="Fa" style="white-space: nowrap;">struct
- hashalloc_args *args</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hashfree</code>(<var class="Fa" style="white-space: nowrap;">void
- *table</var>, <var class="Fa" style="white-space: nowrap;">struct
- hashalloc_args *args</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#hashalloc"><code class="Fn" id="hashalloc">hashalloc</code></a>()
- and <code class="Fn">hashfree</code>() functions provide a flexible kernel
- programming interface (KPI) for allocating and freeing hash tables with
- configurable bucket headers.</p>
-<p class="Pp" id="hashalloc~2"><a class="permalink" href="#hashalloc~2"><code class="Fn">hashalloc</code></a>()
- allocates memory for a hash table according to the parameters specified in
- the <var class="Fa">args</var> structure. It computes an appropriate number
- of buckets (adjusting <var class="Fa">args-&gt;size</var> as needed based on
- the requested <var class="Fa">type</var>), allocates memory using
- <a class="Xr">malloc(9)</a>, initializes each bucket's queue header (e.g.,
- <var class="Vt">LIST_HEAD</var>, <var class="Vt">TAILQ_HEAD</var>, etc.),
- and, if requested, initializes per-bucket locks. The returned memory
- allocation can be used as an array of header structures that start with
- initialized list header of the requested type followed by initialized lock
- of requested type.</p>
-<p class="Pp" id="hashfree"><a class="permalink" href="#hashfree"><code class="Fn">hashfree</code></a>()
- frees a hash table previously allocated by
- <code class="Fn">hashalloc</code>().</p>
-<p class="Pp">Both functions require the caller to pass the same (or equivalent)
- <var class="Fa">struct hashalloc_args</var> that specifies the desired
- configuration of the hash table and has the following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct hashalloc_args {
- /* Required arguments */
- size_t size; /* in: desired buckets, out: allocated */
- int mflags; /* malloc(9) flags */
- struct malloc_type *mtype; /* malloc(9) type */
- /* Optional arguments */
- size_t hdrsize; /* bucket header size; 0 = auto */
- enum {
- HASH_TYPE_POWER2,
- HASH_TYPE_PRIME,
- } type; /* default HASH_TYPE_POWER2 */
- enum {
- HASH_HEAD_LIST,
- HASH_HEAD_CK_LIST,
- HASH_HEAD_SLIST,
- HASH_HEAD_CK_SLIST,
- HASH_HEAD_STAILQ,
- HASH_HEAD_CK_STAILQ,
- HASH_HEAD_TAILQ,
- } head; /* default HASH_HEAD_LIST */
- enum {
- HASH_LOCK_NONE,
- HASH_LOCK_MTX,
- HASH_LOCK_RWLOCK,
- HASH_LOCK_SX,
- HASH_LOCK_RMLOCK,
- HASH_LOCK_RMSLOCK,
- } lock; /* default HASH_LOCK_NONE */
- int lopts; /* lock init options */
- const char *lname; /* lock name */
- int (*ctor)(void *); /* bucket constructor */
- void (*dtor)(void *); /* bucket destructor */
- /* Returned arguments */
- int error; /* error code in case of failure */
-};</pre>
-</div>
-<p class="Pp" id="hashalloc~3">Argument members <var class="Fa">size</var>,
- <var class="Fa">mflags</var> and <var class="Fa">mtype</var> are required
- for the
- <a class="permalink" href="#hashalloc~3"><code class="Fn">hashalloc</code></a>().
- The argument <var class="Fa">size</var>, as filled by earlier call to
- <code class="Fn">hashalloc</code>(), and <var class="Fa">mtype</var> are
- required for the <code class="Fn">hashfree</code>(). The rest of arguments
- are optional and have reasonable defaults. A hash table that was allocated
- with a non-default allocation arguments shall pass the same arguments to
- <code class="Fn">hashfree</code>(). The structure shall be initialized with
- sparse C99 initializer as it may contain opaque extension members. The
- structure may be allocated on the stack of a caller.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">size</var></dt>
- <dd>Desired number of buckets for <code class="Fn">hashalloc</code>(). Upon a
- successful return <code class="Fn">hashalloc</code>() sets this member to
- the actual number allocated (may be rounded up to power-of-2 or nearest
- prime). The value returned by <code class="Fn">hashalloc</code>() shall be
- later supplied to the <code class="Fn">hashfree</code>().</dd>
- <dt><var class="Fa">mflags</var>, <var class="Fa">mtype</var></dt>
- <dd>Passed directly to <a class="Xr">malloc(9)</a>.</dd>
- <dt><var class="Fa">hdrsize</var></dt>
- <dd>Optional member that allows the caller to set a different (increased) size
- of a bucket header.</dd>
- <dt><var class="Fa">type</var></dt>
- <dd>Bucket count policy:
- <dl class="Bl-tag">
- <dt id="HASH_TYPE_POWER2"><a class="permalink" href="#HASH_TYPE_POWER2"><code class="Dv">HASH_TYPE_POWER2</code></a></dt>
- <dd>Rounded up to largest power of two less than or equal to argument
- <var class="Fa">size</var>.</dd>
- <dt id="HASH_TYPE_PRIME"><a class="permalink" href="#HASH_TYPE_PRIME"><code class="Dv">HASH_TYPE_PRIME</code></a></dt>
- <dd>Sized to the largest prime number less than or equal to argument
- <var class="Fa">size</var>.</dd>
- </dl>
- <p class="Pp">Default is <code class="Dv">HASH_TYPE_POWER2</code>.</p>
- </dd>
- <dt><var class="Fa">head</var></dt>
- <dd>Queue header type for each bucket, a <a class="Xr">queue(3)</a> or
- Concurrency-kit (CK) type.
- <dl class="Bl-tag">
- <dt id="HASH_HEAD_LIST"><a class="permalink" href="#HASH_HEAD_LIST"><code class="Dv">HASH_HEAD_LIST</code></a></dt>
- <dd><a class="Xr">queue(3)</a> <code class="Fd">LIST_HEAD</code></dd>
- <dt id="HASH_HEAD_CK_LIST"><a class="permalink" href="#HASH_HEAD_CK_LIST"><code class="Dv">HASH_HEAD_CK_LIST</code></a></dt>
- <dd>Concurrency-kit <code class="Fd">CK_LIST_HEAD</code></dd>
- <dt id="HASH_HEAD_SLIST"><a class="permalink" href="#HASH_HEAD_SLIST"><code class="Dv">HASH_HEAD_SLIST</code></a></dt>
- <dd><a class="Xr">queue(3)</a> <code class="Fd">SLIST_HEAD</code></dd>
- <dt id="HASH_HEAD_CK_SLIST"><a class="permalink" href="#HASH_HEAD_CK_SLIST"><code class="Dv">HASH_HEAD_CK_SLIST</code></a></dt>
- <dd>Concurrency-kit <code class="Fd">CK_SLIST_HEAD</code></dd>
- <dt id="HASH_HEAD_STAILQ"><a class="permalink" href="#HASH_HEAD_STAILQ"><code class="Dv">HASH_HEAD_STAILQ</code></a></dt>
- <dd><a class="Xr">queue(3)</a> <code class="Fd">STAILQ_HEAD</code></dd>
- <dt id="HASH_HEAD_CK_STAILQ"><a class="permalink" href="#HASH_HEAD_CK_STAILQ"><code class="Dv">HASH_HEAD_CK_STAILQ</code></a></dt>
- <dd>Concurrency-kit <code class="Fd">CK_STAILQ_HEAD</code></dd>
- <dt id="HASH_HEAD_TAILQ"><a class="permalink" href="#HASH_HEAD_TAILQ"><code class="Dv">HASH_HEAD_TAILQ</code></a></dt>
- <dd><a class="Xr">queue(3)</a> <code class="Fd">TAILQ_HEAD</code></dd>
- </dl>
- <p class="Pp">Default is <code class="Dv">HASH_HEAD_LIST</code>.</p>
- </dd>
- <dt><var class="Fa">lock</var></dt>
- <dd>Synchronization:
- <dl class="Bl-tag">
- <dt id="HASH_LOCK_NONE"><a class="permalink" href="#HASH_LOCK_NONE"><code class="Dv">HASH_LOCK_NONE</code></a></dt>
- <dd>No per-bucket lock.</dd>
- <dt id="HASH_LOCK_MTX"><a class="permalink" href="#HASH_LOCK_MTX"><code class="Dv">HASH_LOCK_MTX</code></a></dt>
- <dd>Per-bucket <a class="Xr">mutex(9)</a>.</dd>
- <dt id="HASH_LOCK_RWLOCK"><a class="permalink" href="#HASH_LOCK_RWLOCK"><code class="Dv">HASH_LOCK_RWLOCK</code></a></dt>
- <dd>Per-bucket <a class="Xr">rwlock(9)</a>.</dd>
- <dt id="HASH_LOCK_SX"><a class="permalink" href="#HASH_LOCK_SX"><code class="Dv">HASH_LOCK_SX</code></a></dt>
- <dd>Per-bucket <a class="Xr">sx(9)</a>.</dd>
- <dt id="HASH_LOCK_RMLOCK"><a class="permalink" href="#HASH_LOCK_RMLOCK"><code class="Dv">HASH_LOCK_RMLOCK</code></a></dt>
- <dd>Per-bucket <a class="Xr">rmlock(9)</a>.</dd>
- <dt id="HASH_LOCK_RMSLOCK"><a class="permalink" href="#HASH_LOCK_RMSLOCK"><code class="Dv">HASH_LOCK_RMSLOCK</code></a></dt>
- <dd>Per-bucket sleepable (rms) <a class="Xr">rmlock(9)</a>.</dd>
- </dl>
- <p class="Pp">Default is <code class="Dv">HASH_LOCK_NONE</code>.</p>
- </dd>
- <dt><var class="Fa">lopts</var></dt>
- <dd>Options passed to <a class="Xr">mtx_init(9)</a>,
- <a class="Xr">rw_init(9)</a>, <a class="Xr">sx_init(9)</a>,
- <a class="Xr">rm_init(9)</a> or <a class="Xr">rms_init(9)</a> (if locking
- is enabled).</dd>
- <dt><var class="Fa">lname</var></dt>
- <dd>Lock name. This member is required unless <var class="Fa">lock</var> is
- <code class="Dv">HASH_LOCK_NONE</code>.</dd>
- <dt id="hashalloc~4"><var class="Fa">ctor</var></dt>
- <dd>Optional constructor to be called by
- <a class="permalink" href="#hashalloc~4"><code class="Fn">hashalloc</code></a>()
- for each bucket after list header and lock initialization. May fail with
- error code, yielding in a failure of
- <code class="Fn">hashalloc</code>().</dd>
- <dt><var class="Fa">dtor</var></dt>
- <dd>Optional destructor to be called by <code class="Fn">hashfree</code>() for
- each bucket before lock destructors and list emptyness checks.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">hashalloc</code>() returns a pointer to the
- allocated and initialized hash table on success, or
- <code class="Dv">NULL</code> on memory allocation failure or constructor
- failure. The <var class="Fa">error</var> member of
- <var class="Fa">args</var> is set to appropriate error code. When
- <var class="Fa">mflags</var> in <var class="Fa">args</var> contain the
- <var class="Va">M_WAITOK</var> flag and the <var class="Fa">ctor</var> is
- either NULL or never fails, then <code class="Fn">hashalloc</code>() never
- fails.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A simple mutex-protected hash table using TAILQ buckets:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct bucket {
- TAILQ_HEAD(, foo) head;
- struct mtx lock;
-} *table;
-
-struct hashalloc_args args = {
- .size = 9000,
- .mflags = M_WAITOK,
- .mtype = M_FOO,
- .head = HASH_HEAD_TAILQ,
- .lock = HASH_LOCK_MTX,
- .lopts = MTX_DEF,
- .lname = &quot;bucket of foo&quot;,
-};
-
-table = hashalloc(&amp;args);
-/* Use table as array of struct bucket ... */
-mtx_lock(&amp;table[hash].lock);
-TAILQ_INSERT_HEAD(&amp;table[hash].head, foo, next);
-
-/* Later */
-hashfree(table, &amp;args);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">rmlock(9)</a>, <a class="Xr">rwlock(9)</a>,
- <a class="Xr">sx(9)</a>, <a class="Xr">queue(3)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">hashalloc</code> KPI first appeared in
- <span class="Ux">FreeBSD 16.0</span>. It supersedes older interface
- <code class="Fn">hashinit</code>(), that was available since
- <span class="Ux">4.4BSD</span>, by offering greater control over the hash
- table structure and locking strategy.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Gleb Smirnoff</span>
- &lt;<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>&gt;</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hashinit.9 3.html b/static/freebsd/man9/hashinit.9 3.html
deleted file mode 100644
index 3b29700f..00000000
--- a/static/freebsd/man9/hashinit.9 3.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HASHINIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HASHINIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hashinit</code>,
- <code class="Nm">hashinit_flags</code>, <code class="Nm">hashdestroy</code>,
- <code class="Nm">phashinit</code>, <code class="Nm">phashinit_flags</code>
- &#x2014; <span class="Nd">manage kernel hash tables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/malloc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/queue.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">hashinit</code>(<var class="Fa" style="white-space: nowrap;">int
- nelements</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long
- *hashmask</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hashinit_flags</code>(<var class="Fa">int nelements</var>,
- <var class="Fa">struct malloc_type *type</var>, <var class="Fa">u_long
- *hashmask</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hashdestroy</code>(<var class="Fa" style="white-space: nowrap;">void
- *hashtbl</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long
- hashmask</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">phashinit</code>(<var class="Fa" style="white-space: nowrap;">int
- nelements</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long
- *nentries</var>);</p>
-<p class="Pp"><code class="Fn">phashinit_flags</code>(<var class="Fa" style="white-space: nowrap;">int
- nelements</var>, <var class="Fa" style="white-space: nowrap;">struct
- malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long
- *nentries</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="WARNING"><a class="permalink" href="#WARNING">WARNING</a></h1>
-<p class="Pp">This KPI is obsolete and scheduled for removal in
- <span class="Ux">FreeBSD 17</span>. Use <a class="Xr">hashalloc(9)</a>
- instead.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#hashinit"><code class="Fn" id="hashinit">hashinit</code></a>(),
- <code class="Fn">hashinit_flags</code>(),
- <code class="Fn">phashinit</code>() and
- <code class="Fn">phashinit_flags</code>() functions allocate space for hash
- tables of size given by the argument <var class="Fa">nelements</var>.</p>
-<p class="Pp" id="hashinit~2">The
- <a class="permalink" href="#hashinit~2"><code class="Fn">hashinit</code></a>()
- function allocates hash tables that are sized to largest power of two less
- than or equal to argument <var class="Fa">nelements</var>. The
- <a class="permalink" href="#phashinit"><code class="Fn" id="phashinit">phashinit</code></a>()
- function allocates hash tables that are sized to the largest prime number
- less than or equal to argument <var class="Fa">nelements</var>. The
- <code class="Fn">hashinit_flags</code>() function operates like
- <code class="Fn">hashinit</code>() but also accepts an additional argument
- <var class="Fa">flags</var> which control various options during allocation.
- <code class="Fn">phashinit_flags</code>() function operates like
- <code class="Fn">phashinit</code>() but also accepts an additional argument
- <var class="Fa">flags</var> which control various options during allocation.
- Allocated hash tables are contiguous arrays of
- <a class="Xr">LIST_HEAD(3)</a> entries, allocated using
- <a class="Xr">malloc(9)</a>, and initialized using
- <a class="Xr">LIST_INIT(3)</a>. The malloc arena to be used for allocation
- is pointed to by argument <var class="Fa">type</var>.</p>
-<p class="Pp" id="hashdestroy">The
- <a class="permalink" href="#hashdestroy"><code class="Fn">hashdestroy</code></a>()
- function frees the space occupied by the hash table pointed to by argument
- <var class="Fa">hashtbl</var>. Argument <var class="Fa">type</var>
- determines the malloc arena to use when freeing space. The argument
- <var class="Fa">hashmask</var> should be the bit mask returned by the call
- to <code class="Fn">hashinit</code>() that allocated the hash table. The
- argument <var class="Fa">flags</var> must be used with one of the following
- values.</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="HASH_NOWAIT"><a class="permalink" href="#HASH_NOWAIT"><code class="Dv">HASH_NOWAIT</code></a></dt>
- <dd>Any malloc performed by the
- <a class="permalink" href="#hashinit_flags"><code class="Fn" id="hashinit_flags">hashinit_flags</code></a>()
- and
- <a class="permalink" href="#phashinit_flags"><code class="Fn" id="phashinit_flags">phashinit_flags</code></a>()
- function will not be allowed to wait, and therefore may fail.</dd>
- <dt id="HASH_WAITOK"><a class="permalink" href="#HASH_WAITOK"><code class="Dv">HASH_WAITOK</code></a></dt>
- <dd>Any malloc performed by <code class="Fn">hashinit_flags</code>() and
- <code class="Fn">phashinit_flags</code>() function is allowed to wait for
- memory. This is also the behavior of <code class="Fn">hashinit</code>()
- and <code class="Fn">phashinit</code>().</dd>
-</dl>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The largest prime hash value chosen by
- <code class="Fn">phashinit</code>() is 32749.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">hashinit</code>() function returns a pointer
- to an allocated hash table and sets the location pointed to by
- <var class="Fa">hashmask</var> to the bit mask to be used for computing the
- correct slot in the hash table.</p>
-<p class="Pp">The <code class="Fn">phashinit</code>() function returns a pointer
- to an allocated hash table and sets the location pointed to by
- <var class="Fa">nentries</var> to the number of rows in the hash table.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A typical example is shown below:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>...
-static LIST_HEAD(foo, foo) *footable;
-static u_long foomask;
-...
-footable = hashinit(32, M_FOO, &amp;foomask);</pre>
-</div>
-<p class="Pp">Here we allocate a hash table with 32 entries from the malloc
- arena pointed to by <code class="Dv">M_FOO</code>. The mask for the
- allocated hash table is returned in <var class="Va">foomask</var>. A
- subsequent call to <code class="Fn">hashdestroy</code>() uses the value in
- <var class="Va">foomask</var>:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>...
-hashdestroy(footable, M_FOO, foomask);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-<p class="Pp">The <code class="Fn">hashinit</code>() and
- <code class="Fn">phashinit</code>() functions will panic if argument
- <var class="Fa">nelements</var> is less than or equal to zero.</p>
-<p class="Pp">The <code class="Fn">hashdestroy</code>() function will panic if
- the hash table pointed to by <var class="Fa">hashtbl</var> is not empty.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">hashalloc(9)</a>, <a class="Xr">LIST_HEAD(3)</a>,
- <a class="Xr">malloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">There is no <code class="Fn">phashdestroy</code>() function, and
- using <code class="Fn">hashdestroy</code>() to free a hash table allocated
- by <code class="Fn">phashinit</code>() usually has grave consequences.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 17, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hexdump.9 4.html b/static/freebsd/man9/hexdump.9 4.html
deleted file mode 100644
index f2df6903..00000000
--- a/static/freebsd/man9/hexdump.9 4.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HEXDUMP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HEXDUMP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hexdump</code> &#x2014; <span class="Nd">dump a
- block of bytes to the console in hexadecimal form</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">hexdump</code>(<var class="Fa" style="white-space: nowrap;">void
- *ptr</var>, <var class="Fa" style="white-space: nowrap;">int length</var>,
- <var class="Fa" style="white-space: nowrap;">const char *hdr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#hexdump"><code class="Fn" id="hexdump">hexdump</code></a>()
- function prints an array of bytes to the console in hexadecimal form, along
- with the ASCII representation of the bytes, if possible. By default, each
- line of output will start with an offset count, followed by 16 hexadecimal
- values, followed by 16 ASCII characters.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">ptr</var></dt>
- <dd>Pointer to the array of bytes to print. It does not need to be
- <code class="Dv">NUL</code>-terminated.</dd>
- <dt><var class="Fa">length</var></dt>
- <dd>Number of bytes to print.</dd>
- <dt><var class="Fa">hdr</var></dt>
- <dd>Pointer to a <code class="Dv">NUL</code>-terminated character string that
- will be prepended to each line of output. A value of
- <code class="Dv">NULL</code> implies that no header will be printed.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Flags for controlling the formatting of the output.
- <dl class="Bl-tag">
- <dt>Bits 0-7</dt>
- <dd>Integer value of the number of bytes to display on each line. A value
- of 0 implies that the default value of 16 will be used.</dd>
- <dt>Bits 8-15</dt>
- <dd>Character ASCII value to use as the separator for the hexadecimal
- output. A value of 0 implies that the default value of 32 (ASCII
- space) will be used.</dd>
- <dt id="HD_OMIT_COUNT"><a class="permalink" href="#HD_OMIT_COUNT"><code class="Dv">HD_OMIT_COUNT</code></a></dt>
- <dd>Do not print the offset column at the beginning of each line.</dd>
- <dt id="HD_OMIT_HEX"><a class="permalink" href="#HD_OMIT_HEX"><code class="Dv">HD_OMIT_HEX</code></a></dt>
- <dd>Do not print the hexadecimal values on each line.</dd>
- <dt id="HD_OMIT_CHARS"><a class="permalink" href="#HD_OMIT_CHARS"><code class="Dv">HD_OMIT_CHARS</code></a></dt>
- <dd>Do not print the character values on each line.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ascii(7)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Scott
- Long</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 7, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hhook.9 3.html b/static/freebsd/man9/hhook.9 3.html
deleted file mode 100644
index 3d7bf97d..00000000
--- a/static/freebsd/man9/hhook.9 3.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HHOOK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HHOOK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hhook</code>,
- <code class="Nm">hhook_head_register</code>,
- <code class="Nm">hhook_head_deregister</code>,
- <code class="Nm">hhook_head_deregister_lookup</code>,
- <code class="Nm">hhook_run_hooks</code>,
- <code class="Nm">HHOOKS_RUN_IF</code>,
- <code class="Nm">HHOOKS_RUN_LOOKUP_IF</code> &#x2014;
- <span class="Nd">Helper Hook Framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/hhook.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">typedef int</var>
- <br/>
- <code class="Fn">(*hhook_func_t)</code>(<var class="Fa" style="white-space: nowrap;">int32_t
- hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- hhook_id</var>, <var class="Fa" style="white-space: nowrap;">void
- *udata</var>, <var class="Fa" style="white-space: nowrap;">void
- *ctx_data</var>, <var class="Fa" style="white-space: nowrap;">void
- *hdata</var>, <var class="Fa" style="white-space: nowrap;">struct osd
- *hosd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">hhook_head_register</code>(<var class="Fa" style="white-space: nowrap;">int32_t
- hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- hhook_id</var>, <var class="Fa" style="white-space: nowrap;">struct
- hhook_head **hhh</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">hhook_head_deregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- hhook_head *hhh</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">hhook_head_deregister_lookup</code>(<var class="Fa" style="white-space: nowrap;">int32_t
- hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- hhook_id</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <code class="Fn">hhook_run_hooks</code>(<var class="Fa" style="white-space: nowrap;">struct
- hhook_head *hhh</var>, <var class="Fa" style="white-space: nowrap;">void
- *ctx_data</var>, <var class="Fa" style="white-space: nowrap;">struct osd
- *hosd</var>);</p>
-<p class="Pp"><code class="Fn">HHOOKS_RUN_IF</code>(<var class="Fa" style="white-space: nowrap;">hhh</var>,
- <var class="Fa" style="white-space: nowrap;">ctx_data</var>,
- <var class="Fa" style="white-space: nowrap;">hosd</var>);</p>
-<p class="Pp"><code class="Fn">HHOOKS_RUN_LOOKUP_IF</code>(<var class="Fa" style="white-space: nowrap;">hhook_type</var>,
- <var class="Fa" style="white-space: nowrap;">hhook_id</var>,
- <var class="Fa" style="white-space: nowrap;">ctx_data</var>,
- <var class="Fa" style="white-space: nowrap;">hosd</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">hhook</code> provides a framework for managing
- and running arbitrary hook functions at defined hook points within the
- kernel. The KPI was inspired by <a class="Xr">pfil(9)</a>, and in many
- respects can be thought of as a more generic superset of pfil.</p>
-<p class="Pp">The <a class="Xr">khelp(9)</a> and <code class="Nm">hhook</code>
- frameworks are tightly integrated. Khelp is responsible for registering and
- deregistering Khelp module hook functions with <code class="Nm">hhook</code>
- points. The KPI functions used by <a class="Xr">khelp(9)</a> to do this are
- not documented here as they are not relevant to consumers wishing to
- instantiate hook points.</p>
-<section class="Ss">
-<h2 class="Ss" id="Information_for_Khelp_Module_Implementors"><a class="permalink" href="#Information_for_Khelp_Module_Implementors">Information
- for Khelp Module Implementors</a></h2>
-<p class="Pp">Khelp modules indirectly interact with
- <code class="Nm">hhook</code> by defining appropriate hook functions for
- insertion into hook points. Hook functions must conform to the
- <var class="Ft">hhook_func_t</var> function pointer declaration outlined in
- the <a class="Sx" href="#SYNOPSIS">SYNOPSIS</a>.</p>
-<p class="Pp">The <var class="Fa">hhook_type</var> and
- <var class="Fa">hhook_id</var> arguments identify the hook point which has
- called into the hook function. These are useful when a single hook function
- is registered for multiple hook points and wants to know which hook point
- has called into it.
- <code class="In">&lt;<a class="In">sys/hhook.h</a>&gt;</code> lists
- available <var class="Fa">hhook_type</var> defines and subsystems which
- export hook points are responsible for defining the
- <var class="Fa">hhook_id</var> value in appropriate header files.</p>
-<p class="Pp">The <var class="Fa">udata</var> argument will be passed to the
- hook function if it was specified in the <var class="Vt">struct
- hookinfo</var> at hook registration time.</p>
-<p class="Pp">The <var class="Fa">ctx_data</var> argument contains context
- specific data from the hook point call site. The data type passed is
- subsystem dependent.</p>
-<p class="Pp">The <var class="Fa">hdata</var> argument is a pointer to the
- persistent per-object storage allocated for use by the module if required.
- The pointer will only ever be NULL if the module did not request per-object
- storage.</p>
-<p class="Pp" id="khelp_get_osd">The <var class="Fa">hosd</var> argument can be
- used with the <a class="Xr">khelp(9)</a> framework's
- <a class="permalink" href="#khelp_get_osd"><code class="Fn">khelp_get_osd</code></a>()
- function to access data belonging to a different Khelp module.</p>
-<p class="Pp">Khelp modules instruct the Khelp framework to register their hook
- functions with <code class="Nm">hhook</code> points by creating a
- <var class="Vt">struct hookinfo</var> per hook point, which contains the
- following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct hookinfo {
- hhook_func_t hook_func;
- struct helper *hook_helper;
- void *hook_udata;
- int32_t hook_id;
- int32_t hook_type;
-};</pre>
-</div>
-<p class="Pp">Khelp modules are responsible for setting all members of the
- struct except <var class="Va">hook_helper</var> which is handled by the
- Khelp framework.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Creating_and_Managing_Hook_Points"><a class="permalink" href="#Creating_and_Managing_Hook_Points">Creating
- and Managing Hook Points</a></h2>
-<p class="Pp">Kernel subsystems that wish to provide
- <code class="Nm">hhook</code> points typically need to make four and
- possibly five key changes to their implementation:</p>
-<ul class="Bl-bullet">
- <li>Define a list of <var class="Va">hhook_id</var> mappings in an appropriate
- subsystem header.</li>
- <li id="hhook_head_register">Register each hook point with the
- <a class="permalink" href="#hhook_head_register"><code class="Fn">hhook_head_register</code></a>()
- function during initialisation of the subsystem.</li>
- <li>Select or create a standardised data type to pass to hook functions as
- contextual data.</li>
- <li>Add a call to <code class="Fn">HHOOKS_RUN_IF</code>() or
- <code class="Fn">HHOOKS_RUN_IF_LOOKUP</code>() at the point in the
- subsystem's code where the hook point should be executed.</li>
- <li>If the subsystem can be dynamically added/removed at runtime, each hook
- point registered with the <code class="Fn">hhook_head_register</code>()
- function when the subsystem was initialised needs to be deregistered with
- the <code class="Fn">hhook_head_deregister</code>() or
- <code class="Fn">hhook_head_deregister_lookup</code>() functions when the
- subsystem is being deinitialised prior to removal.</li>
-</ul>
-<p class="Pp" id="hhook_head_register~2">The
- <a class="permalink" href="#hhook_head_register~2"><code class="Fn">hhook_head_register</code></a>()
- function registers a hook point with the <code class="Nm">hhook</code>
- framework. The <var class="Fa">hook_type</var> argument defines the high
- level type for the hook point. Valid types are defined in
- <code class="In">&lt;<a class="In">sys/hhook.h</a>&gt;</code> and new types
- should be added as required. The <var class="Fa">hook_id</var> argument
- specifies a unique, subsystem specific identifier for the hook point. The
- <var class="Fa">hhh</var> argument will, if not NULL, be used to store a
- reference to the <var class="Vt">struct hhook_head</var> created as part of
- the registration process. Subsystems will generally want to store a local
- copy of the <var class="Vt">struct hhook_head</var> so that they can use the
- <code class="Fn">HHOOKS_RUN_IF</code>() macro to instantiate hook points.
- The HHOOK_WAITOK flag may be passed in via the <var class="Fa">flags</var>
- argument if <a class="Xr">malloc(9)</a> is allowed to sleep waiting for
- memory to become available. If the hook point is within a virtualised
- subsystem (e.g. the network stack), the HHOOK_HEADISINVNET flag should be
- passed in via the <var class="Fa">flags</var> argument so that the
- <var class="Vt">struct hhook_head</var> created during the registration
- process will be added to a virtualised list.</p>
-<p class="Pp" id="hhook_head_deregister">The
- <a class="permalink" href="#hhook_head_deregister"><code class="Fn">hhook_head_deregister</code></a>()
- function deregisters a previously registered hook point from the
- <code class="Nm">hhook</code> framework. The <var class="Fa">hhh</var>
- argument is the pointer to the <var class="Vt">struct hhook_head</var>
- returned by
- <a class="permalink" href="#hhoook_head_register"><code class="Fn" id="hhoook_head_register">hhoook_head_register</code></a>()
- when the hook point was registered.</p>
-<p class="Pp" id="hhook_head_deregister_lookup">The
- <a class="permalink" href="#hhook_head_deregister_lookup"><code class="Fn">hhook_head_deregister_lookup</code></a>()
- function can be used instead of
- <code class="Fn">hhook_head_deregister</code>() in situations where the
- caller does not have a cached copy of the <var class="Vt">struct
- hhook_head</var> and wants to deregister a hook point using the appropriate
- <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var>
- identifiers instead.</p>
-<p class="Pp" id="hhook_run_hooks">The
- <a class="permalink" href="#hhook_run_hooks"><code class="Fn">hhook_run_hooks</code></a>()
- function should normally not be called directly and should instead be called
- indirectly via the <code class="Fn">HHOOKS_RUN_IF</code>() macro. However,
- there may be circumstances where it is preferable to call the function
- directly, and so it is documented here for completeness. The
- <var class="Fa">hhh</var> argument references the
- <code class="Nm">hhook</code> point to call all registered hook functions
- for. The <var class="Fa">ctx_data</var> argument specifies a pointer to the
- contextual hook point data to pass into the hook functions. The
- <var class="Fa">hosd</var> argument should be the pointer to the appropriate
- object's <var class="Vt">struct osd</var> if the subsystem provides the
- ability for Khelp modules to associate per-object data. Subsystems which do
- not should pass NULL.</p>
-<p class="Pp" id="HHOOKS_RUN_IF">The
- <a class="permalink" href="#HHOOKS_RUN_IF"><code class="Fn">HHOOKS_RUN_IF</code></a>()
- macro is the preferred way to implement hook points. It only calls the
- <code class="Fn">hhook_run_hooks</code>() function if at least one hook
- function is registered for the hook point. By checking for registered hook
- functions, the macro minimises the cost associated with adding hook points
- to frequently used code paths by reducing to a simple if test in the common
- case where no hook functions are registered. The arguments are as described
- for the <code class="Fn">hhook_run_hooks</code>() function.</p>
-<p class="Pp" id="HHOOKS_RUN_IF_LOOKUP">The
- <a class="permalink" href="#HHOOKS_RUN_IF_LOOKUP"><code class="Fn">HHOOKS_RUN_IF_LOOKUP</code></a>()
- macro performs the same function as the
- <code class="Fn">HHOOKS_RUN_IF</code>() macro, but performs an additional
- step to look up the <var class="Vt">struct hhook_head</var> for the
- specified <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var>
- identifiers. It should not be used except in code paths which are
- infrequently executed because of the reference counting overhead associated
- with the look up.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Each <var class="Vt">struct hhook_head</var> protects its internal
- list of hook functions with a <a class="Xr">rmlock(9)</a>. Therefore,
- anytime <code class="Fn">hhook_run_hooks</code>() is called directly or
- indirectly via the <code class="Fn">HHOOKS_RUN_IF</code>() or
- <code class="Fn">HHOOKS_RUN_IF_LOOKUP</code>() macros, a non-sleepable read
- lock will be acquired and held across the calls to all registered hook
- functions.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">hhook_head_register</code>() returns 0 if no
- errors occurred. It returns EEXIST if a hook point with the same
- <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var> is already
- registered. It returns EINVAL if the HHOOK_HEADISINVNET flag is not set in
- <var class="Fa">flags</var> because the implementation does not yet support
- hook points in non-virtualised subsystems (see the
- <a class="Sx" href="#BUGS">BUGS</a> section for details). It returns ENOMEM
- if <a class="Xr">malloc(9)</a> failed to allocate memory for the new
- <var class="Vt">struct hhook_head</var>.</p>
-<p class="Pp"><code class="Fn">hhook_head_deregister</code>() and
- <code class="Fn">hhook_head_deregister_lookup</code>() return 0 if no errors
- occurred. They return ENOENT if <var class="Fa">hhh</var> is NULL. They
- return EBUSY if the reference count of <var class="Fa">hhh</var> is greater
- than one.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A well commented example Khelp module can be found at:
- <span class="Pa">/usr/share/examples/kld/khelp/h_example.c</span></p>
-<p class="Pp">The <a class="Xr">tcp(4)</a> implementation provides two
- <code class="Nm">hhook</code> points which are called for packets
- sent/received when a connection is in the established phase. Search for
- HHOOK in the following files: <span class="Pa">sys/netinet/tcp_var.h</span>,
- <span class="Pa">sys/netinet/tcp_input.c</span>,
- <span class="Pa">sys/netinet/tcp_output.c</span> and
- <span class="Pa">sys/netinet/tcp_subr.c</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">khelp(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1>
-<p class="Pp">Development and testing of this software were made possible in
- part by grants from the FreeBSD Foundation and Cisco University Research
- Program Fund at Community Foundation Silicon Valley.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">hhook</code> framework first appeared in
- <span class="Ux">FreeBSD 9.0</span>.</p>
-<p class="Pp">The <code class="Nm">hhook</code> framework was first released in
- 2010 by Lawrence Stewart whilst studying at Swinburne University of
- Technology's Centre for Advanced Internet Architectures, Melbourne,
- Australia. More details are available at:</p>
-<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">hhook</code> framework was written by
- <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">David
- Hayes</span>
- &lt;<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>&gt;
- and <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 21, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/hz.9 3.html b/static/freebsd/man9/hz.9 3.html
deleted file mode 100644
index fdc35443..00000000
--- a/static/freebsd/man9/hz.9 3.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">HZ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">HZ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">hz</code>, <code class="Nm">tick</code>,
- <code class="Nm">stathz</code>, <code class="Nm">profhz</code> &#x2014;
- <span class="Nd">system time model</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Vt">extern int hz;</var>
- <br/>
- <var class="Vt">extern int tick;</var>
- <br/>
- <var class="Vt">extern int stathz;</var>
- <br/>
- <var class="Vt">extern int profhz; /* deprecated */</var></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><span class="Ux">FreeBSD</span> utilizes periodic, one-shot,
- global or per-CPU timing hardware using <a class="Xr">eventtimers(9)</a> to
- produce traditional clock behavior. These clocks regulate periodic events in
- the system.</p>
-<p class="Pp">The main clock is used to update the system's notion of time via
- <a class="Xr">timecounters(9)</a> and to pace periodic system processing as
- documented in <a class="Xr">hardclock(9)</a>. That routine may be called
- once every 1 / <var class="Va">hz</var> seconds, though the call is omitted
- if no work is needed in the next tick and it has not been 0.5 seconds since
- the last call.</p>
-<p class="Pp">The stat clock running at <var class="Va">stathz</var> gathers
- statistics on the system and its processes. It computes values for
- <a class="Xr">getrusage(2)</a> and statistics displayed by
- <a class="Xr">ps(1)</a> and <a class="Xr">top(1)</a>.</p>
-<p class="Pp">Finally, a profiling clock may run at <var class="Vt">profhz</var>
- to sample user program counter values for profiling purposes. This profiling
- mechanism has been replaced by the more functional
- <a class="Xr">hwpmc(4)</a> and may be removed in a future version of
- <span class="Ux">FreeBSD</span>.</p>
-<p class="Pp"><var class="Va">tick</var> is the length of time in microseconds
- of one system tick.</p>
-<p class="Pp" id="struct">These system variables are also available as
- <a class="permalink" href="#struct"><i class="Em">struct clockinfo</i></a>
- from <a class="Xr">sysctl(3)</a> and
- <a class="permalink" href="#kern.clockrate"><b class="Sy" id="kern.clockrate">kern.clockrate</b></a>
- from <a class="Xr">sysctl(8)</a>.</p>
-<p class="Pp" id="kern.cp_time">The current global and per-CPU CPU time usage is
- returned to the user in units of 1 / <var class="Va">stathz</var> ticks in
- the
- <a class="permalink" href="#kern.cp_time"><b class="Sy">kern.cp_time</b></a>
- and
- <a class="permalink" href="#kern.cp_times"><b class="Sy" id="kern.cp_times">kern.cp_times</b></a>
- sysctl MIBs.</p>
-<p class="Pp" id="kern.hz">The <var class="Va">hz</var> rate may be overridden
- by defining <code class="Dv">HZ</code> in the kernel configuration file or
- setting <a class="permalink" href="#kern.hz"><b class="Sy">kern.hz</b></a>
- system tuneable via <a class="Xr">loader.conf(5)</a>.</p>
-<p class="Pp">The current default is 1000 Hz for a tick of 1 ms for real
- hardware. For virtual machine guests, the default is 100 Hz for a tick of 10
- ms. Only override the default value if you really know what you are doing.
- Due to the adaptive nature of timeouts, changing this value has less effect
- than it had in the past.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ps(1)</a>, <a class="Xr">top(1)</a>,
- <a class="Xr">setitimer(2)</a>, <a class="Xr">timer_settime(2)</a>,
- <a class="Xr">loader.conf(5)</a>, <a class="Xr">eventtimers(9)</a>,
- <a class="Xr">hardclock(9)</a>, <a class="Xr">microtime(9)</a>,
- <a class="Xr">time_second(9)</a>, <a class="Xr">timecounters(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Historically, both the <var class="Va">stathz</var> and
- <var class="Va">profhz</var> clocks have run off the same physical timer
- running at the slower rate when no process is using the profile features, or
- at the higher rate when at least one process is using it. Although the
- interface is deprecated by <span class="St">IEEE Std 1003.1-2008
- (&#x201C;POSIX.1&#x201D;)</span> in favor of
- <a class="Xr">timer_settime(2)</a>, several programs still use
- <a class="Xr">setitimer(2)</a> and <var class="Va">ITIMER_PROF</var> for a
- higher-resolution periodic interrupt than has been traditionally
- available.</p>
-<p class="Pp">Historically, <a class="Xr">hardclock(9)</a> has also been run off
- a separate interrupt, except on constrained platforms that lack enough
- periodic interrupt sources. <span class="Ux">FreeBSD</span> uses
- <a class="Xr">eventtimers(9)</a> to abstract these details away, though some
- old code may still harbor assumptions that are an imperfect fit to this
- abstraction.</p>
-<p class="Pp"><a class="Xr">timecounters(9)</a> are limited to 32-bits and wrap
- after about a second, so we must update the time hands they maintain at
- least every half second to get the proper wrapping math. In addition,
- <var class="Va">kern.cp_times</var> needs to updated at least once a second
- so that the values displayed by <a class="Xr">top(1)</a> update every
- second.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 1, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211.9 3.html b/static/freebsd/man9/ieee80211.9 3.html
deleted file mode 100644
index 7c8c3714..00000000
--- a/static/freebsd/man9/ieee80211.9 3.html
+++ /dev/null
@@ -1,568 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">IEEE80211</code> &#x2014; <span class="Nd">802.11
- network layer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_ifattach</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *ic</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_ifdetach</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *ic</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_mhz2ieee</code>(<var class="Fa" style="white-space: nowrap;">u_int
- freq</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_chan2ieee</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *ic</var>, <var class="Fa" style="white-space: nowrap;">const
- struct ieee80211_channel *c</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">ieee80211_ieee2mhz</code>(<var class="Fa" style="white-space: nowrap;">u_int
- chan</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_media_change</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_media_status</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- ifmediareq *imr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_setmode</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *ic</var>, <var class="Fa" style="white-space: nowrap;">enum
- ieee80211_phymode mode</var>);</p>
-<p class="Pp"><var class="Ft">enum ieee80211_phymode</var>
- <br/>
- <code class="Fn">ieee80211_chan2mode</code>(<var class="Fa">const struct
- ieee80211_channel *chan</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_rate2media</code>(<var class="Fa">struct
- ieee80211com *ic</var>, <var class="Fa">int rate</var>, <var class="Fa">enum
- ieee80211_phymode mode</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_media2rate</code>(<var class="Fa" style="white-space: nowrap;">int
- mword</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">IEEE 802.11 device drivers are written to use the infrastructure
- provided by the <code class="Nm">IEEE80211</code> software layer. This
- software provides a support framework for drivers that includes ifnet
- cloning, state management, and a user management API by which applications
- interact with 802.11 devices. Most drivers depend on the
- <code class="Nm">IEEE80211</code> layer for protocol services but devices
- that off-load functionality may bypass the layer to connect directly to the
- device.</p>
-<p class="Pp">A <code class="Nm">IEEE80211</code> device driver implements a
- virtual radio API that is exported to users through network interfaces (aka
- vaps) that are cloned from the underlying device. These interfaces have an
- operating mode (station, adhoc, hostap, wds, monitor, etc.) that is fixed
- for the lifetime of the interface. Devices that can support multiple
- concurrent interfaces allow multiple vaps to be cloned. This enables
- construction of interesting applications such as an AP vap and one or more
- WDS vaps or multiple AP vaps, each with a different security model. The
- <code class="Nm">IEEE80211</code> layer virtualizes most 802.11 state and
- coordinates vap state changes including scheduling multiple vaps. State that
- is not virtualized includes the current channel and WME/WMM parameters.
- Protocol processing is typically handled entirely in the
- <code class="Nm">IEEE80211</code> layer with drivers responsible purely for
- moving data between the host and device. Similarly,
- <code class="Nm">IEEE80211</code> handles most <a class="Xr">ioctl(2)</a>
- requests without entering the driver; instead drivers are notified of state
- changes that require their involvement.</p>
-<p class="Pp">The virtual radio interface defined by the
- <code class="Nm">IEEE80211</code> layer means that drivers must be
- structured to follow specific rules. Drivers that support only a single
- interface at any time must still follow these rules.</p>
-<p class="Pp">Most of these functions require that attachment to the stack is
- performed before calling.</p>
-<p class="Pp" id="ieee80211_ifattach">The
- <a class="permalink" href="#ieee80211_ifattach"><code class="Fn">ieee80211_ifattach</code></a>()
- function attaches the wireless network interface <var class="Fa">ic</var> to
- the 802.11 network stack layer. This function must be called before using
- any of the <code class="Nm">IEEE80211</code> functions which need to store
- driver state across invocations.</p>
-<p class="Pp" id="ieee80211_ifdetach">The
- <a class="permalink" href="#ieee80211_ifdetach"><code class="Fn">ieee80211_ifdetach</code></a>()
- function frees any <code class="Nm">IEEE80211</code> structures associated
- with the driver, and performs Ethernet and BPF detachment on behalf of the
- caller.</p>
-<p class="Pp" id="ieee80211_mhz2ieee">The
- <a class="permalink" href="#ieee80211_mhz2ieee"><code class="Fn">ieee80211_mhz2ieee</code></a>()
- utility function converts the frequency <var class="Fa">freq</var>
- (specified in MHz) to an IEEE 802.11 channel number. The
- <var class="Fa">flags</var> argument is a hint which specifies whether the
- frequency is in the 2GHz ISM band
- (<var class="Vt">IEEE80211_CHAN_2GHZ</var>) or the 5GHz band
- (<var class="Vt">IEEE80211_CHAN_5GHZ</var>); appropriate clipping of the
- result is then performed.</p>
-<p class="Pp" id="ieee80211_chan2ieee">The
- <a class="permalink" href="#ieee80211_chan2ieee"><code class="Fn">ieee80211_chan2ieee</code></a>()
- function converts the channel specified in <var class="Fa">*c</var> to an
- IEEE channel number for the driver <var class="Fa">ic</var>. If the
- conversion would be invalid, an error message is printed to the system
- console. This function REQUIRES that the driver is hooked up to the
- <code class="Nm">IEEE80211</code> subsystem.</p>
-<p class="Pp" id="ieee80211_ieee2mhz">The
- <a class="permalink" href="#ieee80211_ieee2mhz"><code class="Fn">ieee80211_ieee2mhz</code></a>()
- utility function converts the IEEE channel number <var class="Ft">chan</var>
- to a frequency (in MHz). The <var class="Fa">flags</var> argument is a hint
- which specifies whether the frequency is in the 2GHz ISM band
- (<var class="Vt">IEEE80211_CHAN_2GHZ</var>) or the 5GHz band
- (<var class="Vt">IEEE80211_CHAN_5GHZ</var>); appropriate clipping of the
- result is then performed.</p>
-<p class="Pp" id="ieee80211_media_status">The
- <a class="permalink" href="#ieee80211_media_status"><code class="Fn">ieee80211_media_status</code></a>()
- and
- <a class="permalink" href="#ieee80211_media_change"><code class="Fn" id="ieee80211_media_change">ieee80211_media_change</code></a>()
- functions are device-independent handlers for <var class="Vt">ifmedia</var>
- commands and are not intended to be called directly.</p>
-<p class="Pp" id="ieee80211_setmode">The
- <a class="permalink" href="#ieee80211_setmode"><code class="Fn">ieee80211_setmode</code></a>()
- function is called from within the 802.11 stack to change the mode of the
- driver's PHY; it is not intended to be called directly.</p>
-<p class="Pp" id="ieee80211_chan2mode">The
- <a class="permalink" href="#ieee80211_chan2mode"><code class="Fn">ieee80211_chan2mode</code></a>()
- function returns the PHY mode required for use with the channel
- <var class="Fa">chan</var>. This is typically used when selecting a rate
- set, to be advertised in beacons, for example.</p>
-<p class="Pp" id="ieee80211_rate2media">The
- <a class="permalink" href="#ieee80211_rate2media"><code class="Fn">ieee80211_rate2media</code></a>()
- function converts the bit rate <var class="Fa">rate</var> (measured in units
- of 0.5Mbps) to an <var class="Vt">ifmedia</var> sub-type, for the device
- <var class="Fa">ic</var> running in PHY mode <var class="Fa">mode</var>. The
- <a class="permalink" href="#ieee80211_media2rate"><code class="Fn" id="ieee80211_media2rate">ieee80211_media2rate</code></a>()
- performs the reverse of this conversion, returning the bit rate (in 0.5Mbps
- units) corresponding to an <var class="Vt">ifmedia</var> sub-type.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA
- STRUCTURES</a></h1>
-<p class="Pp">The virtual radio architecture splits state between a single
- per-device <var class="Vt">ieee80211com</var> structure and one or more
- <var class="Vt">ieee80211vap</var> structures. Drivers are expected to setup
- various shared state in these structures at device attach and during vap
- creation but otherwise should treat them as read-only. The
- <var class="Vt">ieee80211com</var> structure is allocated by the
- <code class="Nm">IEEE80211</code> layer as adjunct data to a device's
- <var class="Vt">ifnet</var>; it is accessed through the
- <var class="Vt">if_l2com</var> structure member. The
- <var class="Vt">ieee80211vap</var> structure is allocated by the driver in
- the &#x201C;vap create&#x201D; method and should be extended with any
- driver-private state. This technique of giving the driver control to
- allocate data structures is used for other <code class="Nm">IEEE80211</code>
- data structures and should be exploited to maintain driver-private state
- together with public <code class="Nm">IEEE80211</code> state.</p>
-<p class="Pp">The other main data structures are the station, or node, table
- that tracks peers in the local BSS, and the channel table that defines the
- current set of available radio channels. Both tables are bound to the
- <var class="Vt">ieee80211com</var> structure and shared by all vaps.
- Long-lasting references to a node are counted to guard against premature
- reclamation. In particular every packet sent/received holds a node reference
- (either explicitly for transmit or implicitly on receive).</p>
-<p class="Pp">The <var class="Vt">ieee80211com</var> and
- <var class="Vt">ieee80211vap</var> structures also hold a collection of
- method pointers that drivers fill-in and/or override to take control of
- certain operations. These methods are the primary way drivers are bound to
- the <code class="Nm">IEEE80211</code> layer and are described below.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_ATTACH/DETACH"><a class="permalink" href="#DRIVER_ATTACH/DETACH">DRIVER
- ATTACH/DETACH</a></h1>
-<p class="Pp">Drivers attach to the <code class="Nm">IEEE80211</code> layer with
- the
- <a class="permalink" href="#ieee80211_ifattach~2"><code class="Fn" id="ieee80211_ifattach~2">ieee80211_ifattach</code></a>()
- function. The driver is expected to allocate and setup any device-private
- data structures before passing control. The
- <var class="Vt">ieee80211com</var> structure must be pre-initialized with
- state required to setup the <code class="Nm">IEEE80211</code> layer:</p>
-<dl class="Bl-tag">
- <dt id="ic_ifp"><a class="permalink" href="#ic_ifp"><code class="Dv">ic_ifp</code></a></dt>
- <dd>Backpointer to the physical device's ifnet.</dd>
- <dt id="ic_caps"><a class="permalink" href="#ic_caps"><code class="Dv">ic_caps</code></a></dt>
- <dd>Device/driver capabilities; see below for a complete description.</dd>
- <dt id="ic_channels"><a class="permalink" href="#ic_channels"><code class="Dv">ic_channels</code></a></dt>
- <dd>Table of channels the device is capable of operating on. This is initially
- provided by the driver but may be changed through calls that change the
- regulatory state.</dd>
- <dt id="ic_nchan"><a class="permalink" href="#ic_nchan"><code class="Dv">ic_nchan</code></a></dt>
- <dd>Number of entries in <code class="Dv">ic_channels</code>.</dd>
-</dl>
-<p class="Pp" id="ieee80211_ifattach~3">On return from
- <a class="permalink" href="#ieee80211_ifattach~3"><code class="Fn">ieee80211_ifattach</code></a>()
- the driver is expected to override default callback functions in the
- <var class="Vt">ieee80211com</var> structure to register it's private
- routines. Methods marked with a &#x201C;*&#x201D; must be provided by the
- driver.</p>
-<dl class="Bl-tag">
- <dt id="ic_vap_create*"><a class="permalink" href="#ic_vap_create*"><code class="Dv">ic_vap_create*</code></a></dt>
- <dd>Create a vap instance of the specified type (operating mode). Any fixed
- BSSID and/or MAC address is provided. Drivers that support multi-bssid
- operation may honor the requested BSSID or assign their own.</dd>
- <dt id="ic_vap_delete*"><a class="permalink" href="#ic_vap_delete*"><code class="Dv">ic_vap_delete*</code></a></dt>
- <dd>Destroy a vap instance created with
- <code class="Dv">ic_vap_create</code>.</dd>
- <dt id="ic_getradiocaps"><a class="permalink" href="#ic_getradiocaps"><code class="Dv">ic_getradiocaps</code></a></dt>
- <dd>Return the list of calibrated channels for the radio. The default method
- returns the current list of channels (space permitting).</dd>
- <dt id="ic_setregdomain"><a class="permalink" href="#ic_setregdomain"><code class="Dv">ic_setregdomain</code></a></dt>
- <dd>Process a request to change regulatory state. The routine may reject a
- request or constrain changes (e.g. reduce transmit power caps). The
- default method accepts all proposed changes.</dd>
- <dt id="ic_send_mgmt"><a class="permalink" href="#ic_send_mgmt"><code class="Dv">ic_send_mgmt</code></a></dt>
- <dd>Send an 802.11 management frame. The default method fabricates the frame
- using <code class="Nm">IEEE80211</code> state and passes it to the driver
- through the <code class="Dv">ic_raw_xmit</code> method.</dd>
- <dt id="ic_raw_xmit"><a class="permalink" href="#ic_raw_xmit"><code class="Dv">ic_raw_xmit</code></a></dt>
- <dd>Transmit a raw 802.11 frame. The default method drops the frame and
- generates a message on the console.</dd>
- <dt id="ic_updateslot"><a class="permalink" href="#ic_updateslot"><code class="Dv">ic_updateslot</code></a></dt>
- <dd>Update hardware state after an 802.11 IFS slot time change. There is no
- default method; the pointer may be NULL in which case it will not be
- used.</dd>
- <dt id="ic_update_mcast"><a class="permalink" href="#ic_update_mcast"><code class="Dv">ic_update_mcast</code></a></dt>
- <dd>Update hardware for a change in the multicast packet filter. The default
- method prints a console message.</dd>
- <dt id="ic_update_promisc"><a class="permalink" href="#ic_update_promisc"><code class="Dv">ic_update_promisc</code></a></dt>
- <dd>Update hardware for a change in the promiscuous mode setting. The default
- method prints a console message.</dd>
- <dt id="ic_newassoc"><a class="permalink" href="#ic_newassoc"><code class="Dv">ic_newassoc</code></a></dt>
- <dd>Update driver/device state for association to a new AP (in station mode)
- or when a new station associates (e.g. in AP mode). There is no default
- method; the pointer may be NULL in which case it will not be used.</dd>
- <dt id="ic_node_alloc"><a class="permalink" href="#ic_node_alloc"><code class="Dv">ic_node_alloc</code></a></dt>
- <dd>Allocate and initialize a <var class="Vt">ieee80211_node</var> structure.
- This method cannot sleep. The default method allocates zero'd memory using
- <a class="Xr">malloc(9)</a>. Drivers should override this method to
- allocate extended storage for their own needs. Memory allocated by the
- driver must be tagged with <code class="Dv">M_80211_NODE</code> to balance
- the memory allocation statistics.</dd>
- <dt id="ic_node_free"><a class="permalink" href="#ic_node_free"><code class="Dv">ic_node_free</code></a></dt>
- <dd>Reclaim storage of a node allocated by
- <code class="Dv">ic_node_alloc</code>. Drivers are expected to
- <a class="permalink" href="#interpose"><i class="Em" id="interpose">interpose</i></a>
- their own method to cleanup private state but must call through this
- method to allow <code class="Nm">IEEE80211</code> to reclaim it's private
- state.</dd>
- <dt id="ic_node_cleanup"><a class="permalink" href="#ic_node_cleanup"><code class="Dv">ic_node_cleanup</code></a></dt>
- <dd>Cleanup state in a <var class="Vt">ieee80211_node</var> created by
- <code class="Dv">ic_node_alloc</code>. This operation is distinguished
- from <code class="Dv">ic_node_free</code> in that it may be called long
- before the node is actually reclaimed to cleanup adjunct state. This can
- happen, for example, when a node must not be reclaimed due to references
- held by packets in the transmit queue. Drivers typically interpose
- <code class="Dv">ic_node_cleanup</code> instead of
- <code class="Dv">ic_node_free</code>.</dd>
- <dt id="ic_node_age"><a class="permalink" href="#ic_node_age"><code class="Dv">ic_node_age</code></a></dt>
- <dd>Age, and potentially reclaim, resources associated with a node. The
- default method ages frames on the power-save queue (in AP mode) and
- pending frames in the receive reorder queues (for stations using
- A-MPDU).</dd>
- <dt id="ic_node_drain"><a class="permalink" href="#ic_node_drain"><code class="Dv">ic_node_drain</code></a></dt>
- <dd>Reclaim all optional resources associated with a node. This call is used
- to free up resources when they are in short supply.</dd>
- <dt id="ic_node_getrssi"><a class="permalink" href="#ic_node_getrssi"><code class="Dv">ic_node_getrssi</code></a></dt>
- <dd>Return the Receive Signal Strength Indication (RSSI) in .5 dBm units for
- the specified node. This interface returns a subset of the information
- returned by <code class="Dv">ic_node_getsignal</code>. The default method
- calculates a filtered average over the last ten samples passed in to
- <a class="Xr">ieee80211_input(9)</a> or
- <a class="Xr">ieee80211_input_all(9)</a>.</dd>
- <dt id="ic_node_getsignal"><a class="permalink" href="#ic_node_getsignal"><code class="Dv">ic_node_getsignal</code></a></dt>
- <dd>Return the RSSI and noise floor (in .5 dBm units) for a station. The
- default method calculates RSSI as described above; the noise floor
- returned is the last value supplied to
- <a class="Xr">ieee80211_input(9)</a> or
- <a class="Xr">ieee80211_input_all(9)</a>.</dd>
- <dt id="ic_node_getmimoinfo"><a class="permalink" href="#ic_node_getmimoinfo"><code class="Dv">ic_node_getmimoinfo</code></a></dt>
- <dd>Return MIMO radio state for a station in support of the
- <code class="Dv">IEEE80211_IOC_STA_INFO</code> ioctl request. The default
- method returns nothing.</dd>
- <dt id="ic_scan_start*"><a class="permalink" href="#ic_scan_start*"><code class="Dv">ic_scan_start*</code></a></dt>
- <dd>Prepare driver/hardware state for scanning. This callback is done in a
- sleepable context.</dd>
- <dt id="ic_scan_end*"><a class="permalink" href="#ic_scan_end*"><code class="Dv">ic_scan_end*</code></a></dt>
- <dd>Restore driver/hardware state after scanning completes. This callback is
- done in a sleepable context.</dd>
- <dt id="ic_set_channel*"><a class="permalink" href="#ic_set_channel*"><code class="Dv">ic_set_channel*</code></a></dt>
- <dd>Set the current radio channel using <var class="Vt">ic_curchan</var>. This
- callback is done in a sleepable context.</dd>
- <dt id="ic_scan_curchan"><a class="permalink" href="#ic_scan_curchan"><code class="Dv">ic_scan_curchan</code></a></dt>
- <dd>Start scanning on a channel. This method is called immediately after each
- channel change and must initiate the work to scan a channel and schedule a
- timer to advance to the next channel in the scan list. This callback is
- done in a sleepable context. The default method handles active scan work
- (e.g. sending ProbeRequest frames), and schedules a call to
- <a class="Xr">ieee80211_scan_next(9)</a> according to the maximum dwell
- time for the channel. Drivers that off-load scan work to firmware
- typically use this method to trigger per-channel scan activity.</dd>
- <dt id="ic_scan_mindwell"><a class="permalink" href="#ic_scan_mindwell"><code class="Dv">ic_scan_mindwell</code></a></dt>
- <dd>Handle reaching the minimum dwell time on a channel when scanning. This
- event is triggered when one or more stations have been found on a channel
- and the minimum dwell time has been reached. This callback is done in a
- sleepable context. The default method signals the scan machinery to
- advance to the next channel as soon as possible. Drivers can use this
- method to preempt further work (e.g. if scanning is handled by firmware)
- or ignore the request to force maximum dwell time on a channel.</dd>
- <dt id="ic_recv_action"><a class="permalink" href="#ic_recv_action"><code class="Dv">ic_recv_action</code></a></dt>
- <dd>Process a received Action frame. The default method points to
- <a class="Xr">ieee80211_recv_action(9)</a> which provides a mechanism for
- setting up handlers for each Action frame class.</dd>
- <dt id="ic_send_action"><a class="permalink" href="#ic_send_action"><code class="Dv">ic_send_action</code></a></dt>
- <dd>Transmit an Action frame. The default method points to
- <a class="Xr">ieee80211_send_action(9)</a> which provides a mechanism for
- setting up handlers for each Action frame class.</dd>
- <dt id="ic_ampdu_enable"><a class="permalink" href="#ic_ampdu_enable"><code class="Dv">ic_ampdu_enable</code></a></dt>
- <dd>Check if transmit A-MPDU should be enabled for the specified station and
- AC. The default method checks a per-AC traffic rate against a per-vap
- threshold to decide if A-MPDU should be enabled. This method also
- rate-limits ADDBA requests so that requests are not made too frequently
- when a receiver has limited resources.</dd>
- <dt id="ic_addba_request"><a class="permalink" href="#ic_addba_request"><code class="Dv">ic_addba_request</code></a></dt>
- <dd>Request A-MPDU transmit aggregation. The default method sets up local
- state and issues an ADDBA Request Action frame. Drivers may interpose this
- method if they need to setup private state for handling transmit
- A-MPDU.</dd>
- <dt id="ic_addb_response"><a class="permalink" href="#ic_addb_response"><code class="Dv">ic_addb_response</code></a></dt>
- <dd>Process a received ADDBA Response Action frame and setup resources as
- needed for doing transmit A-MPDU.</dd>
- <dt id="ic_addb_stop"><a class="permalink" href="#ic_addb_stop"><code class="Dv">ic_addb_stop</code></a></dt>
- <dd>Shutdown an A-MPDU transmit stream for the specified station and AC. The
- default method reclaims local state after sending a DelBA Action
- frame.</dd>
- <dt id="ic_bar_response"><a class="permalink" href="#ic_bar_response"><code class="Dv">ic_bar_response</code></a></dt>
- <dd>Process a response to a transmitted BAR control frame.</dd>
- <dt id="ic_ampdu_rx_start"><a class="permalink" href="#ic_ampdu_rx_start"><code class="Dv">ic_ampdu_rx_start</code></a></dt>
- <dd>Prepare to receive A-MPDU data from the specified station for the
- TID.</dd>
- <dt id="ic_ampdu_rx_stop"><a class="permalink" href="#ic_ampdu_rx_stop"><code class="Dv">ic_ampdu_rx_stop</code></a></dt>
- <dd>Terminate receipt of A-MPDU data from the specified station for the
- TID.</dd>
-</dl>
-<p class="Pp">Once the <code class="Nm">IEEE80211</code> layer is attached to a
- driver there are two more steps typically done to complete the work:</p>
-<ol class="Bl-enum">
- <li>Setup &#x201C;radiotap support&#x201D; for capturing raw 802.11 packets
- that pass through the device. This is done with a call to
- <a class="Xr">ieee80211_radiotap_attach(9)</a>.</li>
- <li>Do any final device setup like enabling interrupts.</li>
-</ol>
-<p class="Pp" id="ieee80211_ifdetach~2">State is torn down and reclaimed with a
- call to
- <a class="permalink" href="#ieee80211_ifdetach~2"><code class="Fn">ieee80211_ifdetach</code></a>().
- Note this call may result in multiple callbacks into the driver so it should
- be done before any critical driver state is reclaimed. On return from
- <code class="Fn">ieee80211_ifdetach</code>() all associated vaps and ifnet
- structures are reclaimed or inaccessible to user applications so it is safe
- to teardown driver state without worry about being re-entered. The driver is
- responsible for calling <a class="Xr">if_free(9)</a> on the ifnet it
- allocated for the physical device.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_CAPABILITIES"><a class="permalink" href="#DRIVER_CAPABILITIES">DRIVER
- CAPABILITIES</a></h1>
-<p class="Pp">Driver/device capabilities are specified using several sets of
- flags in the <var class="Vt">ieee80211com</var> structure. General
- capabilities are specified by <var class="Vt">ic_caps</var>. Hardware
- cryptographic capabilities are specified by
- <var class="Vt">ic_cryptocaps</var>. Software cryptographic capabilities are
- specified by <var class="Vt">ic_sw_cryptocaps</var>. 802.11n capabilities,
- if any, are specified by <var class="Vt">ic_htcaps</var>. The
- <code class="Nm">IEEE80211</code> layer propagates a subset of these
- capabilities to each vap through the equivalent fields:
- <var class="Vt">iv_caps</var>, <var class="Vt">iv_cryptocaps</var>, and
- <var class="Vt">iv_htcaps</var>. The following general capabilities are
- defined:</p>
-<dl class="Bl-tag">
- <dt id="IEEE80211_C_STA"><a class="permalink" href="#IEEE80211_C_STA"><code class="Dv">IEEE80211_C_STA</code></a></dt>
- <dd>Device is capable of operating in station (aka Infrastructure) mode.</dd>
- <dt id="IEEE80211_C_8023ENCAP"><a class="permalink" href="#IEEE80211_C_8023ENCAP"><code class="Dv">IEEE80211_C_8023ENCAP</code></a></dt>
- <dd>Device requires 802.3-encapsulated frames be passed for transmit. By
- default <code class="Nm">IEEE80211</code> will encapsulate all outbound
- frames as 802.11 frames (without a PLCP header).</dd>
- <dt id="IEEE80211_C_FF"><a class="permalink" href="#IEEE80211_C_FF"><code class="Dv">IEEE80211_C_FF</code></a></dt>
- <dd>Device supports Atheros Fast-Frames.</dd>
- <dt id="IEEE80211_C_TURBOP"><a class="permalink" href="#IEEE80211_C_TURBOP"><code class="Dv">IEEE80211_C_TURBOP</code></a></dt>
- <dd>Device supports Atheros Dynamic Turbo mode.</dd>
- <dt id="IEEE80211_C_IBSS"><a class="permalink" href="#IEEE80211_C_IBSS"><code class="Dv">IEEE80211_C_IBSS</code></a></dt>
- <dd>Device is capable of operating in adhoc/IBSS mode.</dd>
- <dt id="IEEE80211_C_PMGT"><a class="permalink" href="#IEEE80211_C_PMGT"><code class="Dv">IEEE80211_C_PMGT</code></a></dt>
- <dd>Device supports dynamic power-management (aka power save) in station
- mode.</dd>
- <dt id="IEEE80211_C_HOSTAP"><a class="permalink" href="#IEEE80211_C_HOSTAP"><code class="Dv">IEEE80211_C_HOSTAP</code></a></dt>
- <dd>Device is capable of operating as an Access Point in Infrastructure
- mode.</dd>
- <dt id="IEEE80211_C_AHDEMO"><a class="permalink" href="#IEEE80211_C_AHDEMO"><code class="Dv">IEEE80211_C_AHDEMO</code></a></dt>
- <dd>Device is capable of operating in Adhoc Demo mode. In this mode the device
- is used purely to send/receive raw 802.11 frames.</dd>
- <dt id="IEEE80211_C_SWRETRY"><a class="permalink" href="#IEEE80211_C_SWRETRY"><code class="Dv">IEEE80211_C_SWRETRY</code></a></dt>
- <dd>Device supports software retry of transmitted frames.</dd>
- <dt id="IEEE80211_C_TXPMGT"><a class="permalink" href="#IEEE80211_C_TXPMGT"><code class="Dv">IEEE80211_C_TXPMGT</code></a></dt>
- <dd>Device support dynamic transmit power changes on transmitted frames; also
- known as Transmit Power Control (TPC).</dd>
- <dt id="IEEE80211_C_SHSLOT"><a class="permalink" href="#IEEE80211_C_SHSLOT"><code class="Dv">IEEE80211_C_SHSLOT</code></a></dt>
- <dd>Device supports short slot time operation (for 802.11g).</dd>
- <dt id="IEEE80211_C_SHPREAMBLE"><a class="permalink" href="#IEEE80211_C_SHPREAMBLE"><code class="Dv">IEEE80211_C_SHPREAMBLE</code></a></dt>
- <dd>Device supports short preamble operation (for 802.11g).</dd>
- <dt id="IEEE80211_C_MONITOR"><a class="permalink" href="#IEEE80211_C_MONITOR"><code class="Dv">IEEE80211_C_MONITOR</code></a></dt>
- <dd>Device is capable of operating in monitor mode.</dd>
- <dt id="IEEE80211_C_DFS"><a class="permalink" href="#IEEE80211_C_DFS"><code class="Dv">IEEE80211_C_DFS</code></a></dt>
- <dd>Device supports radar detection and/or DFS. DFS protocol support can be
- handled by <code class="Nm">IEEE80211</code> but the device must be
- capable of detecting radar events.</dd>
- <dt id="IEEE80211_C_MBSS"><a class="permalink" href="#IEEE80211_C_MBSS"><code class="Dv">IEEE80211_C_MBSS</code></a></dt>
- <dd>Device is capable of operating in MeshBSS (MBSS) mode (as defined by
- 802.11s Draft 3.0).</dd>
- <dt id="IEEE80211_C_WPA1"><a class="permalink" href="#IEEE80211_C_WPA1"><code class="Dv">IEEE80211_C_WPA1</code></a></dt>
- <dd>Device supports WPA1 operation.</dd>
- <dt id="IEEE80211_C_WPA2"><a class="permalink" href="#IEEE80211_C_WPA2"><code class="Dv">IEEE80211_C_WPA2</code></a></dt>
- <dd>Device supports WPA2/802.11i operation.</dd>
- <dt id="IEEE80211_C_BURST"><a class="permalink" href="#IEEE80211_C_BURST"><code class="Dv">IEEE80211_C_BURST</code></a></dt>
- <dd>Device supports frame bursting.</dd>
- <dt id="IEEE80211_C_WME"><a class="permalink" href="#IEEE80211_C_WME"><code class="Dv">IEEE80211_C_WME</code></a></dt>
- <dd>Device supports WME/WMM operation (at the moment this is mostly support
- for sending and receiving QoS frames with EDCF).</dd>
- <dt id="IEEE80211_C_WDS"><a class="permalink" href="#IEEE80211_C_WDS"><code class="Dv">IEEE80211_C_WDS</code></a></dt>
- <dd>Device supports transmit/receive of 4-address frames.</dd>
- <dt id="IEEE80211_C_BGSCAN"><a class="permalink" href="#IEEE80211_C_BGSCAN"><code class="Dv">IEEE80211_C_BGSCAN</code></a></dt>
- <dd>Device supports background scanning.</dd>
- <dt id="IEEE80211_C_TXFRAG"><a class="permalink" href="#IEEE80211_C_TXFRAG"><code class="Dv">IEEE80211_C_TXFRAG</code></a></dt>
- <dd>Device supports transmit of fragmented 802.11 frames.</dd>
- <dt id="IEEE80211_C_TDMA"><a class="permalink" href="#IEEE80211_C_TDMA"><code class="Dv">IEEE80211_C_TDMA</code></a></dt>
- <dd>Device is capable of operating in TDMA mode.</dd>
-</dl>
-<p class="Pp">The follow general crypto capabilities are defined. In general
- <code class="Nm">IEEE80211</code> will fall-back to software support when a
- device is not capable of hardware acceleration of a cipher. This can be done
- on a per-key basis. <code class="Nm">IEEE80211</code> can also handle
- software <code class="Dv">Michael</code> calculation combined with hardware
- <code class="Dv">AES</code> acceleration.</p>
-<dl class="Bl-tag">
- <dt id="IEEE80211_CRYPTO_WEP"><a class="permalink" href="#IEEE80211_CRYPTO_WEP"><code class="Dv">IEEE80211_CRYPTO_WEP</code></a></dt>
- <dd>Device supports hardware WEP cipher.</dd>
- <dt id="IEEE80211_CRYPTO_TKIP"><a class="permalink" href="#IEEE80211_CRYPTO_TKIP"><code class="Dv">IEEE80211_CRYPTO_TKIP</code></a></dt>
- <dd>Device supports hardware TKIP cipher.</dd>
- <dt id="IEEE80211_CRYPTO_AES_OCB"><a class="permalink" href="#IEEE80211_CRYPTO_AES_OCB"><code class="Dv">IEEE80211_CRYPTO_AES_OCB</code></a></dt>
- <dd>Device supports hardware AES-OCB cipher.</dd>
- <dt id="IEEE80211_CRYPTO_AES_CCM"><a class="permalink" href="#IEEE80211_CRYPTO_AES_CCM"><code class="Dv">IEEE80211_CRYPTO_AES_CCM</code></a></dt>
- <dd>Device supports hardware AES-CCM cipher.</dd>
- <dt id="IEEE80211_CRYPTO_TKIPMIC"><a class="permalink" href="#IEEE80211_CRYPTO_TKIPMIC"><code class="Dv">IEEE80211_CRYPTO_TKIPMIC</code></a></dt>
- <dd>Device supports hardware Michael for use with TKIP.</dd>
- <dt id="IEEE80211_CRYPTO_CKIP"><a class="permalink" href="#IEEE80211_CRYPTO_CKIP"><code class="Dv">IEEE80211_CRYPTO_CKIP</code></a></dt>
- <dd>Devices supports hardware CKIP cipher.</dd>
-</dl>
-<p class="Pp">The follow general 802.11n capabilities are defined. The first
- capabilities are defined exactly as they appear in the 802.11n
- specification. Capabilities beginning with IEEE80211_HTC_AMPDU are used
- solely by the <code class="Nm">IEEE80211</code> layer.</p>
-<dl class="Bl-tag">
- <dt id="IEEE80211_HTCAP_CHWIDTH40"><a class="permalink" href="#IEEE80211_HTCAP_CHWIDTH40"><code class="Dv">IEEE80211_HTCAP_CHWIDTH40</code></a></dt>
- <dd>Device supports 20/40 channel width operation.</dd>
- <dt id="IEEE80211_HTCAP_SMPS_DYNAMIC"><a class="permalink" href="#IEEE80211_HTCAP_SMPS_DYNAMIC"><code class="Dv">IEEE80211_HTCAP_SMPS_DYNAMIC</code></a></dt>
- <dd>Device supports dynamic SM power save operation.</dd>
- <dt id="IEEE80211_HTCAP_SMPS_ENA"><a class="permalink" href="#IEEE80211_HTCAP_SMPS_ENA"><code class="Dv">IEEE80211_HTCAP_SMPS_ENA</code></a></dt>
- <dd>Device supports static SM power save operation.</dd>
- <dt id="IEEE80211_HTCAP_GREENFIELD"><a class="permalink" href="#IEEE80211_HTCAP_GREENFIELD"><code class="Dv">IEEE80211_HTCAP_GREENFIELD</code></a></dt>
- <dd>Device supports Greenfield preamble.</dd>
- <dt id="IEEE80211_HTCAP_SHORTGI20"><a class="permalink" href="#IEEE80211_HTCAP_SHORTGI20"><code class="Dv">IEEE80211_HTCAP_SHORTGI20</code></a></dt>
- <dd>Device supports Short Guard Interval on 20MHz channels.</dd>
- <dt id="IEEE80211_HTCAP_SHORTGI40"><a class="permalink" href="#IEEE80211_HTCAP_SHORTGI40"><code class="Dv">IEEE80211_HTCAP_SHORTGI40</code></a></dt>
- <dd>Device supports Short Guard Interval on 40MHz channels.</dd>
- <dt id="IEEE80211_HTCAP_TXSTBC"><a class="permalink" href="#IEEE80211_HTCAP_TXSTBC"><code class="Dv">IEEE80211_HTCAP_TXSTBC</code></a></dt>
- <dd>Device supports Space Time Block Convolution (STBC) for transmit.</dd>
- <dt id="IEEE80211_HTCAP_RXSTBC_1STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_1STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_1STREAM</code></a></dt>
- <dd>Device supports 1 spatial stream for STBC receive.</dd>
- <dt id="IEEE80211_HTCAP_RXSTBC_2STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_2STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_2STREAM</code></a></dt>
- <dd>Device supports 1-2 spatial streams for STBC receive.</dd>
- <dt id="IEEE80211_HTCAP_RXSTBC_3STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_3STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_3STREAM</code></a></dt>
- <dd>Device supports 1-3 spatial streams for STBC receive.</dd>
- <dt id="IEEE80211_HTCAP_MAXAMSDU_7935"><a class="permalink" href="#IEEE80211_HTCAP_MAXAMSDU_7935"><code class="Dv">IEEE80211_HTCAP_MAXAMSDU_7935</code></a></dt>
- <dd>Device supports A-MSDU frames up to 7935 octets.</dd>
- <dt id="IEEE80211_HTCAP_MAXAMSDU_3839"><a class="permalink" href="#IEEE80211_HTCAP_MAXAMSDU_3839"><code class="Dv">IEEE80211_HTCAP_MAXAMSDU_3839</code></a></dt>
- <dd>Device supports A-MSDU frames up to 3839 octets.</dd>
- <dt id="IEEE80211_HTCAP_DSSSCCK40"><a class="permalink" href="#IEEE80211_HTCAP_DSSSCCK40"><code class="Dv">IEEE80211_HTCAP_DSSSCCK40</code></a></dt>
- <dd>Device supports use of DSSS/CCK on 40MHz channels.</dd>
- <dt id="IEEE80211_HTCAP_PSMP"><a class="permalink" href="#IEEE80211_HTCAP_PSMP"><code class="Dv">IEEE80211_HTCAP_PSMP</code></a></dt>
- <dd>Device supports PSMP.</dd>
- <dt id="IEEE80211_HTCAP_40INTOLERANT"><a class="permalink" href="#IEEE80211_HTCAP_40INTOLERANT"><code class="Dv">IEEE80211_HTCAP_40INTOLERANT</code></a></dt>
- <dd>Device is intolerant of 40MHz wide channel use.</dd>
- <dt id="IEEE80211_HTCAP_LSIGTXOPPROT"><a class="permalink" href="#IEEE80211_HTCAP_LSIGTXOPPROT"><code class="Dv">IEEE80211_HTCAP_LSIGTXOPPROT</code></a></dt>
- <dd>Device supports L-SIG TXOP protection.</dd>
- <dt id="IEEE80211_HTC_AMPDU"><a class="permalink" href="#IEEE80211_HTC_AMPDU"><code class="Dv">IEEE80211_HTC_AMPDU</code></a></dt>
- <dd>Device supports A-MPDU aggregation. Note that any 802.11n compliant device
- must support A-MPDU receive so this implicitly means support for
- <i class="Em">transmit</i> of A-MPDU frames.</dd>
- <dt id="IEEE80211_HTC_AMSDU"><a class="permalink" href="#IEEE80211_HTC_AMSDU"><code class="Dv">IEEE80211_HTC_AMSDU</code></a></dt>
- <dd>Device supports A-MSDU aggregation. Note that any 802.11n compliant device
- must support A-MSDU receive so this implicitly means support for
- <i class="Em">transmit</i> of A-MSDU frames.</dd>
- <dt id="IEEE80211_HTC_HT"><a class="permalink" href="#IEEE80211_HTC_HT"><code class="Dv">IEEE80211_HTC_HT</code></a></dt>
- <dd>Device supports High Throughput (HT) operation. This capability must be
- set to enable 802.11n functionality in
- <code class="Nm">IEEE80211</code>.</dd>
- <dt id="IEEE80211_HTC_SMPS"><a class="permalink" href="#IEEE80211_HTC_SMPS"><code class="Dv">IEEE80211_HTC_SMPS</code></a></dt>
- <dd>Device supports MIMO Power Save operation.</dd>
- <dt id="IEEE80211_HTC_RIFS"><a class="permalink" href="#IEEE80211_HTC_RIFS"><code class="Dv">IEEE80211_HTC_RIFS</code></a></dt>
- <dd>Device supports Reduced Inter Frame Spacing (RIFS).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">ieee80211_amrr(9)</a>,
- <a class="Xr">ieee80211_beacon(9)</a>, <a class="Xr">ieee80211_bmiss(9)</a>,
- <a class="Xr">ieee80211_crypto(9)</a>, <a class="Xr">ieee80211_ddb(9)</a>,
- <a class="Xr">ieee80211_input(9)</a>, <a class="Xr">ieee80211_node(9)</a>,
- <a class="Xr">ieee80211_output(9)</a>, <a class="Xr">ieee80211_proto(9)</a>,
- <a class="Xr">ieee80211_radiotap(9)</a>,
- <a class="Xr">ieee80211_regdomain(9)</a>,
- <a class="Xr">ieee80211_scan(9)</a>, <a class="Xr">ieee80211_vap(9)</a>,
- <a class="Xr">ifnet(9)</a>, <a class="Xr">malloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">IEEE80211</code> series of functions first
- appeared in <span class="Ux">NetBSD 1.5</span>, and were later ported to
- <span class="Ux">FreeBSD 4.6</span>. This man page was updated with the
- information from <span class="Ux">NetBSD</span>
- <code class="Nm">IEEE80211</code> man page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The original <span class="Ux">NetBSD</span>
- <code class="Nm">IEEE80211</code> man page was written by
- <span class="An">Bruce M. Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>&gt; and
- <span class="An">Darron Broad</span>
- &lt;<a class="Mt" href="mailto:darron@kewl.org">darron@kewl.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 24, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_amrr.9 3.html b/static/freebsd/man9/ieee80211_amrr.9 3.html
deleted file mode 100644
index b1c80d53..00000000
--- a/static/freebsd/man9/ieee80211_amrr.9 3.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE8021_AMRR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE8021_AMRR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_amrr</code> &#x2014;
- <span class="Nd">802.11 network driver transmit rate control
- support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_amrr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_init</code>(<var class="Fa">struct
- ieee80211_amrr *</var>, <var class="Fa">struct ieee80211vap *</var>,
- <var class="Fa">int amin</var>, <var class="Fa">int amax</var>,
- <var class="Fa">int interval</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_cleanup</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_amrr *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_setinterval</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_amrr *</var>, <var class="Fa" style="white-space: nowrap;">int
- interval</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_node_init</code>(<var class="Fa">struct
- ieee80211_amrr *</var>, <var class="Fa">struct ieee80211_amrr_node *</var>,
- <var class="Fa">struct ieee80211_node *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_amrr_choose</code>(<var class="Fa">struct
- ieee80211_node *</var>, <var class="Fa">struct ieee80211_amrr_node
- *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_tx_complete</code>(<var class="Fa">struct
- ieee80211_amrr_node *</var>, <var class="Fa">int ok</var>,
- <var class="Fa">int retries</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_amrr_tx_update</code>(<var class="Fa">struct
- ieee80211_amrr_node *</var>, <var class="Fa">int txnct</var>,
- <var class="Fa">int success</var>, <var class="Fa">int retrycnt</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_amrr</code> is an implementation of the
- AMRR transmit rate control algorithm for drivers that use the
- <code class="Nm">net80211</code> software layer. A rate control algorithm is
- responsible for choosing the transmit rate for each frame. To maximize
- throughput algorithms try to use the highest rate that is appropriate for
- the operating conditions. The rate will vary as conditions change; the
- distance between two stations may change, transient noise may be present
- that affects signal quality, etc. <code class="Nm">ieee80211_amrr</code>
- uses very simple information from a driver to do it's job: whether a frame
- was successfully delivered and how many transmit attempts were made. While
- this enables its use with virtually any wireless device it limits it's
- effectiveness--do not expect it to function well in difficult environments
- and/or respond quickly to changing conditions.</p>
-<p class="Pp"><code class="Nm">ieee80211_amrr</code> requires per-vap state and
- per-node state for each station it is to select rates for. The API's are
- designed for drivers to pre-allocate state in the driver-private extension
- areas of each vap and node. For example the <a class="Xr">ral(4)</a> driver
- defines a vap as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct rt2560_vap {
- struct ieee80211vap ral_vap;
- struct ieee80211_beacon_offsets ral_bo;
- struct ieee80211_amrr amrr;
-
- int (*ral_newstate)(struct ieee80211vap *,
- enum ieee80211_state, int);
-};</pre>
-</div>
-<p class="Pp">The <var class="Vt">amrr</var> structure member holds the per-vap
- state for <code class="Nm">ieee80211_amrr</code> and
- <a class="Xr">ral(4)</a> initializes it in the vap create method with:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>ieee80211_amrr_init(&amp;rvp-&gt;amrr, vap,
- IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD,
- IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD,
- 500 /* ms */);</pre>
-</div>
-<p class="Pp">The node is defined as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct rt2560_node {
- struct ieee80211_node ni;
- struct ieee80211_amrr_node amrr;
-};</pre>
-</div>
-<p class="Pp">with initialization done in the driver's
- <var class="Vt">iv_newassoc</var> method:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static void
-rt2560_newassoc(struct ieee80211_node *ni, int isnew)
-{
- struct ieee80211vap *vap = ni-&gt;ni_vap;
-
- ieee80211_amrr_node_init(&amp;RT2560_VAP(vap)-&gt;amrr,
- &amp;RT2560_NODE(ni)-&gt;amrr, ni);
-}</pre>
-</div>
-<p class="Pp" id="ieee80211_amrr_choose">Once
- <code class="Nm">ieee80211_amrr</code> state is setup, transmit rates are
- requested by calling
- <a class="permalink" href="#ieee80211_amrr_choose"><code class="Fn">ieee80211_amrr_choose</code></a>()
- in the transmit path; e.g.:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>tp = &amp;vap-&gt;iv_txparms[ieee80211_chan2mode(ni-&gt;ni_chan)];
-if (IEEE80211_IS_MULTICAST(wh-&gt;i_addr1)) {
- rate = tp-&gt;mcastrate;
-} else if (m0-&gt;m_flags &amp; M_EAPOL) {
- rate = tp-&gt;mgmtrate;
-} else if (tp-&gt;ucastrate != IEEE80211_FIXED_RATE_NONE) {
- rate = tp-&gt;ucastrate;
-} else {
- (void) ieee80211_amrr_choose(ni, &amp;RT2560_NODE(ni)-&gt;amrr);
- rate = ni-&gt;ni_txrate;
-}</pre>
-</div>
-<p class="Pp" id="ieee80211_amrr_choose~2">Note a rate is chosen only for
- unicast data frames when a fixed transmit rate is not configured; the other
- cases are handled with the <code class="Nm">net80211</code> transmit
- parameters. Note also that
- <a class="permalink" href="#ieee80211_amrr_choose~2"><code class="Fn">ieee80211_amrr_choose</code></a>()
- writes the chosen rate in <var class="Vt">ni_txrate</var>; this eliminates
- copying the value as it is exported to user applications so they can display
- the current transmit rate in status.</p>
-<p class="Pp" id="ieee80211_amrr_tx_complete">The remaining work a driver must
- do is feed status back to <code class="Nm">ieee80211_amrr</code> when a
- frame transmit completes using
- <a class="permalink" href="#ieee80211_amrr_tx_complete"><code class="Fn">ieee80211_amrr_tx_complete</code></a>().
- Drivers that poll a device to retrieve statistics can use
- <a class="permalink" href="#ieee80211_amrr_tx_update"><code class="Fn" id="ieee80211_amrr_tx_update">ieee80211_amrr_tx_update</code></a>()
- (instead or in addition).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ieee80211(9)</a>,
- <a class="Xr">ieee80211_output(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_beacon.9 3.html b/static/freebsd/man9/ieee80211_beacon.9 3.html
deleted file mode 100644
index eff2b10e..00000000
--- a/static/freebsd/man9/ieee80211_beacon.9 3.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_BEACON(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_BEACON(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_beacon</code> &#x2014;
- <span class="Nd">802.11 beacon support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">ieee80211_beacon_alloc</code>(<var class="Fa">struct
- ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets
- *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_beacon_update</code>(<var class="Fa">struct
- ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets
- *</var>, <var class="Fa">struct mbuf *</var>, <var class="Fa">int
- mcast</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_beacon_notify</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> software layer provides a
- support framework for drivers that includes a template-based mechanism for
- dynamic update of beacon frames transmit in hostap, adhoc, and mesh
- operating modes. Drivers should use
- <a class="permalink" href="#ieee80211_beacon_alloc"><code class="Fn" id="ieee80211_beacon_alloc">ieee80211_beacon_alloc</code></a>()
- to create an initial beacon frame. The
- <var class="Vt">ieee80211_beacon_offsets</var> structure holds information
- about the beacon contents that is used to optimize updates done with
- <code class="Fn">ieee80211_beacon_update</code>().</p>
-<p class="Pp">Update calls should only be done when something changes that
- affects the contents of the beacon frame. When this happens the
- <code class="Dv">iv_update_beacon</code> method is invoked and a
- driver-supplied routine must do the right thing. For devices that involve
- the host to transmit each beacon frame this work may be as simple as marking
- a bit in the <var class="Vt">ieee80211_beacon_offsets</var> structure:</p>
-<div class="Bd Pp Li">
-<pre>static void
-ath_beacon_update(struct ieee80211vap *vap, int item)
-{
- struct ieee80211_beacon_offsets *bo = &amp;ATH_VAP(vap)-&gt;av_boff;
- setbit(bo-&gt;bo_flags, item);
-}</pre>
-</div>
-<p class="Pp" id="ieee80211_beacon_update">with the
- <a class="permalink" href="#ieee80211_beacon_update"><code class="Fn">ieee80211_beacon_update</code></a>()
- call done before the next beacon is to be sent.</p>
-<p class="Pp">Devices that off-load beacon generation may instead choose to use
- this callback to push updates immediately to the device. Exactly how that is
- accomplished is unspecified. One possibility is to update the beacon frame
- contents and extract the appropriate information element, but other
- scenarios are possible.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MULTI-VAP_BEACON_SCHEDULING"><a class="permalink" href="#MULTI-VAP_BEACON_SCHEDULING">MULTI-VAP
- BEACON SCHEDULING</a></h1>
-<p class="Pp">Drivers that support multiple vaps that can each beacon need to
- consider how to schedule beacon frames. There are two possibilities at the
- moment:
- <a class="permalink" href="#burst"><i class="Em" id="burst">burst</i></a>
- all beacons at TBTT or
- <a class="permalink" href="#stagger"><i class="Em" id="stagger">stagger
- beacons</i></a> over the beacon interval. Bursting beacon frames may result
- in aperiodic delivery that can affect power save operation of associated
- stations. Applying some jitter (e.g. by randomly ordering burst frames) may
- be sufficient to combat this and typically this is not an issue unless
- stations are using aggressive power save techniques such as U-APSD
- (sometimes employed by VoIP phones). Staggering frames requires more
- interrupts and device support that may not be available. Staggering beacon
- frames is usually superior to bursting frames, up to about eight vaps, at
- which point the overhead becomes significant and the channel becomes
- noticeably busy anyway.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ieee80211(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_bmiss.9 3.html b/static/freebsd/man9/ieee80211_bmiss.9 3.html
deleted file mode 100644
index 55b693b8..00000000
--- a/static/freebsd/man9/ieee80211_bmiss.9 3.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_BMISS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_BMISS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_bmiss</code> &#x2014;
- <span class="Nd">802.11 beacon miss support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_beacon_miss</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> software layer provides a
- support framework for drivers that includes handling beacon miss events in
- station mode. Drivers can dispatch beacon miss events that are recognized in
- hardware or <code class="Nm">net80211</code> can detect beacon miss if the
- driver dispatches received beacon frames through the normal receive path.
- Software beacon miss support is especially useful when multiple vaps are
- operating and any hardware beacon miss support is not available (e.g.
- operating as an access point together with one or more station mode
- vaps).</p>
-<p class="Pp" id="ieee80211_beacon_miss">Drivers should dispatch beacon miss
- events recognized in the driver with
- <a class="permalink" href="#ieee80211_beacon_miss"><code class="Fn">ieee80211_beacon_miss</code></a>().
- This causes some number of ProbeRequest frames to be sent to the access
- point to check if the association is still alive. If no response is received
- and roaming mode is set to <code class="Dv">IEEE80211_ROAMING_AUTO</code>
- then <code class="Nm">net80211</code> will try to re-associate and if that
- fails trigger a scan to look for the access point or another suitable AP.
- When the <code class="Nm">net80211</code> state machine is being operated
- manually, e.g. by <a class="Xr">wpa_supplicant(8)</a>, then applications are
- notified of the state change and are responsible for handling the work of
- scanning for a new access point. The number of beacon miss events (without a
- ProbeResponse) is user settable with the
- <code class="Dv">IEEE80211_IOC_BMISSTHRESHOLD</code> request.</p>
-<p class="Pp">Software beacon miss detection is enabled per-vap by setting the
- <code class="Dv">IEEE80211_FEXT_SWBMISS</code> flag. Typically this is done
- when a vap is setup when the
- <code class="Dv">IEEE80211_CLONE_NOBEACONS</code> option is supplied to the
- clone operation. But drivers may also force this when they know they need
- help detecting beacon miss. When beacon miss is detected in software the
- event is dispatched without driver involvement. Note that software beacon
- miss handling is not limited to station mode; it can be used in any
- operating mode where beacons from a peer station are received.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">wpa_supplicant(8)</a>,
- <a class="Xr">ieee80211(9)</a>, <a class="Xr">ieee80211_vap(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_crypto.9 3.html b/static/freebsd/man9/ieee80211_crypto.9 3.html
deleted file mode 100644
index b518feda..00000000
--- a/static/freebsd/man9/ieee80211_crypto.9 3.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_CRYPTO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_CRYPTO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_crypto</code> &#x2014;
- <span class="Nd">802.11 cryptographic support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_crypto_register</code>(<var class="Fa" style="white-space: nowrap;">const
- struct ieee80211_cipher *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_crypto_unregister</code>(<var class="Fa" style="white-space: nowrap;">const
- struct ieee80211_cipher *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_available</code>(<var class="Fa" style="white-space: nowrap;">int
- cipher</var>);</p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_notify_replay_failure</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">const struct ieee80211_frame *</var>,
- <var class="Fa">const struct ieee80211_key *</var>, <var class="Fa">uint64_t
- rsc</var>, <var class="Fa">int tid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_notify_michael_failure</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">const struct ieee80211_frame *</var>,
- <var class="Fa">u_int keyix</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_newkey</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">int cipher</var>, <var class="Fa">int
- flags</var>, <var class="Fa">struct ieee80211_key *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_setkey</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct
- ieee80211_key *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_delkey</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct
- ieee80211_key *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_key_update_begin</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_key_update_end</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_crypto_delglobalkeys</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_crypto_reload_keys</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp">
- <br/>
- <var class="Ft">struct ieee80211_key *</var>
- <br/>
- <code class="Fn">ieee80211_crypto_encap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>);</p>
-<p class="Pp"><var class="Ft">struct ieee80211_key *</var>
- <br/>
- <code class="Fn">ieee80211_crypto_decap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_demic</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">struct ieee80211_key *</var>,
- <var class="Fa">struct mbuf *</var>, <var class="Fa">int force</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_crypto_enmic</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">struct ieee80211_key *</var>,
- <var class="Fa">struct mbuf *</var>, <var class="Fa">int force</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer includes comprehensive
- cryptographic support for 802.11 protocols. Software implementations of
- ciphers required by WPA and 802.11i are provided as well as encap/decap
- processing of 802.11 frames. Software ciphers are written as kernel modules
- and register with the core crypto support. The cryptographic framework
- supports hardware acceleration of ciphers by drivers with automatic
- fall-back to software implementations when a driver is unable to provide
- necessary hardware services.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CRYPTO_CIPHER_MODULES"><a class="permalink" href="#CRYPTO_CIPHER_MODULES">CRYPTO
- CIPHER MODULES</a></h1>
-<p class="Pp"><code class="Nm">net80211</code> cipher modules register their
- services using
- <a class="permalink" href="#ieee80211_crypto_register"><code class="Fn" id="ieee80211_crypto_register">ieee80211_crypto_register</code></a>()
- and supply a template that describes their operation. This
- <var class="Vt">ieee80211_cipher</var> structure defines protocol-related
- state such as the number of bytes of space in the 802.11 header to
- reserve/remove during encap/decap and entry points for setting up keys and
- doing cryptographic operations.</p>
-<p class="Pp">Cipher modules can associate private state to each key through the
- <var class="Vt">wk_private</var> structure member. If state is setup by the
- module it will be called before a key is destroyed so it can reclaim
- resources.</p>
-<p class="Pp" id="ieee80211_notify_replay_failure">Crypto modules can notify the
- system of two events. When a packet replay event is recognized
- <a class="permalink" href="#ieee80211_notify_replay_failure"><code class="Fn">ieee80211_notify_replay_failure</code></a>()
- can be used to signal the event. When a <code class="Dv">TKIP</code> Michael
- failure is detected
- <a class="permalink" href="#ieee80211_notify_michael_failure"><code class="Fn" id="ieee80211_notify_michael_failure">ieee80211_notify_michael_failure</code></a>()
- can be invoked. Drivers may also use these routines to signal events
- detected by the hardware.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CRYPTO_KEY_MANAGEMENT"><a class="permalink" href="#CRYPTO_KEY_MANAGEMENT">CRYPTO
- KEY MANAGEMENT</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer implements a per-vap
- 4-element &#x201C;global key table&#x201D; and a per-station &#x201C;unicast
- key&#x201D; for protocols such as WPA, 802.1x, and 802.11i. The global key
- table is designed to support legacy WEP operation and Multicast/Group keys,
- though some applications also use it to implement WPA in station mode. Keys
- in the global table are identified by a key index in the range 0-3.
- Per-station keys are identified by the MAC address of the station and are
- typically used for unicast PTK bindings.</p>
-<p class="Pp"><code class="Nm">net80211</code> provides
- <a class="Xr">ioctl(2)</a> operations for managing both global and
- per-station keys. Drivers typically do not participate in software key
- management; they are involved only when providing hardware acceleration of
- cryptographic operations.</p>
-<p class="Pp" id="ieee80211_crypto_newkey"><a class="permalink" href="#ieee80211_crypto_newkey"><code class="Fn">ieee80211_crypto_newkey</code></a>()
- is used to allocate a new <code class="Nm">net80211</code> key or
- reconfigure an existing key. The cipher must be specified along with any
- fixed key index. The <code class="Nm">net80211</code> layer will handle
- allocating cipher and driver resources to support the key.</p>
-<p class="Pp" id="ieee80211_crypto_setkey">Once a key is allocated it's contents
- can be set using
- <a class="permalink" href="#ieee80211_crypto_setkey"><code class="Fn">ieee80211_crypto_setkey</code></a>()
- and deleted with
- <a class="permalink" href="#ieee80211_crypto_delkey"><code class="Fn" id="ieee80211_crypto_delkey">ieee80211_crypto_delkey</code></a>()
- (with any cipher and driver resources reclaimed).</p>
-<p class="Pp" id="ieee80211_crypto_delglobalkeys"><a class="permalink" href="#ieee80211_crypto_delglobalkeys"><code class="Fn">ieee80211_crypto_delglobalkeys</code></a>()
- is used to reclaim all keys in the global key table for a vap; it typically
- is used only within the <code class="Nm">net80211</code> layer.</p>
-<p class="Pp" id="ieee80211_crypto_reload_keys"><a class="permalink" href="#ieee80211_crypto_reload_keys"><code class="Fn">ieee80211_crypto_reload_keys</code></a>()
- handles hardware key state reloading from software key state, such as
- required after a suspend/resume cycle.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_CRYPTO_SUPPORT"><a class="permalink" href="#DRIVER_CRYPTO_SUPPORT">DRIVER
- CRYPTO SUPPORT</a></h1>
-<p class="Pp">Drivers identify ciphers they have hardware support for through
- the <var class="Vt">ic_cryptocaps</var> field of the
- <var class="Vt">ieee80211com</var> structure. If hardware support is
- available then a driver should also fill in the
- <code class="Dv">iv_key_alloc</code>, <code class="Dv">iv_key_set</code>,
- and <code class="Dv">iv_key_delete</code> methods of each
- <var class="Vt">ieee80211vap</var> created for use with the device. In
- addition the methods <code class="Dv">iv_key_update_begin</code> and
- <code class="Dv">iv_key_update_end</code> can be setup to handle
- synchronization requirements for updating hardware key state.</p>
-<p class="Pp">When <code class="Nm">net80211</code> allocates a software key and
- the driver can accelerate the cipher operations the
- <code class="Dv">iv_key_alloc</code> method will be invoked. Drivers may
- return a token that is associated with outbound traffic (for use in
- encrypting frames). Otherwise, e.g. if hardware resources are not available,
- the driver will not return a token and <code class="Nm">net80211</code> will
- arrange to do the work in software and pass frames to the driver that are
- already prepared for transmission.</p>
-<p class="Pp">For receive, drivers mark frames with the
- <code class="Dv">M_WEP</code> mbuf flag to indicate the hardware has
- decrypted the payload. If frames have the
- <code class="Dv">IEEE80211_FC1_PROTECTED</code> bit marked in their 802.11
- header and are not tagged with <code class="Dv">M_WEP</code> then decryption
- is done in software. For more complicated scenarios the software key state
- is consulted; e.g. to decide if Michael verification needs to be done in
- software after the hardware has handled TKIP decryption.</p>
-<p class="Pp" id="ieee80211_key_update_begin">Drivers that manage complicated
- key data structures, e.g. faulting software keys into a hardware key cache,
- can safely manipulate software key state by bracketing their work with calls
- to
- <a class="permalink" href="#ieee80211_key_update_begin"><code class="Fn">ieee80211_key_update_begin</code></a>()
- and
- <a class="permalink" href="#ieee80211_key_update_end"><code class="Fn" id="ieee80211_key_update_end">ieee80211_key_update_end</code></a>().
- These calls also synchronize hardware key state update when receive traffic
- is active.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">wlan_ccmp(4)</a>,
- <a class="Xr">wlan_tkip(4)</a>, <a class="Xr">wlan_wep(4)</a>,
- <a class="Xr">ieee80211(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 29, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_ddb.9 4.html b/static/freebsd/man9/ieee80211_ddb.9 4.html
deleted file mode 100644
index 7b99741f..00000000
--- a/static/freebsd/man9/ieee80211_ddb.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_DDB(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_DDB(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_ddb</code> &#x2014;
- <span class="Nd">802.11 ddb support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<div class="Bd"><code class="Cd">options DDB</code></div>
-<div class="Bd Pp"><code class="Cd">show vap [addr]</code>
-<br/>
-<code class="Cd">show all vaps</code>
-<br/>
-<code class="Cd">show com [addr]</code>
-<br/>
-<code class="Cd">show sta [addr]</code>
-<br/>
-<code class="Cd">show statab [addr]</code>
-<br/>
-<code class="Cd">show mesh [addr]</code></div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer includes
- <a class="Xr">ddb(4)</a> support for displaying important data structures.
- This is especially important because wireless applications are often built
- for embedded environments where cross-machine or post-mortem debugging
- facilities like <a class="Xr">kgdb(1)</a>
- (<span class="Pa">ports/devel/gdb</span>) are infeasible.</p>
-<p class="Pp">The most commonly used command is</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>show all vaps/a</pre>
-</div>
-<p class="Pp">which dumps the contents of all
- <var class="Vt">ieee80211vap</var>, <var class="Vt">ieee80211com</var>, and
- <var class="Vt">ieee80211_node</var> data structures in the system.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">ieee80211(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_input.9 3.html b/static/freebsd/man9/ieee80211_input.9 3.html
deleted file mode 100644
index e0ded463..00000000
--- a/static/freebsd/man9/ieee80211_input.9 3.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_INPUT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_INPUT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_input</code> &#x2014;
- <span class="Nd">software 802.11 stack input functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_input</code>(<var class="Fa">struct ieee80211_node
- *</var>, <var class="Fa">struct mbuf *</var>, <var class="Fa">int
- rssi</var>, <var class="Fa">int noise</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_input_all</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">struct mbuf *</var>,
- <var class="Fa">int rssi</var>, <var class="Fa">int noise</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11
- device drivers requires that receive processing be single-threaded.
- Typically this is done using a dedicated driver
- <a class="Xr">taskqueue(9)</a> thread.
- <a class="permalink" href="#ieee80211_input"><code class="Fn" id="ieee80211_input">ieee80211_input</code></a>()
- and
- <a class="permalink" href="#ieee80211_input_all"><code class="Fn" id="ieee80211_input_all">ieee80211_input_all</code></a>()
- process received 802.11 frames and are designed for use in that context;
- e.g. no driver locks may be held.</p>
-<p class="Pp">The frame passed up in the <var class="Vt">mbuf</var> must have
- the 802.11 protocol header at the front; all device-specific information
- and/or PLCP must be removed. Any CRC must be stripped from the end of the
- frame. The 802.11 protocol header should be 32-bit aligned for optimal
- performance but receive processing does not require it. If the frame holds a
- payload and that is not aligned to a 32-bit boundary then the payload will
- be re-aligned so that it is suitable for processing by protocols such as
- <a class="Xr">ip(4)</a>.</p>
-<p class="Pp">If a device (such as <a class="Xr">ath(4)</a>) inserts padding
- after the 802.11 header to align the payload to a 32-bit boundary the
- <code class="Dv">IEEE80211_C_DATAPAD</code> capability must be set.
- Otherwise header and payload are assumed contiguous in the mbuf chain.</p>
-<p class="Pp">If a received frame must pass through the A-MPDU receive reorder
- buffer then the mbuf must be marked with the <code class="Dv">M_AMPDU</code>
- flag. Note that for the moment this is required of all frames received from
- a station and TID where a Block ACK stream is active, not just A-MPDU
- aggregates. It is sufficient to check for
- <code class="Dv">IEEE80211_NODE_HT</code> in the
- <var class="Vt">ni_flags</var> of the station's node table entry, any frames
- that do not require reorder processing will be dispatched with only minimal
- overhead.</p>
-<p class="Pp">The <var class="Vt">rssi</var> parameter is the Receive Signal
- Strength Indication of the frame measured in 0.5dBm units relative to the
- noise floor. The <var class="Vt">noise</var> parameter is the best
- approximation of the noise floor in dBm units at the time the frame was
- received. RSSI and noise are used by the <code class="Nm">net80211</code>
- layer to make scanning and roaming decisions in station mode and to do auto
- channel selection for hostap and similar modes. Otherwise the values are
- made available to user applications (with the rssi presented as a filtered
- average over the last ten values and the noise floor the last reported
- value).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ieee80211(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_node.9 3.html b/static/freebsd/man9/ieee80211_node.9 3.html
deleted file mode 100644
index 5f8c677e..00000000
--- a/static/freebsd/man9/ieee80211_node.9 3.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_NODE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_NODE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_node</code> &#x2014;
- <span class="Nd">software 802.11 stack node management functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct ieee80211_node *</var>
- <br/>
- <code class="Fn">ieee80211_find_rxnode</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min
- *</var>);</p>
-<p class="Pp"><var class="Ft">struct ieee80211_node *</var>
- <br/>
- <code class="Fn">ieee80211_find_rxnode_withkey</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min
- *</var>, <var class="Fa">ieee80211_keyix</var>);</p>
-<p class="Pp"><var class="Ft">struct ieee80211_node *</var>
- <br/>
- <code class="Fn">ieee80211_ref_node</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_node *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_free_node</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_node *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_iterate_nodes</code>(<var class="Fa">struct
- ieee80211_node_table *</var>, <var class="Fa">ieee80211_iter_func *f</var>,
- <var class="Fa">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_dump_nodes</code>(<var class="Fa">struct
- ieee80211_node_table *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_dump_node</code>(<var class="Fa">struct
- ieee80211_node *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11
- device drivers maintains a database of peer stations called the &#x201C;node
- table&#x201D; in the <var class="Vt">ic_sta</var> entry of the
- <var class="Vt">ieee80211com</var> structure. Station mode vaps create an
- entry for the access point the station is associated to. AP mode vaps create
- entries for associated stations. Adhoc and mesh mode vaps create entries for
- neighbor stations. WDS mode vaps create an entry for the peer station.
- Stations for all vaps reside in the same table; each node entry has a
- <var class="Vt">ni_vap</var> field that identifies the vap that created it.
- In some instances an entry is used by multiple vaps (e.g. for dynamic WDS a
- station associated to an ap vap may also be the peer of a WDS vap).</p>
-<p class="Pp" id="ieee80211_ref_node">Node table entries are reference counted.
- That is, there is a count of all long term references that determines when
- an entry may be reclaimed. References are held by every in-flight frame sent
- to a station to ensure the entry is not reclaimed while the frame is queued
- or otherwise held by a driver. Routines that lookup a table entry return a
- &#x201C;held reference&#x201D; (i.e. a pointer to a table entry with the
- reference count incremented). The
- <a class="permalink" href="#ieee80211_ref_node"><code class="Fn">ieee80211_ref_node</code></a>()
- call explicitly increments the reference count of a node.
- <a class="permalink" href="#ieee80211_free_node"><code class="Fn" id="ieee80211_free_node">ieee80211_free_node</code></a>()
- decrements the reference count of a node and if the count goes to zero
- reclaims the table entry.</p>
-<p class="Pp">The station table and its entries are exposed to drivers in
- several ways. Each frame transmitted to a station includes a reference to
- the associated node in the <var class="Vt">m_pkthdr.rcvif</var> field. This
- reference must be reclaimed by the driver when transmit processing is done.
- For each frame received the driver must lookup the table entry to use in
- dispatching the frame &#x201C;up the stack&#x201D;. This lookup implicitly
- obtains a reference to the table entry and the driver must reclaim the
- reference when frame processing is completed. Otherwise drivers frequently
- inspect the contents of the <var class="Vt">iv_bss</var> node when handling
- state machine changes as important information is maintained in the data
- structure.</p>
-<p class="Pp" id="ieee80211_iterate_nodes">The node table is opaque to drivers.
- Entries may be looked up using one of the pre-defined API's or the
- <a class="permalink" href="#ieee80211_iterate_nodes"><code class="Fn">ieee80211_iterate_nodes</code></a>()
- call may be used to iterate through all entries to do per-node processing or
- implement some non-standard search mechanism. Note that
- <code class="Fn">ieee80211_iterate_nodes</code>() is single-threaded
- per-device and the effort processing involved is fairly substantial so it
- should be used carefully.</p>
-<p class="Pp" id="ieee80211_dump_node">Two routines are provided to print the
- contents of nodes to the console for debugging:
- <a class="permalink" href="#ieee80211_dump_node"><code class="Fn">ieee80211_dump_node</code></a>()
- displays the contents of a single node while
- <a class="permalink" href="#ieee80211_dump_nodes"><code class="Fn" id="ieee80211_dump_nodes">ieee80211_dump_nodes</code></a>()
- displays the contents of the specified node table. Nodes may also be
- displayed using <a class="Xr">ddb(4)</a> with the &#x201C;show node&#x201D;
- directive and the station node table can be displayed with &#x201C;show
- statab&#x201D;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_PRIVATE_STATE"><a class="permalink" href="#DRIVER_PRIVATE_STATE">DRIVER
- PRIVATE STATE</a></h1>
-<p class="Pp">Node data structures may be extended by the driver to include
- driver-private state. This is done by overriding the
- <var class="Vt">ic_node_alloc</var> method used to allocate a node table
- entry. The driver method must allocate a structure that is an extension of
- the <var class="Vt">ieee80211_node</var> structure. For example the
- <a class="Xr">iwi(4)</a> driver defines a private node structure as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct iwi_node {
- struct ieee80211_node in_node;
- int in_station;
-};</pre>
-</div>
-<p class="Pp">and then provides a private allocation routine that does this:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static struct ieee80211_node *
-iwi_node_alloc(struct ieee80211vap *vap,
- const uint8_t mac[IEEE80211_ADDR_LEN])
-{
- struct iwi_node *in;
-
- in = malloc(sizeof(struct iwi_node), M_80211_NODE,
- M_NOWAIT | M_ZERO);
- if (in == NULL)
- return NULL;
- in-&gt;in_station = -1;
- return &amp;in-&gt;in_node;
-}</pre>
-</div>
-<p class="Pp">Note that when reclaiming a node allocated by the driver the
- &#x201C;parent method&#x201D; must be called to ensure
- <code class="Nm">net80211</code> state is reclaimed; for example:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static void
-iwi_node_free(struct ieee80211_node *ni)
-{
- struct ieee80211com *ic = ni-&gt;ni_ic;
- struct iwi_softc *sc = ic-&gt;ic_ifp-&gt;if_softc;
- struct iwi_node *in = (struct iwi_node *)ni;
-
- if (in-&gt;in_station != -1)
- free_unr(sc-&gt;sc_unr, in-&gt;in_station);
- sc-&gt;sc_node_free(ni); /* invoke net80211 free handler */
-}</pre>
-</div>
-<p class="Pp">Beware that care must be taken to avoid holding references that
- might cause nodes from being reclaimed. <code class="Nm">net80211</code>
- will reclaim a node when the last reference is reclaimed in its data
- structures. However if a driver holds additional references then
- <code class="Nm">net80211</code> will not recognize this and table entries
- will not be reclaimed. Such references should not be needed if the driver
- overrides the <var class="Vt">ic_node_cleanup</var> and/or
- <var class="Vt">ic_node_free</var> methods.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="KEY_TABLE_SUPPORT"><a class="permalink" href="#KEY_TABLE_SUPPORT">KEY
- TABLE SUPPORT</a></h1>
-<p class="Pp">Node table lookups are typically done using a hash of the
- stations' mac address. When receiving frames this is sufficient to find the
- node table entry for the transmitter. But some devices also identify the
- sending station in the device state received with each frame and this data
- can be used to optimize lookups on receive using a companion table called
- the &#x201C;keytab&#x201D;. This table records a separate node table
- reference that can be fetched without any locking using the table index.
- This logic is handled with the
- <a class="permalink" href="#ieee80211_find_rxnode_withkey"><code class="Fn" id="ieee80211_find_rxnode_withkey">ieee80211_find_rxnode_withkey</code></a>()
- call: if a keytab entry is found using the specified index then it is
- returned directly; otherwise a normal lookup is done and the keytab entry is
- written using the specified index. If the specified index is
- <code class="Dv">IEEE80211_KEYIX_NONE</code> then a normal lookup is done
- without a table update.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">ieee80211(9)</a>,
- <a class="Xr">ieee80211_proto(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 2, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_output.9 3.html b/static/freebsd/man9/ieee80211_output.9 3.html
deleted file mode 100644
index 62d80efc..00000000
--- a/static/freebsd/man9/ieee80211_output.9 3.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_OUTPUT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_OUTPUT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_output</code> &#x2014;
- <span class="Nd">software 802.11 stack output functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">M_WME_GETAC</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">M_SEQNO_GET</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>);</p>
-<p class="Pp"><var class="Ft">struct ieee80211_key *</var>
- <br/>
- <code class="Fn">ieee80211_crypto_encap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_process_callback</code>(<var class="Fa">struct
- ieee80211_node *</var>, <var class="Fa">struct mbuf *</var>,
- <var class="Fa">int</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11
- device drivers handles most of the work required to transmit frames. Drivers
- usually receive fully-encapsulated 802.11 frames that have been classified
- and assigned a transmit priority; all that is left is to do crypto
- encapsulation, prepare any hardware-specific state, and push the packet out
- to the device. Outbound frames are either generated by the
- <code class="Nm">net80211</code> layer (e.g. management frames) or are
- passed down from upper layers through the <a class="Xr">ifnet(9)</a>
- transmit queue. Data frames passed down for transmit flow through
- <code class="Nm">net80211</code> which handles aggregation, 802.11
- encapsulation, and then dispatches the frames to the driver through it's
- transmit queue.</p>
-<p class="Pp">There are two control paths by which frames reach a driver for
- transmit. Data packets are queued to the device's
- <var class="Vt">if_snd</var> queue and the driver's
- <var class="Vt">if_start</var> method is called. Other frames are passed
- down using the <var class="Vt">ic_raw_xmit</var> method without queueing
- (unless done by the driver). The raw transmit path may include data frames
- from user applications that inject them through <a class="Xr">bpf(4)</a> and
- NullData frames generated by <code class="Nm">net80211</code> to probe for
- idle stations (when operating as an access point).</p>
-<p class="Pp"><code class="Nm">net80211</code> handles all state-related
- bookkeeping and management for the handling of data frames. Data frames are
- only transmit for a vap in the <code class="Dv">IEEE80211_S_RUN</code>
- state; there is no need, for example, to check for frames sent down when CAC
- or CSA is active. Similarly, <code class="Nm">net80211</code> handles
- activities such as background scanning and power save mode, frames will not
- be sent to a driver unless it is operating on the BSS channel with
- &#x201C;full power&#x201D;.</p>
-<p class="Pp" id="ieee80211_free_node">All frames passed to a driver for
- transmit hold a reference to a node table entry in the
- <var class="Vt">m_pkthdr.rcvif</var> field. The node is associated with the
- frame destination. Typically it is the receiver's entry but in some
- situations it may be a placeholder entry or the &#x201C;next hop
- station&#x201D; (such as in a mesh network). In all cases the reference must
- be reclaimed with
- <a class="permalink" href="#ieee80211_free_node"><code class="Fn">ieee80211_free_node</code></a>()
- when the transmit work is completed. The rule to remember is:
- <code class="Nm">net80211</code> passes responsibility for the
- <var class="Vt">mbuf</var> and &#x201C;node reference&#x201D; to the driver
- with each frame it hands off for transmit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PACKET_CLASSIFICATION"><a class="permalink" href="#PACKET_CLASSIFICATION">PACKET
- CLASSIFICATION</a></h1>
-<p class="Pp">All frames passed by <code class="Nm">net80211</code> for transmit
- are assigned a priority based on any vlan tag assigned to the receiving
- station and/or any Diffserv setting in an IP or IPv6 header. If both vlan
- and Diffserv priority are present the higher of the two is used. If WME/WMM
- is being used then any ACM policy (in station mode) is also enforced. The
- resulting AC is attached to the mbuf and may be read back using the
- <a class="permalink" href="#M_WME_GETAC"><code class="Fn" id="M_WME_GETAC">M_WME_GETAC</code></a>()
- macro.</p>
-<p class="Pp">PAE/EAPOL frames are tagged with an
- <code class="Dv">M_EAPOL</code> mbuf flag; drivers should transmit them with
- care, usually by using the transmit rate for management frames.
- Multicast/broadcast frames are marked with the
- <code class="Dv">M_MCAST</code> mbuf flag. Frames coming out of a station's
- power save queue and that have more frames immediately following are marked
- with the <code class="Dv">M_MORE_DATA</code> mbuf flag. Such frames will be
- queued consecutively in the driver's <var class="Vt">if_snd</var> queue and
- drivers should preserve the ordering when passing them to the device.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FRAGMENTED_FRAMES"><a class="permalink" href="#FRAGMENTED_FRAMES">FRAGMENTED
- FRAMES</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer will fragment data
- frames according to the setting of <var class="Vt">iv_fragthreshold</var> if
- a driver marks the <code class="Dv">IEEE80211_C_TXFRAG</code> capability.
- Fragmented frames are placed in the devices transmit queue with the
- fragments chained together with <var class="Vt">m_nextpkt</var>. Each frame
- is marked with the <code class="Dv">M_FRAG</code> mbuf flag, and the first
- and last are marked with <code class="Dv">M_FIRSTFRAG</code> and
- <code class="Dv">M_LASTFRAG</code>, respectively. Drivers are expected to
- process all fragments or none.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="TRANSMIT_CALLBACKS"><a class="permalink" href="#TRANSMIT_CALLBACKS">TRANSMIT
- CALLBACKS</a></h1>
-<p class="Pp">Frames sent by <code class="Nm">net80211</code> may be tagged with
- the <code class="Dv">M_TXCB</code> mbuf flag to indicate a callback should
- be done when their transmission completes. The callback is done using
- <a class="permalink" href="#ieee80211_process_callback"><code class="Fn" id="ieee80211_process_callback">ieee80211_process_callback</code></a>()
- with the last parameter set to a non-zero value if an error occurred and
- zero otherwise. Note <code class="Nm">net80211</code> understands that
- drivers may be incapable of determining status; a device may not report if
- an ACK frame is received and/or a device may queue transmit requests in its
- hardware and only report status on whether the frame was successfully
- queued.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bpf(4)</a>, <a class="Xr">ieee80211(9)</a>,
- <a class="Xr">ifnet(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 29, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_proto.9 3.html b/static/freebsd/man9/ieee80211_proto.9 3.html
deleted file mode 100644
index 921b1d66..00000000
--- a/static/freebsd/man9/ieee80211_proto.9 3.html
+++ /dev/null
@@ -1,198 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_PROTO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_PROTO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_proto</code> &#x2014;
- <span class="Nd">802.11 state machine support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_start_all</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_stop_all</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_suspend_all</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_resume_all</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><code class="Dv">enum ieee80211_state</code>;
- <br/>
- <var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_new_state</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">enum
- ieee80211_state</var>,
- <var class="Fa" style="white-space: nowrap;">int</var>);</p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_wait_for_parent</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11
- device drivers uses a state machine to control operation of vaps. These
- state machines vary according to the vap operating mode. Station mode state
- machines follow the 802.11 MLME states in the protocol specification. Other
- state machines are simpler and reflect operational work such as scanning for
- a BSS or automatically selecting a channel to operate on. When multiple vaps
- are operational the state machines are used to coordinate operation such as
- choosing a channel. The state machine mechanism also serves to bind the
- <code class="Nm">net80211</code> layer to a driver; this is described more
- below.</p>
-<p class="Pp">The following states are defined for state machines:</p>
-<dl class="Bl-tag">
- <dt id="IEEE80211_S_INIT"><a class="permalink" href="#IEEE80211_S_INIT"><code class="Dv">IEEE80211_S_INIT</code></a></dt>
- <dd>Default/initial state. A vap in this state should not hold any dynamic
- state (e.g. entries for associated stations in the node table). The driver
- must quiesce the hardware; e.g. there should be no interrupts firing.</dd>
- <dt id="IEEE80211_S_SCAN"><a class="permalink" href="#IEEE80211_S_SCAN"><code class="Dv">IEEE80211_S_SCAN</code></a></dt>
- <dd>Scanning for a BSS or choosing a channel to operate on. Note that scanning
- can also take place in other states (e.g. when background scanning is
- active); this state is entered when initially bringing a vap to an
- operational state or after an event such as a beacon miss (in station
- mode).</dd>
- <dt id="IEEE80211_S_AUTH"><a class="permalink" href="#IEEE80211_S_AUTH"><code class="Dv">IEEE80211_S_AUTH</code></a></dt>
- <dd>Authenticating to an access point (in station mode). This state is
- normally reached from <code class="Dv">IEEE80211_S_SCAN</code> after
- selecting a BSS, but may also be reached from
- <code class="Dv">IEEE80211_S_ASSOC</code> or
- <code class="Dv">IEEE80211_S_RUN</code> if the authentication handshake
- fails.</dd>
- <dt id="IEEE80211_S_ASSOC"><a class="permalink" href="#IEEE80211_S_ASSOC"><code class="Dv">IEEE80211_S_ASSOC</code></a></dt>
- <dd>Associating to an access point (in station mode). This state is reached
- from <code class="Dv">IEEE80211_S_AUTH</code> after successfully
- authenticating or from <code class="Dv">IEEE80211_S_RUN</code> if a
- DisAssoc frame is received.</dd>
- <dt id="IEEE80211_S_CAC"><a class="permalink" href="#IEEE80211_S_CAC"><code class="Dv">IEEE80211_S_CAC</code></a></dt>
- <dd>Doing Channel Availability Check (CAC). This state is entered only when
- DFS is enabled and the channel selected for operation requires CAC.</dd>
- <dt id="IEEE80211_S_RUN"><a class="permalink" href="#IEEE80211_S_RUN"><code class="Dv">IEEE80211_S_RUN</code></a></dt>
- <dd>Operational. In this state a vap can transmit data frames, accept requests
- for stations associating, etc. Beware that data traffic is also gated by
- whether the associated &#x201C;port&#x201D; is authorized. When
- WPA/802.11i/802.1x is operational authorization may happen separately;
- e.g. in station mode <a class="Xr">wpa_supplicant(8)</a> must complete the
- handshakes and plumb the necessary keys before a port is authorized. In
- this state a BSS is operational and associated state is valid and may be
- used; e.g. <var class="Vt">ic_bss</var> and
- <var class="Vt">ic_bsschan</var> are guaranteed to be usable.</dd>
- <dt id="IEEE80211_S_CSA"><a class="permalink" href="#IEEE80211_S_CSA"><code class="Dv">IEEE80211_S_CSA</code></a></dt>
- <dd>Channel Switch Announcement (CSA) is pending. This state is reached only
- from <code class="Dv">IEEE80211_S_RUN</code> when either a CSA is received
- from an access point (in station mode) or the local station is preparing
- to change channel. In this state traffic may be muted depending on the
- Mute setting in the CSA.</dd>
- <dt id="IEEE80211_S_SLEEP"><a class="permalink" href="#IEEE80211_S_SLEEP"><code class="Dv">IEEE80211_S_SLEEP</code></a></dt>
- <dd>Asleep to save power (in station mode). This state is reached only from
- <code class="Dv">IEEE80211_S_RUN</code> when power save operation is
- enabled and the local station is deemed sufficiently idle to enter low
- power mode.</dd>
-</dl>
-<p class="Pp">Note that states are ordered (as shown above); e.g. a vap must be
- in the <code class="Dv">IEEE80211_S_RUN</code> or &#x201C;greater&#x201D;
- before it can transmit frames. Certain <code class="Nm">net80211</code> data
- are valid only in certain states; e.g. the <var class="Vt">iv_bsschan</var>
- that specifies the channel for the operating BSS should never be used except
- in <code class="Dv">IEEE80211_S_RUN</code> or greater.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STATE_CHANGES"><a class="permalink" href="#STATE_CHANGES">STATE
- CHANGES</a></h1>
-<p class="Pp">State machine changes are typically handled internal to the
- <code class="Nm">net80211</code> layer in response to
- <a class="Xr">ioctl(2)</a> requests, received frames, or external events
- such as a beacon miss. The
- <a class="permalink" href="#ieee80211_new_state"><code class="Fn" id="ieee80211_new_state">ieee80211_new_state</code></a>()
- function is used to initiate a state machine change on a vap. The new state
- and an optional argument are supplied. The request is initially processed to
- handle coordination of multiple vaps. For example, only one vap at a time
- can be scanning, if multiple vaps request a change to
- <code class="Dv">IEEE80211_S_SCAN</code> the first will be permitted to run
- and the others will be
- <a class="permalink" href="#deferred"><i class="Em" id="deferred">deferred</i></a>
- until the scan operation completes at which time the selected channel will
- be adopted. Similarly <code class="Nm">net80211</code> handles coordination
- of combinations of vaps such as an AP and station vap where the station may
- need to roam to follow the AP it is associated to (dragging along the AP vap
- to the new channel). Another important coordination is the handling of
- <code class="Dv">IEEE80211_S_CAC</code> and
- <code class="Dv">IEEE80211_S_CSA</code>. No more than one vap can ever be
- actively changing state at a time. In fact <code class="Nm">net80211</code>
- single-threads the state machine logic in a dedicated
- <a class="Xr">taskqueue(9)</a> thread that is also used to synchronize work
- such as scanning and beacon miss handling.</p>
-<p class="Pp">After multi-vap scheduling/coordination is done the per-vap
- <var class="Vt">iv_newstate</var> method is called to carry out the state
- change work. Drivers use this entry to setup private state and then dispatch
- the call to the <code class="Nm">net80211</code> layer using the previously
- defined method pointer (in OOP-parlance they call the &#x201C;super
- method&#x201D; ).</p>
-<p class="Pp"><code class="Nm">net80211</code> handles two state changes
- specially. On transition to <code class="Dv">IEEE80211_S_RUN</code> the
- <code class="Dv">IFF_DRV_OACTIVE</code> bit on the vap's transmit queue is
- cleared so traffic can flow. On transition to
- <code class="Dv">IEEE80211_S_INIT</code> any state in the scan cache
- associated with the vap is flushed and any frames pending on the transmit
- queue are flushed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_INTEGRATION"><a class="permalink" href="#DRIVER_INTEGRATION">DRIVER
- INTEGRATION</a></h1>
-<p class="Pp">Drivers are expected to override the
- <var class="Vt">iv_newstate</var> method to interpose their own code and
- handle setup work required by state changes. Otherwise drivers must call
- <a class="permalink" href="#ieee80211_start_all"><code class="Fn" id="ieee80211_start_all">ieee80211_start_all</code></a>()
- in response to being marked up through an
- <code class="Dv">SIOCSIFFLAGS</code> ioctl request and they should use
- <a class="permalink" href="#ieee80211_suspend_all"><code class="Fn" id="ieee80211_suspend_all">ieee80211_suspend_all</code></a>()
- and
- <a class="permalink" href="#ieee80211_resume_all"><code class="Fn" id="ieee80211_resume_all">ieee80211_resume_all</code></a>()
- to implement suspend/resume support.</p>
-<p class="Pp" id="ieee80211_stop_all">There is also an
- <a class="permalink" href="#ieee80211_stop_all"><code class="Fn">ieee80211_stop_all</code></a>()
- call to force all vaps to an <code class="Dv">IEEE80211_S_INIT</code> state
- but this should not be needed by a driver; control is usually handled by
- <code class="Nm">net80211</code> or, in the case of card eject or vap
- destroy, work will be initiated outside the driver.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">wpa_supplicant(8)</a>,
- <a class="Xr">ieee80211(9)</a>, <a class="Xr">ifnet(9)</a>,
- <a class="Xr">taskqueue(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The state machine concept was part of the original
- <code class="Nm">ieee80211</code> code base that first appeared in
- <span class="Ux">NetBSD 1.5</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_radiotap.9 3.html b/static/freebsd/man9/ieee80211_radiotap.9 3.html
deleted file mode 100644
index eb4f76f8..00000000
--- a/static/freebsd/man9/ieee80211_radiotap.9 3.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_RADIOTAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_RADIOTAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_radiotap</code> &#x2014;
- <span class="Nd">802.11 device packet capture support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_radiotap_attach</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">struct ieee80211_radiotap_header
- *th</var>, <var class="Fa">int tlen</var>, <var class="Fa">uint32_t
- tx_radiotap</var>, <var class="Fa">struct ieee80211_radiotap_header
- *rh</var>, <var class="Fa">int rlen</var>, <var class="Fa">uint32_t
- rx_radiotap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_radiotap_active_vap</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_radiotap_active</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_radiotap_tx</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct
- mbuf *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> layer used by 802.11 drivers
- includes support for a device-independent packet capture format called
- <code class="Nm">radiotap</code> that is understood by tools such as
- <a class="Xr">tcpdump(1)</a>. This facility is designed for capturing 802.11
- traffic, including information that is not part of the normal 802.11 frame
- structure.</p>
-<p class="Pp" id="ieee80211_radiotap_attach">Radiotap was designed to balance
- the desire for a hardware-independent, extensible capture format against the
- need to conserve CPU and memory bandwidth on embedded systems. These
- considerations led to a format consisting of a standard preamble followed by
- an extensible bitmap indicating the presence of optional capture fields. A
- <code class="Nm">net80211</code> device driver supporting
- <var class="Vt">radiotap</var> defines two packed structures that it shares
- with <code class="Nm">net80211</code>. These structures embed an instance of
- a <var class="Vt">ieee80211_radiotap_header</var> structure at the
- beginning, with subsequent fields in the appropriate order, and macros to
- set the bits of the <var class="Va">it_present</var> bitmap to indicate
- which fields exist and are filled in by the driver. This information is then
- supplied through the
- <a class="permalink" href="#ieee80211_radiotap_attach"><code class="Fn">ieee80211_radiotap_attach</code></a>()
- call after a successful
- <a class="permalink" href="#ieee80211_ifattach"><code class="Fn" id="ieee80211_ifattach">ieee80211_ifattach</code></a>()
- request.</p>
-<p class="Pp" id="ieee80211_radiotap_active_vap">With radiotap setup, drivers
- just need to fill in per-packet capture state for frames sent/received and
- dispatch capture state in the transmit path (since control is not returned
- to the <code class="Nm">net80211</code> layer before the packet is handed to
- the device). To minimize overhead this work should be done only when one or
- more processes are actively capturing data; this is checked with one of
- <a class="permalink" href="#ieee80211_radiotap_active_vap"><code class="Fn">ieee80211_radiotap_active_vap</code></a>()
- and
- <a class="permalink" href="#ieee80211_radiotap_active"><code class="Fn" id="ieee80211_radiotap_active">ieee80211_radiotap_active</code></a>().
- In the transmit path capture work looks like this:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>if (ieee80211_radiotap_active_vap(vap)) {
- ... /* record transmit state */
- ieee80211_radiotap_tx(vap, m); /* capture transmit event */
-}</pre>
-</div>
-<p class="Pp">While in the receive path capture is handled in
- <code class="Nm">net80211</code> but state must be captured before
- dispatching a frame:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>if (ieee80211_radiotap_active(ic)) {
- ... /* record receive state */
-}
-...
-ieee80211_input(...); /* packet capture handled in net80211 */</pre>
-</div>
-<p class="Pp">The following fields are defined for
- <var class="Vt">radiotap</var>, in the order in which they should appear in
- the buffer supplied to <code class="Nm">net80211</code>.</p>
-<dl class="Bl-tag">
- <dt id="IEEE80211_RADIOTAP_TSFT"><a class="permalink" href="#IEEE80211_RADIOTAP_TSFT"><code class="Dv">IEEE80211_RADIOTAP_TSFT</code></a></dt>
- <dd>This field contains the unsigned 64-bit value, in microseconds, of the
- MAC's 802.11 Time Synchronization Function (TSF). In theory, for each
- received frame, this value is recorded when the first bit of the MPDU
- arrived at the MAC. In practice, hardware snapshots the TSF otherwise and
- one cannot assume this data is accurate without driver adjustment.</dd>
- <dt id="IEEE80211_RADIOTAP_FLAGS"><a class="permalink" href="#IEEE80211_RADIOTAP_FLAGS"><code class="Dv">IEEE80211_RADIOTAP_FLAGS</code></a></dt>
- <dd>This field contains a single unsigned 8-bit value, containing one or more
- of these bit flags:
- <dl class="Bl-tag">
- <dt id="IEEE80211_RADIOTAP_F_CFP"><a class="permalink" href="#IEEE80211_RADIOTAP_F_CFP"><code class="Dv">IEEE80211_RADIOTAP_F_CFP</code></a></dt>
- <dd>Frame was sent/received during the Contention Free Period (CFP).</dd>
- <dt id="IEEE80211_RADIOTAP_F_SHORTPRE"><a class="permalink" href="#IEEE80211_RADIOTAP_F_SHORTPRE"><code class="Dv">IEEE80211_RADIOTAP_F_SHORTPRE</code></a></dt>
- <dd>Frame was sent/received with short preamble.</dd>
- <dt id="IEEE80211_RADIOTAP_F_WEP"><a class="permalink" href="#IEEE80211_RADIOTAP_F_WEP"><code class="Dv">IEEE80211_RADIOTAP_F_WEP</code></a></dt>
- <dd>Frame was encrypted.</dd>
- <dt id="IEEE80211_RADIOTAP_F_FRAG"><a class="permalink" href="#IEEE80211_RADIOTAP_F_FRAG"><code class="Dv">IEEE80211_RADIOTAP_F_FRAG</code></a></dt>
- <dd>Frame was an 802.11 fragment.</dd>
- <dt id="IEEE80211_RADIOTAP_F_FCS"><a class="permalink" href="#IEEE80211_RADIOTAP_F_FCS"><code class="Dv">IEEE80211_RADIOTAP_F_FCS</code></a></dt>
- <dd>Frame contents includes the FCS.</dd>
- <dt id="IEEE80211_RADIOTAP_F_DATAPAD"><a class="permalink" href="#IEEE80211_RADIOTAP_F_DATAPAD"><code class="Dv">IEEE80211_RADIOTAP_F_DATAPAD</code></a></dt>
- <dd>Frame contents potentially has padding between the 802.11 header and
- the data payload to align the payload to a 32-bit boundary.</dd>
- <dt id="IEEE80211_RADIOTAP_F_BADFCS"><a class="permalink" href="#IEEE80211_RADIOTAP_F_BADFCS"><code class="Dv">IEEE80211_RADIOTAP_F_BADFCS</code></a></dt>
- <dd>Frame was received with an invalid FCS.</dd>
- <dt id="IEEE80211_RADIOTAP_F_SHORTGI"><a class="permalink" href="#IEEE80211_RADIOTAP_F_SHORTGI"><code class="Dv">IEEE80211_RADIOTAP_F_SHORTGI</code></a></dt>
- <dd>Frame was sent/received with Short Guard Interval.</dd>
- </dl>
- </dd>
- <dt id="IEEE80211_RADIOTAP_RATE"><a class="permalink" href="#IEEE80211_RADIOTAP_RATE"><code class="Dv">IEEE80211_RADIOTAP_RATE</code></a></dt>
- <dd>This field contains a single unsigned 8-bit value that is the data rate.
- Legacy rates are in units of 500Kbps. MCS rates (used on 802.11n/HT
- channels) have the high bit set and the MCS in the low 7 bits.</dd>
- <dt id="IEEE80211_RADIOTAP_CHANNEL"><a class="permalink" href="#IEEE80211_RADIOTAP_CHANNEL"><code class="Dv">IEEE80211_RADIOTAP_CHANNEL</code></a></dt>
- <dd>This field contains two unsigned 16-bit values. The first value is the
- center frequency for the channel the frame was sent/received on. The
- second value is a bitmap containing flags that specify channel properties.
- <p class="Pp">This field is deprecated in favor of
- <code class="Dv">IEEE80211_RADIOTAP_XCHANNEL</code> but may be used to
- save space in the capture file for legacy devices.</p>
- </dd>
- <dt id="IEEE80211_RADIOTAP_DBM_ANTSIGNAL"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_ANTSIGNAL"><code class="Dv">IEEE80211_RADIOTAP_DBM_ANTSIGNAL</code></a></dt>
- <dd>This field contains a single signed 8-bit value that indicates the RF
- signal power at the antenna, in decibels difference from 1mW.</dd>
- <dt id="IEEE80211_RADIOTAP_DBM_ANTNOISE"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_ANTNOISE"><code class="Dv">IEEE80211_RADIOTAP_DBM_ANTNOISE</code></a></dt>
- <dd>This field contains a single signed 8-bit value that indicates the RF
- noise power at the antenna, in decibels difference from 1mW.</dd>
- <dt id="IEEE80211_RADIOTAP_DBM_TX_POWER"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_TX_POWER"><code class="Dv">IEEE80211_RADIOTAP_DBM_TX_POWER</code></a></dt>
- <dd>Transmit power expressed as decibels from a 1mW reference. This field is a
- single signed 8-bit value. This is the absolute power level measured at
- the antenna port.</dd>
- <dt id="IEEE80211_RADIOTAP_ANTENNA"><a class="permalink" href="#IEEE80211_RADIOTAP_ANTENNA"><code class="Dv">IEEE80211_RADIOTAP_ANTENNA</code></a></dt>
- <dd>This field contains a single unsigned 8-bit value that specifies which
- antenna was used to transmit or receive the frame. Antenna numbering is
- device-specific but typically the primary antenna has the lowest number.
- On transmit a value of zero may be seen which typically means antenna
- selection is left to the device.</dd>
- <dt id="IEEE80211_RADIOTAP_DB_ANTSIGNAL"><a class="permalink" href="#IEEE80211_RADIOTAP_DB_ANTSIGNAL"><code class="Dv">IEEE80211_RADIOTAP_DB_ANTSIGNAL</code></a></dt>
- <dd>This field contains a single unsigned 8-bit value that indicates the RF
- signal power at the antenna, in decibels difference from an arbitrary,
- fixed reference.</dd>
- <dt id="IEEE80211_RADIOTAP_DB_ANTNOISE"><a class="permalink" href="#IEEE80211_RADIOTAP_DB_ANTNOISE"><code class="Dv">IEEE80211_RADIOTAP_DB_ANTNOISE</code></a></dt>
- <dd>This field contains a single unsigned 8-bit value that indicates the RF
- noise power at the antenna, in decibels difference from an arbitrary,
- fixed reference.</dd>
- <dt id="IEEE80211_RADIOTAP_XCHANNEL"><a class="permalink" href="#IEEE80211_RADIOTAP_XCHANNEL"><code class="Dv">IEEE80211_RADIOTAP_XCHANNEL</code></a></dt>
- <dd>This field contains four values: a 32-bit unsigned bitmap of flags that
- describe the channel attributes, a 16-bit unsigned frequency in MHz
- (typically the channel center), an 8-bit unsigned IEEE channel number, and
- a signed 8-bit value that holds the maximum regulatory transmit power cap
- in .5 dBm (8 bytes total). Channel flags are defined in:
- <code class="In">&lt;<a class="In">net80211/_ieee80211.h</a>&gt;</code>
- (only a subset are found in
- <code class="In">&lt;<a class="In">net80211/ieee80211_radiotap.h</a>&gt;</code>
- ). This property supersedes
- <code class="Dv">IEEE80211_RADIOTAP_CHANNEL</code> and is the only way to
- completely express all channel attributes and the mapping between channel
- frequency and IEEE channel number.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Radiotap receive definitions for the Intersil Prism driver:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>#define WI_RX_RADIOTAP_PRESENT \
- ((1 &lt;&lt; IEEE80211_RADIOTAP_TSFT) \
- (1 &lt;&lt; IEEE80211_RADIOTAP_FLAGS) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_RATE) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_CHANNEL) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_DB_ANTNOISE))
-
-struct wi_rx_radiotap_header {
- struct ieee80211_radiotap_header wr_ihdr;
- uint64_t wr_tsf;
- uint8_t wr_flags;
- uint8_t wr_rate;
- uint16_t wr_chan_freq;
- uint16_t wr_chan_flags;
- uint8_t wr_antsignal;
- uint8_t wr_antnoise;
-} __packed __aligned(8);</pre>
-</div>
-<p class="Pp">and transmit definitions for the Atheros driver:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>#define ATH_TX_RADIOTAP_PRESENT ( \
- (1 &lt;&lt; IEEE80211_RADIOTAP_FLAGS) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_RATE) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_DBM_TX_POWER) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_ANTENNA) | \
- (1 &lt;&lt; IEEE80211_RADIOTAP_XCHANNEL) | \
- 0)
-
-struct ath_tx_radiotap_header {
- struct ieee80211_radiotap_header wt_ihdr;
- uint8_t wt_flags;
- uint8_t wt_rate;
- uint8_t wt_txpower;
- uint8_t wt_antenna;
- uint32_t wt_chan_flags;
- uint16_t wt_chan_freq;
- uint8_t wt_chan_ieee;
- int8_t wt_chan_maxpow;
-} __packed;</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">tcpdump(1)</a>, <a class="Xr">bpf(4)</a>,
- <a class="Xr">ieee80211(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">ieee80211_radiotap</code> definitions first
- appeared in <span class="Ux">NetBSD 1.5</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The original version of this manual page was written by
- <span class="An">Bruce M. Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>&gt; and
- <span class="An">Darron Broad</span>
- &lt;<a class="Mt" href="mailto:darron@kewl.org">darron@kewl.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 11, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_regdomain.9 3.html b/static/freebsd/man9/ieee80211_regdomain.9 3.html
deleted file mode 100644
index b0233133..00000000
--- a/static/freebsd/man9/ieee80211_regdomain.9 3.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_REGDOMAIN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_REGDOMAIN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_regdomain</code> &#x2014;
- <span class="Nd">802.11 regulatory support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">net80211/ieee80211_regdomain.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_init_channels</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">const struct ieee80211_regdomain
- *</var>, <var class="Fa">const uint8_t bands[]</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_sort_channels</code>(<var class="Fa">struct
- ieee80211_channel *</var>, <var class="Fa">int nchans</var>);</p>
-<p class="Pp"><var class="Ft">struct ieee80211_appie *</var>
- <br/>
- <code class="Fn">ieee80211_alloc_countryie</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> software layer provides a
- support framework for drivers that includes comprehensive regulatory
- support. <code class="Nm">net80211</code> provides mechanisms that enforce
- <a class="permalink" href="#regulatory"><i class="Em" id="regulatory">regulatory
- policy</i></a> by privileged user applications.</p>
-<p class="Pp" id="ieee80211_ifattach">Drivers define a device's capabilities and
- can intercept and control regulatory changes requested through
- <code class="Nm">net80211</code>. The initial regulatory state, including
- the channel list, must be filled in by the driver before calling
- <a class="permalink" href="#ieee80211_ifattach"><code class="Fn">ieee80211_ifattach</code></a>().
- The channel list should reflect the set of channels the device is
- <a class="permalink" href="#calibrated"><i class="Em" id="calibrated">calibrated</i></a>
- for use on. This list may also be requested later through the
- <var class="Vt">ic_getradiocaps</var> method in the
- <var class="Vt">ieee80211com</var> structure. The
- <a class="permalink" href="#ieee80211_init_channels"><code class="Fn" id="ieee80211_init_channels">ieee80211_init_channels</code></a>()
- function is provided as a rudimentary fallback for drivers that do not (or
- cannot) fill in a proper channel list. Default regulatory state is supplied
- such as the regulatory SKU, ISO country code, location (e.g. indoor,
- outdoor), and a set of frequency bands the device is capable of operating
- on. <code class="Nm">net80211</code> populates the channel table in
- <var class="Vt">ic_channels</var> with a default set of channels and
- capabilities. Note this mechanism should be used with care as any mismatch
- between the channel list created and the device's capabilities can result in
- runtime errors (e.g. a request to operate on a channel the device does not
- support). The SKU and country information are used for generating 802.11h
- protocol elements and related operation such as for 802.11d; mis-setup by a
- driver is not fatal, only potentially confusing.</p>
-<p class="Pp" id="ieee80211_notify_country">Devices that do not have a
- fixed/default regulatory state can set the regulatory SKU to
- <code class="Dv">SKU_DEBUG</code> and country code to
- <code class="Dv">CTRY_DEFAULT</code> and leave proper setup to user
- applications. If default settings are known they can be installed and/or an
- event can be dispatched to user space using
- <a class="permalink" href="#ieee80211_notify_country"><code class="Fn">ieee80211_notify_country</code></a>()
- so that <a class="Xr">devd(8)</a> will do the appropriate setup work at
- system boot (or device insertion).</p>
-<p class="Pp" id="ieee80211_sort_channels">The channel table is sorted to
- optimize lookups using the
- <a class="permalink" href="#ieee80211_sort_channels"><code class="Fn">ieee80211_sort_channels</code></a>()
- routine. This should be done whenever the channel table contents are
- modified.</p>
-<p class="Pp" id="ieee80211_alloc_countryie">The
- <a class="permalink" href="#ieee80211_alloc_countryie"><code class="Fn">ieee80211_alloc_countryie</code></a>()
- function allocates an information element as specified by 802.11h. Because
- this is expensive to generate it is cached in
- <var class="Vt">ic_countryie</var> and generated only when regulatory state
- changes. Drivers that call
- <code class="Fn">ieee80211_alloc_countryie</code>() directly should not help
- with this caching; doing so may confuse the <code class="Nm">net80211</code>
- layer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_REGULATORY_CONTROL"><a class="permalink" href="#DRIVER_REGULATORY_CONTROL">DRIVER
- REGULATORY CONTROL</a></h1>
-<p class="Pp">Drivers can control regulatory change requests by overriding the
- <var class="Vt">ic_setregdomain</var> method that checks change requests.
- While drivers can reject any request that does not meet its requirements it
- is recommended that one be lenient in what is accepted and, whenever
- possible, instead of rejecting a request, alter it to be correct. For
- example, if the transmit power cap for a channel is too high the driver can
- either reject the request or (better) reduce the cap to be compliant.
- Requests that include unacceptable channels should cause the request to be
- rejected as otherwise a mismatch may be created between application state
- and the state managed by <code class="Nm">net80211</code>. The exact rules
- by which to operate are still being codified.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">regdomain(5)</a>, <a class="Xr">ifconfig(8)</a>,
- <a class="Xr">ieee80211(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_scan.9 3.html b/static/freebsd/man9/ieee80211_scan.9 3.html
deleted file mode 100644
index d331f5d8..00000000
--- a/static/freebsd/man9/ieee80211_scan.9 3.html
+++ /dev/null
@@ -1,291 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_SCAN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_SCAN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ieee80211_scan</code> &#x2014;
- <span class="Nd">802.11 scanning support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_start_scan</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">int flags</var>, <var class="Fa">u_int
- duration</var>, <var class="Fa">u_int mindwell</var>, <var class="Fa">u_int
- maxdwell</var>, <var class="Fa">u_int nssid</var>, <var class="Fa">const
- struct ieee80211_scan_ssid ssids[]</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_check_scan</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">int flags</var>, <var class="Fa">u_int
- duration</var>, <var class="Fa">u_int mindwell</var>, <var class="Fa">u_int
- maxdwell</var>, <var class="Fa">u_int nssid</var>, <var class="Fa">const
- struct ieee80211_scan_ssid ssids[]</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_check_scan_current</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_bg_scan</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>,
- <var class="Fa" style="white-space: nowrap;">int</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_cancel_scan</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_cancel_scan_any</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_scan_next</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_scan_done</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_probe_curchan</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>,
- <var class="Fa" style="white-space: nowrap;">int</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_add_scan</code>(<var class="Fa">struct ieee80211vap
- *</var>, <var class="Fa">const struct ieee80211_scanparams *</var>,
- <var class="Fa">const struct ieee80211_frame *</var>, <var class="Fa">int
- subtype</var>, <var class="Fa">int rssi</var>, <var class="Fa">int
- noise</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scan_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211com *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scan_assoc_fail</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">const uint8_t
- mac[IEEE80211_ADDR_LEN]</var>, <var class="Fa">int reason</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scan_flush</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scan_iterate</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">ieee80211_scan_iter_func</var>,
- <var class="Fa">void *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scan_dump_channels</code>(<var class="Fa" style="white-space: nowrap;">const
- struct ieee80211_scan_state *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scanner_register</code>(<var class="Fa">enum
- ieee80211_opmode</var>, <var class="Fa">const struct ieee80211_scanner
- *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scanner_unregister</code>(<var class="Fa">enum
- ieee80211_opmode</var>, <var class="Fa">const struct ieee80211_scanner
- *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_scanner_unregister_all</code>(<var class="Fa" style="white-space: nowrap;">const
- struct ieee80211_scanner *</var>);</p>
-<p class="Pp"><var class="Ft">const struct ieee80211_scanner *</var>
- <br/>
- <code class="Fn">ieee80211_scanner_get</code>(<var class="Fa" style="white-space: nowrap;">enum
- ieee80211_opmode</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> software layer provides an
- extensible framework for scanning. Scanning is the procedure by which a
- station locates a BSS to join (in infrastructure and IBSS mode), or a
- channel to use (when operating as an AP or an IBSS master). Scans are either
- &#x201C;active&#x201D; or &#x201C;passive&#x201D;. An active scan causes one
- or more ProbeRequest frames to be sent on visiting each channel. A passive
- request causes each channel in the scan set to be visited but no frames to
- be transmitted; the station only listens for traffic. Note that active
- scanning may still need to listen for traffic before sending ProbeRequest
- frames depending on regulatory constraints.</p>
-<p class="Pp">A scan operation involves constructing a set of channels to
- inspect (the scan set), visiting each channel and collecting information
- (e.g. what BSS are present), and then analyzing the results to make
- decisions such as which BSS to join. This process needs to be as fast as
- possible so <code class="Nm">net80211</code> does things like intelligently
- construct scan sets and dwell on a channel only as long as necessary. Scan
- results are cached and the scan cache is used to avoid scanning when
- possible and to enable roaming between access points when operating in
- infrastructure mode.</p>
-<p class="Pp" id="policy">Scanning is handled by pluggable modules that
- implement <a class="permalink" href="#policy"><i class="Em">policy</i></a>
- per-operating mode. The core scanning support provides an infrastructure to
- support these modules and exports a common API to the rest of the
- <code class="Nm">net80211</code> layer. Policy modules decide what channels
- to visit, what state to record to make decisions, and selects the final
- station/channel to return as the result of a scan.</p>
-<p class="Pp" id="ieee80211_new_state">Scanning is done synchronously when
- initially bringing a vap to an operational state and optionally in the
- background to maintain the scan cache for doing roaming and rogue AP
- monitoring. Scanning is not tied to the <code class="Nm">net80211</code>
- state machine that governs vaps except for linkage to the
- <code class="Dv">IEEE80211_S_SCAN</code> state. Only one vap at a time may
- be scanning; this scheduling policy is handled in
- <a class="permalink" href="#ieee80211_new_state"><code class="Fn">ieee80211_new_state</code></a>()
- and is transparent to scanning code.</p>
-<p class="Pp">Scanning is controlled by a set of parameters that (potentially)
- constrains the channel set and any desired SSID's and BSSID's.
- <code class="Nm">net80211</code> comes with a standard scanner module that
- works with all available operating modes and supports &#x201C;background
- scanning&#x201D; and &#x201C;roaming&#x201D; operation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SCANNER_MODULES"><a class="permalink" href="#SCANNER_MODULES">SCANNER
- MODULES</a></h1>
-<p class="Pp">Scanning modules use a registration mechanism to hook into the
- <code class="Nm">net80211</code> layer. Use
- <a class="permalink" href="#ieee80211_scanner_register"><code class="Fn" id="ieee80211_scanner_register">ieee80211_scanner_register</code></a>()
- to register a scan module for a particular operating mode and
- <a class="permalink" href="#ieee80211_scanner_unregister"><code class="Fn" id="ieee80211_scanner_unregister">ieee80211_scanner_unregister</code></a>()
- or
- <a class="permalink" href="#ieee80211_scanner_unregister_all"><code class="Fn" id="ieee80211_scanner_unregister_all">ieee80211_scanner_unregister_all</code></a>()
- to clear entries (typically on module unload). Only one scanner module can
- be registered at any time for an operating mode.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DRIVER_SUPPORT"><a class="permalink" href="#DRIVER_SUPPORT">DRIVER
- SUPPORT</a></h1>
-<p class="Pp">Scanning operations are usually managed by the
- <code class="Nm">net80211</code> layer. Drivers must provide
- <var class="Vt">ic_scan_start</var> and <var class="Vt">ic_scan_stop</var>
- methods that are called at the start of a scan and when the work is done;
- these should handle work such as enabling receive of Beacon and
- ProbeResponse frames and disable any BSSID matching. The
- <var class="Vt">ic_set_channel</var> method is used to change channels while
- scanning. <code class="Nm">net80211</code> will generate ProbeRequest frames
- and transmit them using the <code class="Nm">ic_raw_xmit</code> method.
- Frames received while scanning are dispatched to
- <code class="Nm">net80211</code> using the normal receive path. Devices that
- off-load scan work to firmware most easily mesh with
- <code class="Nm">net80211</code> by operating on a channel-at-a-time basis
- as this defers control to <code class="Nm">net80211's</code> scan machine
- scheduler. But multi-channel scanning is supported if the driver manually
- dispatches results using <code class="Fn">ieee80211_add_scan</code>()
- routine to enter results into the scan cache.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SCAN_REQUESTS"><a class="permalink" href="#SCAN_REQUESTS">SCAN
- REQUESTS</a></h1>
-<p class="Pp">Scan requests occur by way of the
- <code class="Dv">IEEE80211_SCAN_REQUEST</code> ioctl or through a change in
- a vap's state machine that requires scanning. In both cases the scan cache
- can be checked first and, if it is deemed suitably &#x201C;warm&#x201D; then
- it's contents are used without leaving the current channel. To start a scan
- without checking the cache
- <a class="permalink" href="#ieee80211_start_scan"><code class="Fn" id="ieee80211_start_scan">ieee80211_start_scan</code></a>()
- can be called; otherwise
- <a class="permalink" href="#ieee80211_check_scan"><code class="Fn" id="ieee80211_check_scan">ieee80211_check_scan</code></a>()
- can be used to first check the scan cache, kicking off a scan if the cache
- contents are out of date. There is also
- <a class="permalink" href="#ieee80211_check_scan_current"><code class="Fn" id="ieee80211_check_scan_current">ieee80211_check_scan_current</code></a>()
- which is a shorthand for using previously set scan parameters for checking
- the scan cache and then scanning.</p>
-<p class="Pp" id="ieee80211_bg_scan">Background scanning is done using
- <a class="permalink" href="#ieee80211_bg_scan"><code class="Fn">ieee80211_bg_scan</code></a>()
- in a co-routine fashion. The first call to this routine will start a
- background scan that runs for a limited period of time before returning to
- the BSS channel. Subsequent calls advance through the scan set until all
- channels are visited. Typically these later calls are timed to allow receipt
- of frames buffered by an access point for the station.</p>
-<p class="Pp" id="ieee80211_cancel_scan">A scan operation can be canceled using
- <a class="permalink" href="#ieee80211_cancel_scan"><code class="Fn">ieee80211_cancel_scan</code></a>()
- if it was initiated by the specified vap, or
- <a class="permalink" href="#ieee80211_cancel_scan_any"><code class="Fn" id="ieee80211_cancel_scan_any">ieee80211_cancel_scan_any</code></a>()
- to force termination regardless which vap started it. These requests are
- mostly used by <code class="Nm">net80211</code> in the transmit path to
- cancel background scans when frames are to be sent. Drivers should not need
- to use these calls (or most of the calls described on this page).</p>
-<p class="Pp" id="ieee80211_scan_next">The
- <a class="permalink" href="#ieee80211_scan_next"><code class="Fn">ieee80211_scan_next</code></a>()
- and
- <a class="permalink" href="#ieee80211_scan_done"><code class="Fn" id="ieee80211_scan_done">ieee80211_scan_done</code></a>()
- routines do explicit iteration through the scan set and should not normally
- be used by drivers.
- <a class="permalink" href="#ieee80211_probe_curchan"><code class="Fn" id="ieee80211_probe_curchan">ieee80211_probe_curchan</code></a>()
- handles the work of transmitting ProbeRequest frames when visiting a channel
- during an active scan. When the channel attributes are marked with
- <code class="Dv">IEEE80211_CHAN_PASSIVE</code> this function will arrange
- that before any frame is transmitted 802.11 traffic is first received (in
- order to comply with regulatory constraints).</p>
-<p class="Pp">Min/max dwell time parameters are used to constrain time spent
- visiting a channel. The maximum dwell time constrains the time spent
- listening for traffic. The minimum dwell time is used to reduce this
- time--when it is reached and one or more frames have been received then an
- immediate channel change will be done. Drivers can override this behaviour
- through the <var class="Vt">iv_scan_mindwell</var> method.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SCAN_CACHE_MANAGEMENT"><a class="permalink" href="#SCAN_CACHE_MANAGEMENT">SCAN
- CACHE MANAGEMENT</a></h1>
-<p class="Pp">The scan cache contents are managed by the scan policy module and
- are opaque outside this module. The <code class="Nm">net80211</code> scan
- framework defines API's for interacting. The validity of the scan cache
- contents are controlled by <var class="Vt">iv_scanvalid</var> which is
- exported to user space through the
- <code class="Dv">IEEE80211_SCAN_VALID</code> request.</p>
-<p class="Pp" id="ieee80211_scan_flush">The cache contents can be explicitly
- flushed with
- <a class="permalink" href="#ieee80211_scan_flush"><code class="Fn">ieee80211_scan_flush</code></a>()
- or by setting the <code class="Dv">IEEE80211_SCAN_FLUSH</code> flag when
- starting a scan operation.</p>
-<p class="Pp" id="ieee80211_add_scan">Scan cache entries are created with the
- <a class="permalink" href="#ieee80211_add_scan"><code class="Fn">ieee80211_add_scan</code></a>()
- routine; usually on receipt of Beacon or ProbeResponse frames. Existing
- entries are typically updated based on the latest information though some
- information such as RSSI and noise floor readings may be combined to present
- an average.</p>
-<p class="Pp" id="ieee80211_scan_timeout">The cache contents is aged through
- <a class="permalink" href="#ieee80211_scan_timeout"><code class="Fn">ieee80211_scan_timeout</code></a>()
- calls. Typically these happen together with other station table activity;
- every <code class="Dv">IEEE80211_INACT_WAIT</code> seconds (default 15).</p>
-<p class="Pp" id="ieee80211_scan_assoc_success">Individual cache entries are
- marked usable with
- <a class="permalink" href="#ieee80211_scan_assoc_success"><code class="Fn">ieee80211_scan_assoc_success</code></a>()
- and faulty with
- <a class="permalink" href="#ieee80211_scan_assoc_fail"><code class="Fn" id="ieee80211_scan_assoc_fail">ieee80211_scan_assoc_fail</code></a>()
- with the latter taking an argument to identify if there was no response to
- Authentication/Association requests or if a negative response was received
- (which might hasten cache eviction or blacklist the entry).</p>
-<p class="Pp" id="ieee80211_scan_iterate">The cache contents can be viewed using
- the
- <a class="permalink" href="#ieee80211_scan_iterate"><code class="Fn">ieee80211_scan_iterate</code></a>()
- call. Cache entries are exported in a public format that is exported to user
- applications through the <code class="Dv">IEEE80211_SCAN_RESULTS</code>
- request.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">ieee80211(9)</a>,
- <a class="Xr">ieee80211_proto(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 29, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ieee80211_vap.9 3.html b/static/freebsd/man9/ieee80211_vap.9 3.html
deleted file mode 100644
index 0ae1b2b1..00000000
--- a/static/freebsd/man9/ieee80211_vap.9 3.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IEEE80211_VAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IEEE80211_VAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">net80211_vap</code> &#x2014;
- <span class="Nd">802.11 network layer virtual radio support</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_vap_setup</code>(<var class="Fa">struct
- ieee80211com *</var>, <var class="Fa">struct ieee80211vap *</var>,
- <var class="Fa">const char name[IFNAMSIZ]</var>, <var class="Fa">int
- unit</var>, <var class="Fa">int opmode</var>, <var class="Fa">int
- flags</var>, <var class="Fa">const uint8_t bssid[IEEE80211_ADDR_LEN]</var>,
- <var class="Fa">const uint8_t macaddr[IEEE80211_ADDR_LEN]</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ieee80211_vap_attach</code>(<var class="Fa">struct
- ieee80211vap *</var>, <var class="Fa">ifm_change_cb_t media_change</var>,
- <var class="Fa">ifm_stat_cb_t media_stat</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ieee80211_vap_detach</code>(<var class="Fa" style="white-space: nowrap;">struct
- ieee80211vap *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">net80211</code> software layer provides a
- support framework for drivers that includes a virtual radio API that is
- exported to users through network interfaces (aka vaps) that are cloned from
- the underlying device. These interfaces have an operating mode (station,
- adhoc, hostap, wds, monitor, etc.) that is fixed for the lifetime of the
- interface. Devices that can support multiple concurrent interfaces allow
- multiple vaps to be cloned.</p>
-<p class="Pp">The virtual radio interface defined by the
- <code class="Nm">net80211</code> layer means that drivers must be structured
- to follow specific rules. Drivers that support only a single interface at
- any time must still follow these rules.</p>
-<p class="Pp">The virtual radio architecture splits state between a single
- per-device <var class="Vt">ieee80211com</var> structure and one or more
- <var class="Vt">ieee80211vap</var> structures. Vaps are created with the
- <code class="Dv">SIOCIFCREATE2</code> request. This results in a call into
- the driver's <var class="Vt">ic_vap_create</var> method where the driver can
- decide if the request should be accepted.</p>
-<p class="Pp" id="ieee80211_vap_setup">The vap creation process is done in three
- steps. First the driver allocates the data structure with
- <a class="Xr">malloc(9)</a>. This data structure must have an
- <var class="Vt">ieee80211vap</var> structure at the front but is usually
- extended with driver-private state. Next the vap is setup with a call to
- <a class="permalink" href="#ieee80211_vap_setup"><code class="Fn">ieee80211_vap_setup</code></a>().
- This request initializes <code class="Nm">net80211</code> state but does not
- activate the interface. The driver can then override methods setup by
- <code class="Nm">net80211</code> and setup driver resources before finally
- calling
- <a class="permalink" href="#ieee80211_vap_attach"><code class="Fn" id="ieee80211_vap_attach">ieee80211_vap_attach</code></a>()
- to complete the process. Both these calls must be done without holding any
- driver locks as work may require the process block/sleep.</p>
-<p class="Pp" id="ieee80211_vap_detach">A vap is deleted when an
- <code class="Dv">SIOCIFDESTROY</code> ioctl request is made or when the
- device detaches (causing all associated vaps to automatically be deleted).
- Delete requests cause the <var class="Vt">ic_vap_delete</var> method to be
- called. Drivers must quiesce the device before calling
- <a class="permalink" href="#ieee80211_vap_detach"><code class="Fn">ieee80211_vap_detach</code></a>()
- to deactivate the vap and isolate it from activities such as requests from
- user applications. The driver can then reclaim resources held by the vap and
- re-enable device operation. The exact procedure for quiescing a device is
- unspecified but typically it involves blocking interrupts and stopping
- transmit and receive processing.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MULTI-VAP_OPERATION"><a class="permalink" href="#MULTI-VAP_OPERATION">MULTI-VAP
- OPERATION</a></h1>
-<p class="Pp">Drivers are responsible for deciding if multiple vaps can be
- created and how to manage them. Whether or not multiple concurrent vaps can
- be supported depends on a device's capabilities. For example, multiple
- hostap vaps can usually be supported but many devices do not support
- assigning each vap a unique BSSID. If a device supports hostap operation it
- can usually support concurrent station mode vaps but possibly with
- limitations such as losing support for hardware beacon miss support. Devices
- that are capable of hostap operation and can send and receive 4-address
- frames should be able to support WDS vaps together with an ap vap. But in
- contrast some devices cannot support WDS vaps without at least one ap vap
- (this however can be finessed by forcing the ap vap to not transmit beacon
- frames). All devices should support the creation of any number of monitor
- mode vaps concurrent with other vaps but it is the responsibility of the
- driver to allow this.</p>
-<p class="Pp">An important consequence of supporting multiple concurrent vaps is
- that a driver's <var class="Vt">iv_newstate</var> method must be written to
- handle being called for each vap. Where necessary, drivers must track
- private state for all vaps and not just the one whose state is being changed
- (e.g. for handling beacon timers the driver may need to know if all vaps
- that beacon are stopped before stopping the hardware timers).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ieee80211(9)</a>, <a class="Xr">ifnet(9)</a>,
- <a class="Xr">malloc(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/iflib.9 4.html b/static/freebsd/man9/iflib.9 4.html
deleted file mode 100644
index 86e00305..00000000
--- a/static/freebsd/man9/iflib.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFLIB(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IFLIB(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">iflib</code> &#x2014; <span class="Nd">Network
- Interface Driver Framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">iflib</code> is a framework for writing network
- interface drivers for <span class="Ux">FreeBSD</span>. It is designed to
- remove a large amount of the boilerplate that is often needed for modern
- network interface devices, allowing driver authors to focus on the specific
- code needed for their hardware.</p>
-<p class="Pp">There are three logical components to
- <code class="Nm">iflib</code> each of which is described in its own manual
- page. These are:</p>
-<dl class="Bl-tag">
- <dt><a class="Xr">iflibdi(9)</a></dt>
- <dd>Device-independent functions, used to integrate
- <code class="Nm">iflib</code> into the rest of the
- <span class="Ux">FreeBSD</span> networking stack.</dd>
- <dt><a class="Xr">iflibdd(9)</a></dt>
- <dd>Device-dependent functions, used when writing new
- <code class="Nm">iflib</code> based drivers.</dd>
- <dt><a class="Xr">iflibtxrx(9)</a></dt>
- <dd>Device-dependent transmit and receive functions, used when writing new
- <code class="Nm">iflib</code> based drivers.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">iflib(4)</a>, <a class="Xr">iflibdd(9)</a>,
- <a class="Xr">iflibdi(9)</a>, <a class="Xr">iflibtxrx(9)</a>,
- <a class="Xr">ifnet(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Benno Rice</span>
- &lt;<a class="Mt" href="mailto:benno@FreeBSD.org">benno@FreeBSD.org</a>&gt;</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 20, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/iflibdd.9 4.html b/static/freebsd/man9/iflibdd.9 4.html
deleted file mode 100644
index a3986f5d..00000000
--- a/static/freebsd/man9/iflibdd.9 4.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFLIBDD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IFLIBDD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">iflibdd</code> &#x2014; <span class="Nd">Device
- Dependent Configuration Functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">ifdi_if.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Soft_Queue_Setup_and_Teardown_Functions"><a class="permalink" href="#Soft_Queue_Setup_and_Teardown_Functions">Soft
- Queue Setup and Teardown Functions</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss">Mandatory Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_tx_queues_alloc</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint64_t
- *paddrs</var>, <var class="Fa">int ntxqs</var>, <var class="Fa">int
- ntxqsets</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_rx_queues_alloc</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint64_t
- *paddrs</var>, <var class="Fa">int nrxqs</var>, <var class="Fa">int
- nrxqsets</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_queues_free</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Optional Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_txq_setup</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint16_t qid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_rxq_setup</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint16_t qid</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Setup_and_Teardown_Functions"><a class="permalink" href="#Device_Setup_and_Teardown_Functions">Device
- Setup and Teardown Functions</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss">Mandatory Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_attach_pre</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_attach_post</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_detach</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Optional Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_vlan_register</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint16_t vtag</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_vlan_unregister</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">uint16_t vtag</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_suspend</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_resume</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Configuration Functions</h2>
-</section>
-<section class="Ss">
-<h2 class="Ss">Mandatory Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_init</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_stop</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_multi_set</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_mtu_set</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint32_t mtu</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_media_status</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">struct ifmediareq *ifr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_media_change</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_promisc_set</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">ifdi_get_counter</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">ift_counter cnt</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_update_admin_status</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Optional Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_media_set</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interrupt_enable/disable"><a class="permalink" href="#Interrupt_enable/disable">Interrupt
- enable/disable</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss">Mandatory Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_intr_enable</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_queue_intr_enable</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">uint16_t qid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_intr_disable</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="IOV_Support"><a class="permalink" href="#IOV_Support">IOV
- Support</a></h2>
-<p class="Pp"><var class="Ft">init</var>
- <br/>
- <code class="Fn">iov_init</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint16_t num_vfs</var>, <var class="Fa">const nvlist_t
- *params</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iov_uinit</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_vflr_handle</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_vf_add</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">uint16_t vfnum</var>, <var class="Fa">const nvlist_t
- *params</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Optional Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_link_intr_enable</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Optional_Service_Routines"><a class="permalink" href="#Optional_Service_Routines">Optional
- Service Routines</a></h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_timer</code>(<var class="Fa">if_ctx_t ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_watchdog_reset</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Additional Functions</h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifdi_led_func</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">int onoff</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_sysctl_int_delay</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">if_int_delay_info_t iidi</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifdi_i2c_req</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">struct ifi2creq *req</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">The above named functions are device dependent configuration
- functions. These routines are registered with iflib by the driver and are
- called from the corresponding iflib function to configure device specific
- functions and registers.</p>
-<section class="Ss">
-<h2 class="Ss" id="Device_Dependent_Functions"><a class="permalink" href="#Device_Dependent_Functions">Device
- Dependent Functions</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Soft_Queue_Setup_and_Teardown"><a class="permalink" href="#Soft_Queue_Setup_and_Teardown">Soft
- Queue Setup and Teardown</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_tx_queues_alloc"><a class="permalink" href="#ifdi_tx_queues_alloc"><code class="Fn">ifdi_tx_queues_alloc</code></a>()</dt>
- <dd>Mandatory function that is called during iflib_attach to allocate transmit
- queues. vaddrs and paddrs are arrays of virtual and physical addresses
- respectively of the hardware transmit queues. ntxqs is the number of
- queues per qset. ntxqsets is the number of qsets.</dd>
- <dt id="ifdi_rx_queues_alloc"><a class="permalink" href="#ifdi_rx_queues_alloc"><code class="Fn">ifdi_rx_queues_alloc</code></a>()</dt>
- <dd>Mandatory function that is called during iflib_attach to allocate receive
- queues. vaddrs and paddrs are arrays of virtual and physical addresses
- respectively of the hardware receive queues. nrxqs is the number of queues
- per qset. nrxqsets is the number of qsets.</dd>
- <dt id="ifdi_queues_free"><a class="permalink" href="#ifdi_queues_free"><code class="Fn">ifdi_queues_free</code></a>()</dt>
- <dd>Mandatory function that frees the allocated queues and associated transmit
- buffers.</dd>
- <dt id="ifdi_txq_setup"><a class="permalink" href="#ifdi_txq_setup"><code class="Fn">ifdi_txq_setup</code></a>()</dt>
- <dd>Optional function for each transmit queue that handles device specific
- initialization.</dd>
- <dt id="ifdi_rxq_setup"><a class="permalink" href="#ifdi_rxq_setup"><code class="Fn">ifdi_rxq_setup</code></a>()</dt>
- <dd>Optional function for each receive queue that handles device specific
- initialization.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Setup_and_Teardown"><a class="permalink" href="#Device_Setup_and_Teardown">Device
- Setup and Teardown</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_attach_pre"><a class="permalink" href="#ifdi_attach_pre"><code class="Fn">ifdi_attach_pre</code></a>()</dt>
- <dd>Mandatory function implemented by the driver to perform any attach logic
- that procedes interrupt and queue allocation, queue setup, and interrupt
- assignment.</dd>
- <dt id="ifdi_attach_post"><a class="permalink" href="#ifdi_attach_post"><code class="Fn">ifdi_attach_post</code></a>()</dt>
- <dd>Mandatory function implemented by the driver to perform any attach logic
- that occurs after ifdi_attach_pre, and iflib's queue setup and MSI/MSIX(X)
- or legacy interrupt assignment.</dd>
- <dt id="ifdi_detach"><a class="permalink" href="#ifdi_detach"><code class="Fn">ifdi_detach</code></a>()</dt>
- <dd>Mandatory function that frees any resources allocated by the driver in
- ifdi_attach_pre and ifdi_attach_post.</dd>
- <dt id="ifdi_vlan_register"><a class="permalink" href="#ifdi_vlan_register"><code class="Fn">ifdi_vlan_register</code></a>()</dt>
- <dd>Optional function called by the VLAN config eventhandler.
- <var class="Va">vtag</var> is the new VLAN tag.</dd>
- <dt id="ifdi_vlan_unregister"><a class="permalink" href="#ifdi_vlan_unregister"><code class="Fn">ifdi_vlan_unregister</code></a>()</dt>
- <dd>Optional function called by the VLAN unconfig eventhandler.</dd>
- <dt id="ifdi_suspend"><a class="permalink" href="#ifdi_suspend"><code class="Fn">ifdi_suspend</code></a>()</dt>
- <dd>Optional function that suspends the driver.</dd>
- <dt id="ifdi_resume"><a class="permalink" href="#ifdi_resume"><code class="Fn">ifdi_resume</code></a>()</dt>
- <dd>Optional function that resumes a driver.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss">Device Configuration Functions</h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_init"><a class="permalink" href="#ifdi_init"><code class="Fn">ifdi_init</code></a>()</dt>
- <dd>Mandatory function that will initialize and bring up the hardware. For
- example, it will reset the chip and enable the receiver unit. It should
- mark the interface running, but not active (
- <code class="Dv">IFF_DRV_RUNNING</code>, <code class="Dv">~IIF_DRV_OACTIVE
- ).</code></dd>
- <dt id="ifdi_stop"><a class="permalink" href="#ifdi_stop"><code class="Fn">ifdi_stop</code></a>()</dt>
- <dd>Mandatory function that should disable all traffic on the interface by
- issuing a global reset on the MAC and deallocating the TX and RX
- buffers.</dd>
- <dt id="ifdi_multi_set"><a class="permalink" href="#ifdi_multi_set"><code class="Fn">ifdi_multi_set</code></a>()</dt>
- <dd>Programs the interfaces multicast addresses</dd>
- <dt id="ifdi_media_status"><a class="permalink" href="#ifdi_media_status"><code class="Fn">ifdi_media_status</code></a>()</dt>
- <dd>Media Ioctl Callback. Function is called whenever the user queries the
- status of the interface using <a class="Xr">ifconfig(8)</a>. The driver
- sets the appropriate link type and speed in ifmr-&gt;ifm_active.</dd>
- <dt id="ifdi_mtu_set"><a class="permalink" href="#ifdi_mtu_set"><code class="Fn">ifdi_mtu_set</code></a>()</dt>
- <dd>Sets the mtu interface to the value of the second function parameter
- mtu.</dd>
- <dt id="ifdi_media_change"><a class="permalink" href="#ifdi_media_change"><code class="Fn">ifdi_media_change</code></a>()</dt>
- <dd>Function is called when the user changes speed/duplex using the
- media/mediaopt option with <a class="Xr">ifconfig(8)</a>.</dd>
- <dt id="ifdi_promisc_set"><a class="permalink" href="#ifdi_promisc_set"><code class="Fn">ifdi_promisc_set</code></a>()</dt>
- <dd>Enables or disables promisc settings depending upon the flags value.
- <var class="Va">flags</var> contains the interface's
- <a class="Xr">ifnet(9)</a> flags.</dd>
- <dt id="ifdi_get_counter"><a class="permalink" href="#ifdi_get_counter"><code class="Fn">ifdi_get_counter</code></a>()</dt>
- <dd>Returns the value for counter cnt depending upon counter type.</dd>
- <dt id="ifdi_update_admin_status"><a class="permalink" href="#ifdi_update_admin_status"><code class="Fn">ifdi_update_admin_status</code></a>()</dt>
- <dd>Sets the link_up state to TRUE or FALSE depending upon the OS link state.
- A real check of the hardware only happens with a link interrupt.</dd>
- <dt id="ifdi_media_set"><a class="permalink" href="#ifdi_media_set"><code class="Fn">ifdi_media_set</code></a>()</dt>
- <dd>Need to define</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interrupt_Enable/Disable"><a class="permalink" href="#Interrupt_Enable/Disable">Interrupt
- Enable/Disable</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_intr_enable"><a class="permalink" href="#ifdi_intr_enable"><code class="Fn">ifdi_intr_enable</code></a>()</dt>
- <dd>Mandatory function that enables all interrupts.</dd>
- <dt id="ifdi_intr_disable"><a class="permalink" href="#ifdi_intr_disable"><code class="Fn">ifdi_intr_disable</code></a>()</dt>
- <dd>Mandatory function that disables all interrupts.</dd>
- <dt id="ifdi_queue_intr_enable"><a class="permalink" href="#ifdi_queue_intr_enable"><code class="Fn">ifdi_queue_intr_enable</code></a>()</dt>
- <dd>Mandatory function that enables interrupts on queue qid.</dd>
- <dt id="iov_init"><a class="permalink" href="#iov_init"><code class="Fn">iov_init</code></a>()</dt>
- <dd>Initialize num_vfs VFs.</dd>
- <dt id="io_uninit"><a class="permalink" href="#io_uninit"><code class="Fn">io_uninit</code></a>()</dt>
- <dd>Tear down the context for all VFs.</dd>
- <dt id="ifdi_vflr_handle"><a class="permalink" href="#ifdi_vflr_handle"><code class="Fn">ifdi_vflr_handle</code></a>()</dt>
- <dd>Handle any VFs that have reset themselves via a Function Level Reset
- (FLR).</dd>
- <dt id="ifdi_vf_add"><a class="permalink" href="#ifdi_vf_add"><code class="Fn">ifdi_vf_add</code></a>()</dt>
- <dd>Set parameters in params in VF vfnum.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Service_Routines"><a class="permalink" href="#Service_Routines">Service
- Routines</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_timer"><a class="permalink" href="#ifdi_timer"><code class="Fn">ifdi_timer</code></a>()</dt>
- <dd>Optional timer routine that will be run every 500ms.</dd>
- <dt id="ifdi_watchdog_reset"><a class="permalink" href="#ifdi_watchdog_reset"><code class="Fn">ifdi_watchdog_reset</code></a>()</dt>
- <dd>Optional function to run when a transmit queue is hung.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss">Additional Functions</h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="ifdi_led_func"><a class="permalink" href="#ifdi_led_func"><code class="Fn">ifdi_led_func</code></a>()</dt>
- <dd></dd>
- <dt id="ifdi_sysctl_int_delay"><a class="permalink" href="#ifdi_sysctl_int_delay"><code class="Fn">ifdi_sysctl_int_delay</code></a>()</dt>
- <dd></dd>
- <dt id="ifdi_i2c_req"><a class="permalink" href="#ifdi_i2c_req"><code class="Fn">ifdi_i2c_req</code></a>()</dt>
- <dd></dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ifconfig(8)</a>, <a class="Xr">iflibdi(9)</a>,
- <a class="Xr">iflibtxrx(9)</a>, <a class="Xr">ifnet(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nicole
- Graziano</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 3, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/iflibdi.9 4.html b/static/freebsd/man9/iflibdi.9 4.html
deleted file mode 100644
index 0c074e67..00000000
--- a/static/freebsd/man9/iflibdi.9 4.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFLIBDI(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IFLIBDI(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">iflibdi</code> &#x2014; <span class="Nd">Device
- Independent Configuration Functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">ifdi_if.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss">Device Independent Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_attach</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_detach</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_suspend</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_resume</code>(<var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_register</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">void *softc</var>,
- <var class="Fa">if_shared_ctx_t sctx</var>, <var class="Fa">if_ctx_t
- *ctxp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_device_deregister</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_irq_alloc</code>(<var class="Fa">if_ctx_t ctx</var>,
- <var class="Fa">if_irq_t irq_info</var>, <var class="Fa">int rid</var>,
- <var class="Fa">driver_filter_t filter</var>, <var class="Fa">void
- *filter_arg</var>, <var class="Fa">driver_intr_t handler</var>,
- <var class="Fa">void *arg</var>, <var class="Fa">char *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">iflib_irq_alloc_generic</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">if_irq_t irq</var>, <var class="Fa">int
- rid</var>, <var class="Fa">intr_type_t type</var>,
- <var class="Fa">driver_filter_t *filter</var>, <var class="Fa">void
- *filter_arg</var>, <var class="Fa">int qid</var>, <var class="Fa">char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_led_create</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_tx_intr_deferred</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">int txqid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_rx_intr_deferred</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">int rxqid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_link_intr_deferred</code>(<var class="Fa">if_ctx_t
- ctx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_link_state_change</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">int linkstate</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">iflib_add_int_delay_sysctl</code>(<var class="Fa">if_ctx_t
- ctx</var>, <var class="Fa">const char *</var>, <var class="Fa">const char
- *</var>, <var class="Fa">if_int_delay_info_t</var>,
- <var class="Fa">int</var>, <var class="Fa">int</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global
- Variables</a></h2>
-<p class="Pp"><var class="Vt">extern struct if_txrx</var></p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA
- STRUCTURES</a></h1>
-<p class="Pp">The <i>if_ctx_t</i> Structure is the device independent data
- structure that contains statistics and identifying information used to
- transmit and receive data packets. The interface is associated with an array
- of queues assigned sequentially. Each queue has its own transmit
- (iflib_txq_t) and receive (iflib_rxq_t) queue. The transmit queue is used to
- hold packets while the interface is in the process of sending another. The
- receive queue is used to receive packets that are awaiting processing.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_if_ctx_t_Structure"><a class="permalink" href="#The_if_ctx_t_Structure">The
- if_ctx_t Structure</a></h2>
-<p class="Pp">The fields of <var class="Vt">struct if_ctx_t</var> are as
- follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="if_softc"><var class="Va">if_softc</var></dt>
- <dd>(<var class="Vt">void</var>) A pointer to the driver's private state
- block.</dd>
- <dt id="ifc_dev"><var class="Va">ifc_dev</var></dt>
- <dd>(<var class="Vt">device_t</var>) The underlying device structure.</dd>
- <dt id="ifc_ip"><var class="Va">ifc_ip</var></dt>
- <dd>(<var class="Vt">if_t</var>) A link back to the interface structure</dd>
- <dt id="ifc_cpus"><var class="Va">ifc_cpus</var></dt>
- <dd>(<var class="Vt">cpuset_t</var>)</dd>
- <dt id="ifc_mutex"><var class="Va">ifc_mutex</var></dt>
- <dd>(<var class="Vt">struct mtx</var>) Mutex lock used to maintain data
- integrity</dd>
- <dt id="ifc_mtx_name"><var class="Va">ifc_mtx_name</var></dt>
- <dd>(<var class="Vt">char *</var>) The name of the mutex</dd>
- <dt id="ifc_txqs"><var class="Va">ifc_txqs</var></dt>
- <dd>(<var class="Vt">iflib_txq_t</var>) Device independent transmit queue
- maintained internally by iflib</dd>
- <dt id="ifc_rxqs"><var class="Va">ifc_rxqs</var></dt>
- <dd>(<var class="Vt">iflib_rxq_t</var>) Device independent receive queue
- maintained internally by iflib</dd>
- <dt id="ifc_qsets"><var class="Va">ifc_qsets</var></dt>
- <dd>(<var class="Vt">iflib_qset_t</var>) Output queue that contains a single
- transmit (ifc_txq_t) and receive (ifc_rxq_t) queue</dd>
- <dt id="ifc_if_flags"><var class="Va">ifc_if_flags</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Flags describing the operational
- parameter of the interface</dd>
- <dt id="ifc_in_detach"><var class="Va">ifc_in_detach</var></dt>
- <dd>(<var class="Vt">int</var>)</dd>
- <dt id="ifc_link_state"><var class="Va">ifc_link_state</var></dt>
- <dd>(<var class="Vt">int</var>) Describes the current link state of the
- Ethernet interface. Its possible values are either active or
- inactive.</dd>
- <dt id="ifc_link_irq"><var class="Va">ifc_link_irq</var></dt>
- <dd>(<var class="Vt">int</var>)</dd>
- <dt id="ifc_vlan_attach_event"><var class="Va">ifc_vlan_attach_event</var></dt>
- <dd>(<var class="Vt">eventhandler_tag</var>)</dd>
- <dt id="ifc_vlan_detach_event"><var class="Va">ifc_vlan_detach_event</var></dt>
- <dd>(<var class="Vt">eventhandler_tag</var>)</dd>
- <dt id="ifc_pause_frames"><var class="Va">ifc_pause_frames</var></dt>
- <dd>(<var class="Vt">int</var>)</dd>
- <dt id="ifc_watchdog_events"><var class="Va">ifc_watchdog_events</var></dt>
- <dd>(<var class="Vt">int</var>)</dd>
- <dt id="ifc_mac"><var class="Va">ifc_mac</var></dt>
- <dd>(<var class="Vt">uint8_t</var>)</dd>
- <dt id="ifc_msix_mem"><var class="Va">ifc_msix_mem</var></dt>
- <dd>(<var class="Vt">struct resource *</var>)</dd>
- <dt id="ifc_legacy_irq"><var class="Va">ifc_legacy_irq</var></dt>
- <dd>(<var class="Vt">struct if_irq</var>)</dd>
- <dt id="ifc_admin_task"><var class="Va">ifc_admin_task</var></dt>
- <dd>(<var class="Vt">struct grouptask</var>) Taskqueue task scheduled for link
- state change events of the interface</dd>
- <dt id="ifc_filter_info"><var class="Va">ifc_filter_info</var></dt>
- <dd>(<var class="Vt">struct iflib_filter_info</var>) Statistics and
- information relating to the interface device filter</dd>
- <dt id="ifc_media"><var class="Va">ifc_media</var></dt>
- <dd>(<var class="Vt">struct ifmedia</var>)</dd>
- <dt id="ifc_txrx"><var class="Va">ifc_txrx</var></dt>
- <dd>(<var class="Vt">struct if_txrx</var>)</dd>
-</dl>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">The above named functions are found exclusively in iflib. They are
- independent of the underlying hardware type or configuration.</p>
-<section class="Ss">
-<h2 class="Ss">Device Independent Functions</h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="iflib_device_attach"><a class="permalink" href="#iflib_device_attach"><code class="Fn">iflib_device_attach</code></a>()</dt>
- <dd>Function initiates a device registration with the iflib framework. It
- calls the iflib_register function, which is responsible for allocating and
- initializing the <i>if_ctx_t</i> structure.</dd>
- <dt id="iflib_device_detach"><a class="permalink" href="#iflib_device_detach"><code class="Fn">iflib_device_detach</code></a>()</dt>
- <dd>Shutdown and detach the device. Unregister vlan events, drain any
- dependent tasks, and release irq, pci, and msix memory.</dd>
- <dt id="iflib_device_suspend"><a class="permalink" href="#iflib_device_suspend"><code class="Fn">iflib_device_suspend</code></a>()</dt>
- <dd>Suspend a device by calling the device dependent suspend function and
- bus_generic_suspend.</dd>
- <dt id="iflib_device_resume"><a class="permalink" href="#iflib_device_resume"><code class="Fn">iflib_device_resume</code></a>()</dt>
- <dd>Resume a device by calling the device dependent resume function, the
- iflib_init_locked function, and bus_generic_resume.</dd>
- <dt id="iflib_device_register"><a class="permalink" href="#iflib_device_register"><code class="Fn">iflib_device_register</code></a>()</dt>
- <dd>Register a device with the iflib framework. Allocate and initialize the
- <i>if_ctx_t</i> structure. Setup and initialize the MSI or MSI/X interrupt
- queues if necessary. Allocate memory for queues and qset structure
- setup.</dd>
- <dt id="iflib_irq_alloc"><a class="permalink" href="#iflib_irq_alloc"><code class="Fn">iflib_irq_alloc</code></a>()</dt>
- <dd>Allocate an interrupt resource for a given rid value with an associated
- filter and handler function.</dd>
- <dt id="iflib_irq_alloc_generic"><a class="permalink" href="#iflib_irq_alloc_generic"><code class="Fn">iflib_irq_alloc_generic</code></a>()</dt>
- <dd>Performs the same function as iflib_device_irq_alloc along with the
- additional functionality of adding a taskgroup. The data fields and
- callback function are determined by the type of interrupt, such as
- <code class="Dv">IFLIB_INTR_TX</code>,
- <code class="Dv">IFLIB_INTR_RX</code>, and
- <code class="Dv">IFLIB_INTR_ADMIN</code>.</dd>
- <dt id="iflib_led_create"><a class="permalink" href="#iflib_led_create"><code class="Fn">iflib_led_create</code></a>()</dt>
- <dd>Calls led_create to initialize the ctx-&gt;ifc_led_dev field</dd>
- <dt id="iflib_tx_intr_deferred"><a class="permalink" href="#iflib_tx_intr_deferred"><code class="Fn">iflib_tx_intr_deferred</code></a>()</dt>
- <dd>Calls GROUPTASK_ENQUEUE to enqueue the transfer queues ift_task.</dd>
- <dt id="iflib_rx_intr_deferred"><a class="permalink" href="#iflib_rx_intr_deferred"><code class="Fn">iflib_rx_intr_deferred</code></a>()</dt>
- <dd>Calls GROUPTASK_ENQUEUE to enqueue the receive queues ifr_task.</dd>
- <dt id="iflib_link_intr_deferred"><a class="permalink" href="#iflib_link_intr_deferred"><code class="Fn">iflib_link_intr_deferred</code></a>()</dt>
- <dd>Calls GROUPTASK_ENQUEUE to enqueue the link task</dd>
- <dt id="iflib_link_state_change"><a class="permalink" href="#iflib_link_state_change"><code class="Fn">iflib_link_state_change</code></a>()</dt>
- <dd>Change the interface link status to either
- <code class="Dv">LINK_STATE_UP</code> or
- <code class="Dv">LINK_STATE_DOWN</code> as specified by the second
- argument to the function.
- <p class="Pp" id="Interface"><a class="permalink" href="#Interface"><i class="Em">Interface
- Link States</i></a> The following link states are currently defined:</p>
- </dd>
- <dt id="LINK_STATE_UP"><a class="permalink" href="#LINK_STATE_UP"><code class="Dv">LINK_STATE_UP</code></a></dt>
- <dd>The link is up.</dd>
- <dt id="LINK_STATE_DOWN"><a class="permalink" href="#LINK_STATE_DOWN"><code class="Dv">LINK_STATE_DOWN</code></a></dt>
- <dd>The link is down.</dd>
- <dt id="iflib_add_int_delay_sysctl"><a class="permalink" href="#iflib_add_int_delay_sysctl"><code class="Fn">iflib_add_int_delay_sysctl</code></a>()</dt>
- <dd>Modifies settings to user defined values for a given set of
- variables.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">iflibdd(9)</a>, <a class="Xr">iflibtxrx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nicole
- Graziano</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 21, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/iflibtxrx.9 3.html b/static/freebsd/man9/iflibtxrx.9 3.html
deleted file mode 100644
index f16a0d37..00000000
--- a/static/freebsd/man9/iflibtxrx.9 3.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFLIBTXTX(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IFLIBTXTX(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">iflibtxrx</code> &#x2014; <span class="Nd">Device
- Dependent Transmit and Receive Functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">ifdi_if.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Interface_Manipulation_Functions"><a class="permalink" href="#Interface_Manipulation_Functions">Interface
- Manipulation Functions</a></h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">isc_txd_encap</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">if_pkt_info_t pi</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">isc_txd_flush</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">uint16_t qid</var>, <var class="Fa">uint32_t
- _pidx_or_credits_</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">isc_txd_credits_update</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">uint16_t qid</var>, <var class="Fa">bool clear</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">isc_rxd_available</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint32_t
- cidx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">isc_rxd_refill</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint8_t flid</var>,
- <var class="Fa">uint32_t pidx</var>, <var class="Fa">uint64_t *paddrs</var>,
- <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint16_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">isc_rxd_flush</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint8_t flid</var>,
- <var class="Fa">uint32_t pidx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">isc_rxd_pkt_get</code>(<var class="Fa">void *sc</var>,
- <var class="Fa">if_rxd_info_t ri</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global
- Variables</a></h2>
-<p class="Pp"><var class="Vt">extern struct if_txrx</var></p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA
- STRUCTURES</a></h1>
-<p class="Pp">The device dependent mechanisms for handling packet transmit and
- receive are primarily defined by the functions named above. The if_pkt_info
- data structure contains statistics and identifying info necessary for packet
- transmission. While the data structure for packet receipt is the if_rxd_info
- structure.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_if_pkt_info_Structure"><a class="permalink" href="#The_if_pkt_info_Structure">The
- if_pkt_info Structure</a></h2>
-<p class="Pp">The fields of <var class="Vt">struct if_pkt_info</var> are as
- follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ipi_len"><var class="Va">ipi_len</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Denotes the size of packet to be sent on
- the transmit queue.</dd>
- <dt id="ipi_segs"><var class="Va">ipi_segs</var></dt>
- <dd>(<var class="Vt">bus_dma_segment_t *</var>) A pointer to the
- bus_dma_segment of the device independent transfer queue defined in
- iflib.</dd>
- <dt id="ipi_qsidx"><var class="Va">ipi_qsidx</var></dt>
- <dd>Unique index value assigned sequentially to each transmit queue. Used to
- reference the currently transmitting queue.</dd>
- <dt id="ipi_nsegs"><var class="Va">ipi_nsegs</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Number of descriptors to be read into the
- device dependent transfer descriptors.</dd>
- <dt id="ipi_ndescs"><var class="Va">ipi_ndescs</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Number of descriptors in use. Calculated
- by subtracting the old pidx value from the new pidx value.</dd>
- <dt id="ipi_flags"><var class="Va">ipi_flags</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Flags defined on a per packet basis.</dd>
- <dt id="ipi_pidx"><var class="Va">ipi_pidx</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Value of first pidx sent to the isc_encap
- function for encapsulation and subsequent transmission.</dd>
- <dt id="ipi_new_pidx"><var class="Va">ipi_new_pidx</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Value set after the termination of the
- isc_encap function. This value will become the first pidx sent to the
- isc-encap the next time that the function is called.</dd>
- <dt><var class="Va"><b>The</b> <b>Following</b> <b>Fields</b> <b>Are</b>
- <b>Used</b> <b>For</b> <b>Offload</b> <b>Handling</b></var></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="ipi_csum_flags"><var class="Va">ipi_csum_flags</var></dt>
- <dd>(<var class="Vt">uint64_t</var>) Flags describing the checksum values,
- used on a per packet basis.</dd>
- <dt id="ipi_tso_segsz"><var class="Va">ipi_tso_segsz</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Size of the TSO Segment Size.</dd>
- <dt id="ipi_mflags"><var class="Va">ipi_mflags</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Flags describing the operational
- parameters of the mbuf.</dd>
- <dt id="ipi_vtag"><var class="Va">ipi_vtag</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Contains the VLAN information in the
- Ethernet Frame.</dd>
- <dt id="ipi_etype"><var class="Va">ipi_etype</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Type of ethernet header protocol as
- contained by the struct ether_vlan_header.</dd>
- <dt id="ipi_ehrdlen"><var class="Va">ipi_ehrdlen</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Length of the Ethernet Header.</dd>
- <dt id="ipi_ip_hlen"><var class="Va">ipi_ip_hlen</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Length of the TCP Header</dd>
- <dt id="ipi_tcp_hlen"><var class="Va">ipi_tcp_hlen</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Length of the TCP Header.</dd>
- <dt id="ipi_tcp_hflags"><var class="Va">ipi_tcp_hflags</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Flags describing the operational
- parameters of the TCP Header.</dd>
- <dt id="ipi_ipproto"><var class="Va">ipi_ipproto</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Specifies the type of IP Protocol in use.
- Example TCP, UDP, or SCTP.</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_if_rxd_info_Structure"><a class="permalink" href="#The_if_rxd_info_Structure">The
- if_rxd_info Structure</a></h2>
-<p class="Pp">The fields of <var class="Vt">struct if_rxd_info</var> are as
- follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="iri_qsidx"><var class="Va">iri_qsidx</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Unique index value assigned sequentially
- to each receive queue. Used to reference the currently receiving
- queue.</dd>
- <dt id="iri_vtag"><var class="Va">iri_vtag</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Contains the VLAN information in the
- Ethernet Frame.</dd>
- <dt id="iri_len"><var class="Va">iri_len</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Denotes the size of a received
- packet.</dd>
- <dt id="iri_next_offset"><var class="Va">iri_next_offset</var></dt>
- <dd>(<var class="Vt">uint16_t</var>) Denotes the offset value for the next
- packet to be receive. A Null value signifies the end of packet.</dd>
- <dt id="iri_cidx"><var class="Va">iri_cidx</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Denotes the index value of the packet
- currently being processed in the consumer queue.</dd>
- <dt id="iri_flowid"><var class="Va">iri_flowid</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Value of the RSS hash for the
- packet.</dd>
- <dt id="iri_flags"><var class="Va">iri_flags</var></dt>
- <dd>(<var class="Vt">uint</var>)
- <br/>
- Flags describing the operational parameters of the mbuf contained in the
- <br/>
- receive packet.</dd>
- <dt id="iri_csum_flags"><var class="Va">iri_csum_flags</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Flags describing the checksum value
- contained in the receive packet.</dd>
- <dt id="iri_csum_data"><var class="Va">iri_csum_data</var></dt>
- <dd>(<var class="Vt">uint32_t</var>) Checksum data contained in the
- <a class="Xr">mbuf(9)</a> packet header.</dd>
- <dt id="iri_m"><var class="Va">iri_m</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A mbuf for drivers that manage their
- own receive queues.</dd>
- <dt id="iri_ifp"><var class="Va">iri_ifp</var></dt>
- <dd>(<var class="Vt">struct ifnet *</var>) A link back to the interface
- structure. Utilized by drivers that have multiple interface per
- softc.</dd>
- <dt id="iri_rsstype"><var class="Va">iri_rsstype</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) The value of the RSS hash type.</dd>
- <dt id="iri_pad"><var class="Va">iri_pad</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) The length of any padding contained by the
- received data.</dd>
- <dt id="iri_qidx"><var class="Va">iri_qidx</var></dt>
- <dd>(<var class="Vt">uint8_t</var>) Represents the type of queue event. If
- value &gt;= 0 then it is the freelist id otherwise it is a completion
- queue event.</dd>
-</dl>
-</div>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">All function calls are associated exclusively with either packet
- transmission or receipt. The void *sc passed as the first argument to all of
- the following functions represents the driver's softc.</p>
-<section class="Ss">
-<h2 class="Ss" id="Transmit_Packet_Functions"><a class="permalink" href="#Transmit_Packet_Functions">Transmit
- Packet Functions</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="isc_txd_encap"><a class="permalink" href="#isc_txd_encap"><code class="Fn">isc_txd_encap</code></a>()</dt>
- <dd>Transmit function that sends a packet on an interface. The if_pkt_info
- data structure contains data information fields describing the packet.
- This function returns 0 if successful, otherwise an error value is
- returned.</dd>
- <dt id="isc_txd_flush"><a class="permalink" href="#isc_txd_flush"><code class="Fn">isc_txd_flush</code></a>()</dt>
- <dd>Flush function is called immediately after the isc_txd_encap function
- transmits a packet. It updates the hardware producer index or increments
- the descriptors used to pidx_or_credits in the queue designated by the qid
- number. This is often referred to as poking the doorbell register.</dd>
- <dt id="isc_txd_credits_update"><a class="permalink" href="#isc_txd_credits_update"><code class="Fn">isc_txd_credits_update</code></a>()</dt>
- <dd>Credit function advances the buffer ring and calculates the credits
- (descriptors) processed. Until the I/O is complete it cleans the range in
- case of multisegments and updates the count of processed packets. The
- function returns the number of processed credits.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Receive_Packet_Functions"><a class="permalink" href="#Receive_Packet_Functions">Receive
- Packet Functions</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="isc_rxd_available"><a class="permalink" href="#isc_rxd_available"><code class="Fn">isc_rxd_available</code></a>()</dt>
- <dd>Function calculates the remaining number of descriptors from a position
- given by idx. The function returns this value.</dd>
- <dt id="isc_rxd_refill"><a class="permalink" href="#isc_rxd_refill"><code class="Fn">isc_rxd_refill</code></a>()</dt>
- <dd>Starting with the physical address paddrs, the function reads a packet
- into the rx_ring until a value designated by count is reached. vaddrs is
- typically not needed and is provided for devices that place their own
- metadata in the packet header.</dd>
- <dt id="isc_rxd_flush"><a class="permalink" href="#isc_rxd_flush"><code class="Fn">isc_rxd_flush</code></a>()</dt>
- <dd>Flush function updates the producer pointer on the free list flid in queue
- set number qid to pidx to reflect the presence of new buffers.</dd>
- <dt id="isc_rxd_pkt_get"><a class="permalink" href="#isc_rxd_pkt_get"><code class="Fn">isc_rxd_pkt_get</code></a>()</dt>
- <dd>Process a single software descriptor. rxr-&gt;rx_base[i] contains a
- descriptor that describes a received packet. Hardware specific information
- about the buffer referred to by ri is returned in the data structure
- if_rxd_info</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">iflibdd(9)</a>, <a class="Xr">iflibdi(9)</a>,
- <a class="Xr">mbuf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nicole
- Graziano</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 17, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ifnet.9 3.html b/static/freebsd/man9/ifnet.9 3.html
deleted file mode 100644
index dbf27192..00000000
--- a/static/freebsd/man9/ifnet.9 3.html
+++ /dev/null
@@ -1,1731 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFNET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">IFNET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">if_t</code>, <code class="Nm">ifnet</code>,
- <code class="Nm">ifaddr</code>, <code class="Nm">ifqueue</code>,
- <code class="Nm">if_data</code> &#x2014; <span class="Nd">kernel interfaces
- for manipulating network interfaces</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/time.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socket.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if_var.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/if_types.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss">Interface Manipulation Functions</h2>
-<p class="Pp"><var class="Ft">if_t</var>
- <br/>
- <code class="Fn">if_alloc</code>(<var class="Fa" style="white-space: nowrap;">u_char
- type</var>);</p>
-<p class="Pp"><var class="Ft">if_t</var>
- <br/>
- <code class="Fn">if_alloc_dev</code>(<var class="Fa" style="white-space: nowrap;">u_char
- type</var>, <var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">if_t</var>
- <br/>
- <code class="Fn">if_alloc_domain</code>(<var class="Fa" style="white-space: nowrap;">u_char
- type</var>, <var class="Fa" style="white-space: nowrap;">int
- numa_domain</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_attach</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_detach</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_free</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_free_type</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">u_char
- type</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_down</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifioctl</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">u_long
- cmd</var>, <var class="Fa" style="white-space: nowrap;">caddr_t data</var>,
- <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ifpromisc</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- pswitch</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_allmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- amswitch</var>);</p>
-<p class="Pp"><var class="Ft">if_t</var>
- <br/>
- <code class="Fn">ifunit</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">if_t</var>
- <br/>
- <code class="Fn">ifunit_ref</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_up</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interface Address Functions</h2>
-<p class="Pp"><var class="Ft">struct ifaddr *</var>
- <br/>
- <code class="Fn">ifa_ifwithaddr</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockaddr *addr</var>);</p>
-<p class="Pp"><var class="Ft">struct ifaddr *</var>
- <br/>
- <code class="Fn">ifa_ifwithdstaddr</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">int
- fib</var>);</p>
-<p class="Pp"><var class="Ft">struct ifaddr *</var>
- <br/>
- <code class="Fn">ifa_ifwithnet</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">int
- ignore_ptp</var>, <var class="Fa" style="white-space: nowrap;">int
- fib</var>);</p>
-<p class="Pp"><var class="Ft">struct ifaddr *</var>
- <br/>
- <code class="Fn">ifaof_ifpforaddr</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifa_ref</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaddr *ifa</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">ifa_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifaddr *ifa</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interface Multicast Address Functions</h2>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_addmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr
- *sa</var>, <var class="Fa" style="white-space: nowrap;">struct ifmultiaddr
- **ifmap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_delmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr
- *sa</var>);</p>
-<p class="Pp"><var class="Ft">struct ifmultiaddr *</var>
- <br/>
- <code class="Fn">if_findmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr
- *sa</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Output_queue_accessors"><a class="permalink" href="#Output_queue_accessors">Output
- queue accessors</a></h2>
-<p class="Pp"><code class="Fn">if_dequeue</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Output_queue_macros"><a class="permalink" href="#Output_queue_macros">Output
- queue macros</a></h2>
-<p class="Pp"><code class="Fn">IF_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct
- ifqueue *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="if_t_accesors"><a class="permalink" href="#if_t_accesors">if_t
- accesors</a></h2>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">if_setbaudrate</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- baudrate</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">if_getbaudrate</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapabilities</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- capabilities</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapabilitiesbit</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int setbit</var>,
- <var class="Fa" style="white-space: nowrap;">int clearbit</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getcapabilities</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_togglecapenable</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- togglecap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapenable</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- capenable</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapenablebit</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int setcap</var>,
- <var class="Fa" style="white-space: nowrap;">int clearcap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getcapenable</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapabilities2</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- capabilities</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapabilities2bit</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int setbit</var>,
- <var class="Fa" style="white-space: nowrap;">int clearbit</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getcapabilities2</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_togglecapenable2</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- togglecap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapenable2</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- capenable</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setcapenable2bit</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int setcap</var>,
- <var class="Fa" style="white-space: nowrap;">int clearcap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getcapenable2</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getdunit</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getindex</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getidxgen</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">if_getdname</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setdname</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">if_name</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setname</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setdescr</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">char
- *descrbuf</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">if_allocdescr</code>(<var class="Fa" style="white-space: nowrap;">size_t
- sz</var>, <var class="Fa" style="white-space: nowrap;">int
- malloc_flag</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_freedescr</code>(<var class="Fa" style="white-space: nowrap;">char
- *descrbuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getalloctype</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_gettype</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setdev</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">void
- *dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setdrvflagbits</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- if_setflags</var>, <var class="Fa" style="white-space: nowrap;">int
- clear_flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getdrvflags</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setdrvflags</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getlinkstate</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_clearhwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sethwassistbits</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int toset</var>,
- <var class="Fa" style="white-space: nowrap;">int toclear</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sethwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- hwassist_bit</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_gethwassist</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_togglehwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- toggle_bits</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">void
- *softc</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">if_getsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setllsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">void
- *softc</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">if_getllsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">if_getfib</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">if_getaddrlen</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_gethwaddr</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>, <var class="Fa" style="white-space: nowrap;">struct ifreq
- *</var>);</p>
-<p class="Pp"><var class="Ft">const uint8_t *</var>
- <br/>
- <code class="Fn">if_getbroadcastaddr</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setbroadcastaddr</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t
- *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setmtu</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int mtu</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getmtu</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getmtu_family</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- family</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_notifymtu</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setflagbits</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int set</var>,
- <var class="Fa" style="white-space: nowrap;">int clear</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setflags</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getflags</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_getnumadomain</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sendq_empty</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setsendqready</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setsendqlen</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int
- tx_desc_count</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sethwtsomax</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- if_hw_tsomax</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sethwtsomaxsegcount</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- if_hw_tsomaxsegcount</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sethwtsomaxsegsize</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- if_hw_tsomaxsegsize</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">if_gethwtsomax</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">if_gethwtsomaxsegcount</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">if_gethwtsomaxsegsize</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setnetmapadapter</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct
- netmap_adapter *na</var>);</p>
-<p class="Pp"><var class="Ft">struct netmap_adapter *</var>
- <br/>
- <code class="Fn">if_getnetmapadapter</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_input</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf*
- sendmp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_sendq_prepend</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">if_dequeue</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_setifheaderlen</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setrcvif</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setvtag</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">u_int16_t
- tag</var>);</p>
-<p class="Pp"><var class="Ft">u_int16_t</var>
- <br/>
- <code class="Fn">if_getvtag</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_vlantrunkinuse</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">caddr_t</var>
- <br/>
- <code class="Fn">if_getlladdr</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">struct vnet *</var>
- <br/>
- <code class="Fn">if_getvnet</code>(<var class="Fa" style="white-space: nowrap;">const
- if_t ifp</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">if_gethandle</code>(<var class="Fa" style="white-space: nowrap;">u_char</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_bpfmtap</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_etherbpfmtap</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_vlancap</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_transmit</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_init</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">void
- *ctx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">if_resolvemulti</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr
- **</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr
- *</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">if_getcounter</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">ift_counter
- counter</var>);</p>
-<p class="Pp"><var class="Ft">struct label *</var>
- <br/>
- <code class="Fn">if_getmaclabel</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">if_setmaclabel</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct label
- *label</var>);</p>
-<p class="Pp"><var class="Ft">struct bpf_if *</var>
- <br/>
- <code class="Fn">if_getbpf</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">if_getpcp</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">if_getl2com</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">struct ifvlantrunk *</var>
- <br/>
- <code class="Fn">if_getvlantrunk</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">if_altq_is_enabled</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="struct_ifnet_Member_Functions"><a class="permalink" href="#struct_ifnet_Member_Functions">struct
- ifnet Member Functions</a></h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">(*if_input)</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">(*if_output)</code>(<var class="Fa">if_t ifp</var>,
- <var class="Fa">struct mbuf *m</var>, <var class="Fa">const struct sockaddr
- *dst</var>, <var class="Fa">struct route *ro</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">(*if_start)</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">(*if_transmit)</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">(*if_qflush)</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">(*if_ioctl)</code>(<var class="Fa" style="white-space: nowrap;">if_t
- ifp</var>, <var class="Fa" style="white-space: nowrap;">u_long cmd</var>,
- <var class="Fa" style="white-space: nowrap;">caddr_t data</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">(*if_init)</code>(<var class="Fa" style="white-space: nowrap;">void
- *if_softc</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">(*if_resolvemulti)</code>(<var class="Fa">if_t ifp</var>,
- <var class="Fa">struct sockaddr **retsa</var>, <var class="Fa">struct
- sockaddr *addr</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="struct_ifaddr_member_function"><a class="permalink" href="#struct_ifaddr_member_function">struct
- ifaddr member function</a></h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">(*ifa_rtrequest)</code>(<var class="Fa">int cmd</var>,
- <var class="Fa">struct rtentry *rt</var>, <var class="Fa">struct rt_addrinfo
- *info</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global
- Variables</a></h2>
-<p class="Pp"><var class="Vt">extern struct ifnethead ifnet</var>;
- <br/>
- <var class="Vt">extern int if_index</var>;
- <br/>
- <var class="Vt">extern int ifqmaxlen</var>;</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA
- STRUCTURES</a></h1>
-<p class="Pp">The kernel mechanisms for handling network interfaces reside
- primarily in the <var class="Vt">ifnet</var>, <var class="Vt">if_data</var>,
- <var class="Vt">ifaddr</var>, and <var class="Vt">ifmultiaddr</var>
- structures in <code class="In">&lt;<a class="In">net/if.h</a>&gt;</code> and
- <code class="In">&lt;<a class="In">net/if_var.h</a>&gt;</code> and the
- functions named above and defined in <span class="Pa">/sys/net/if.c</span>.
- Those interfaces which are intended to be used by user programs are defined
- in <code class="In">&lt;<a class="In">net/if.h</a>&gt;</code>; these include
- the interface flags, the <var class="Vt">if_data</var> structure, and the
- structures defining the appearance of interface-related messages on the
- <a class="Xr">route(4)</a> routing socket and in
- <a class="Xr">sysctl(3)</a>. The header file
- <code class="In">&lt;<a class="In">net/if_var.h</a>&gt;</code> defines the
- kernel-internal interfaces, including the <var class="Vt">ifnet</var>,
- <var class="Vt">ifaddr</var>, and <var class="Vt">ifmultiaddr</var>
- structures and the functions which manipulate them. (A few user programs
- will need <code class="In">&lt;<a class="In">net/if_var.h</a>&gt;</code>
- because it is the prerequisite of some other header file like
- <code class="In">&lt;<a class="In">netinet/if_ether.h</a>&gt;</code>. Most
- references to those two files in particular can be replaced by
- <code class="In">&lt;<a class="In">net/ethernet.h</a>&gt;</code>.)</p>
-<p class="Pp">The system keeps a linked list of interfaces using the
- <code class="Li">TAILQ</code> macros defined in <a class="Xr">queue(3)</a>;
- this list is headed by a <var class="Vt">struct ifnethead</var> called
- <var class="Va">ifnet</var>. The elements of this list are of type
- <var class="Vt">struct ifnet</var>, and most kernel routines which
- manipulate interface as such accept or return pointers to these structures.
- Each interface structure contains an <var class="Vt">if_data</var> structure
- used for statistics and information. Each interface also has a
- <code class="Li">TAILQ</code> of interface addresses, described by
- <var class="Vt">ifaddr</var> structures. An <code class="Dv">AF_LINK</code>
- address (see <a class="Xr">link_addr(3)</a>) describing the link layer
- implemented by the interface (if any) is accessed by the
- <var class="Va">if_addr</var> structure. (Some trivial interfaces do not
- provide any link layer addresses; this structure, while still present,
- serves only to identify the interface name and index.)</p>
-<p class="Pp">Finally, those interfaces supporting reception of multicast
- datagrams have a <code class="Li">TAILQ</code> of multicast group
- memberships, described by <var class="Vt">ifmultiaddr</var> structures.
- These memberships are reference-counted.</p>
-<p class="Pp">Interfaces are also associated with an output queue, defined as a
- <var class="Vt">struct ifqueue</var>; this structure is used to hold packets
- while the interface is in the process of sending another.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_ifnet_accessors"><a class="permalink" href="#The_ifnet_accessors">The
- ifnet accessors</a></h2>
-<p class="Pp">The accessors for <var class="Vt">if_t</var> are as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="if_getbaudrate"><a class="permalink" href="#if_getbaudrate"><code class="Fn">if_getbaudrate</code></a>()
- <a class="permalink" href="#if_setbaudrate"><code class="Fn" id="if_setbaudrate">if_setbaudrate</code></a>()</dt>
- <dd>(<var class="Vt">u_long</var>) The line rate of the interface, in bits per
- second.</dd>
- <dt id="if_setcapabilities"><a class="permalink" href="#if_setcapabilities"><code class="Fn">if_setcapabilities</code></a>()
- <a class="permalink" href="#if_setcapabilitiesbit"><code class="Fn" id="if_setcapabilitiesbit">if_setcapabilitiesbit</code></a>()
- <a class="permalink" href="#if_getcapabilities"><code class="Fn" id="if_getcapabilities">if_getcapabilities</code></a>()</dt>
- <dd>(<var class="Vt">int</var>) Flags describing the capabilities the
- interface supports (see below).</dd>
- <dt id="if_getcapenable"><a class="permalink" href="#if_getcapenable"><code class="Fn">if_getcapenable</code></a>()
- <a class="permalink" href="#if_setcapenable"><code class="Fn" id="if_setcapenable">if_setcapenable</code></a>()
- <a class="permalink" href="#if_setcapenablebit"><code class="Fn" id="if_setcapenablebit">if_setcapenablebit</code></a>()
- <a class="permalink" href="#if_togglecapenable"><code class="Fn" id="if_togglecapenable">if_togglecapenable</code></a>()</dt>
- <dd>(<var class="Vt">int</var>) Flags describing the enabled capabilities of
- the interface (see below).</dd>
- <dt id="if_getcapabilities2"><a class="permalink" href="#if_getcapabilities2"><code class="Fn">if_getcapabilities2</code></a>()
- <a class="permalink" href="#if_setcapabilities2"><code class="Fn" id="if_setcapabilities2">if_setcapabilities2</code></a>()
- <a class="permalink" href="#if_setcapabilities2bit"><code class="Fn" id="if_setcapabilities2bit">if_setcapabilities2bit</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getcapenable2"><a class="permalink" href="#if_getcapenable2"><code class="Fn">if_getcapenable2</code></a>()
- <a class="permalink" href="#if_setcapenable2"><code class="Fn" id="if_setcapenable2">if_setcapenable2</code></a>()
- <a class="permalink" href="#if_setcapenable2bit"><code class="Fn" id="if_setcapenable2bit">if_setcapenable2bit</code></a>()
- <a class="permalink" href="#if_togglecapenable2"><code class="Fn" id="if_togglecapenable2">if_togglecapenable2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getdunit"><a class="permalink" href="#if_getdunit"><code class="Fn">if_getdunit</code></a>()</dt>
- <dd>(<var class="Vt">int</var>) A unique number assigned to each interface
- managed by a particular driver. Drivers may choose to set this to
- <code class="Dv">IF_DUNIT_NONE</code> if a unit number is not associated
- with the device. (Initialized by driver, usually via
- <a class="permalink" href="#if_initname"><code class="Fn" id="if_initname">if_initname</code></a>().)</dd>
- <dt id="if_getindex"><a class="permalink" href="#if_getindex"><code class="Fn">if_getindex</code></a>()</dt>
- <dd>(<var class="Vt">u_short</var>) Return the unique number assigned to the
- device when attached. This number can be used in a <var class="Vt">struct
- sockaddr_dl</var> to refer to a particular interface by index (see
- <a class="Xr">link_addr(3)</a>). This is initialized by
- <code class="Fn">if_alloc</code>().</dd>
- <dt id="if_getidxgen"><a class="permalink" href="#if_getidxgen"><code class="Fn">if_getidxgen</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getdname"><a class="permalink" href="#if_getdname"><code class="Fn">if_getdname</code></a>()
- <a class="permalink" href="#if_setdname"><code class="Fn" id="if_setdname">if_setdname</code></a>()</dt>
- <dd>(<var class="Ft">const char *</var>) The name of the driver. This is
- initialized by driver (usually via
- <code class="Fn">if_initname</code>()).</dd>
- <dt id="if_name"><a class="permalink" href="#if_name"><code class="Fn">if_name</code></a>()
- <a class="permalink" href="#if_setname"><code class="Fn" id="if_setname">if_setname</code></a>()</dt>
- <dd>(<var class="Vt">char *</var>) The name of the interface, (e.g.,
- &#x2018;<code class="Li">fxp0</code>&#x2019; or
- &#x201C;<code class="Li">lo0</code>&#x201D;). This is initialized by
- driver, usually via <code class="Fn">if_initname</code>().</dd>
- <dt id="if_getalloctype"><a class="permalink" href="#if_getalloctype"><code class="Fn">if_getalloctype</code></a>()</dt>
- <dd>(<var class="Ft">u_char</var>) The type of the interface as it was at the
- time of its allocation. It is used to cache the type passed to
- <code class="Fn">if_alloc</code>(), but unlike
- <var class="Va">if_type</var>, it would not be changed by drivers.</dd>
- <dt id="if_gettype"><a class="permalink" href="#if_gettype"><code class="Fn">if_gettype</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setdev"><a class="permalink" href="#if_setdev"><code class="Fn">if_setdev</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getdrvflags"><a class="permalink" href="#if_getdrvflags"><code class="Fn">if_getdrvflags</code></a>()
- <a class="permalink" href="#if_setdrvflags"><code class="Fn" id="if_setdrvflags">if_setdrvflags</code></a>()
- <a class="permalink" href="#if_setdrvflagbits"><code class="Fn" id="if_setdrvflagbits">if_setdrvflagbits</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getlinkstate"><a class="permalink" href="#if_getlinkstate"><code class="Fn">if_getlinkstate</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_clearhwassist"><a class="permalink" href="#if_clearhwassist"><code class="Fn">if_clearhwassist</code></a>()
- <a class="permalink" href="#if_sethwassistbits"><code class="Fn" id="if_sethwassistbits">if_sethwassistbits</code></a>()</dt>
- <dd><a class="permalink" href="#if_gethwassist"><code class="Fn" id="if_gethwassist">if_gethwassist</code></a>()
- <a class="permalink" href="#if_sethwassist"><code class="Fn" id="if_sethwassist">if_sethwassist</code></a>()
- <a class="permalink" href="#if_togglehwassist"><code class="Fn" id="if_togglehwassist">if_togglehwassist</code></a>()
- (<var class="Vt">u_long</var>) A detailed interpretation of the
- capabilities to offload computational tasks for <i class="Em">outgoing</i>
- packets. The interface driver must keep this field in accord with the
- current value of <var class="Va">if_capenable</var>.</dd>
- <dt id="if_getsoftc"><a class="permalink" href="#if_getsoftc"><code class="Fn">if_getsoftc</code></a>()
- <a class="permalink" href="#if_setsoftc"><code class="Fn" id="if_setsoftc">if_setsoftc</code></a>()</dt>
- <dd>(<var class="Ft">void *</var>) A pointer to the driver's private state
- block. This is initialized by driver at attach.</dd>
- <dt id="if_setllsoftc"><a class="permalink" href="#if_setllsoftc"><code class="Fn">if_setllsoftc</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getllsoftc"><a class="permalink" href="#if_getllsoftc"><code class="Fn">if_getllsoftc</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getfib"><a class="permalink" href="#if_getfib"><code class="Fn">if_getfib</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getaddrlen"><a class="permalink" href="#if_getaddrlen"><code class="Fn">if_getaddrlen</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_gethwaddr"><a class="permalink" href="#if_gethwaddr"><code class="Fn">if_gethwaddr</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getbroadcastaddr"><a class="permalink" href="#if_getbroadcastaddr"><code class="Fn">if_getbroadcastaddr</code></a>()
- <a class="permalink" href="#if_setbroadcastaddr"><code class="Fn" id="if_setbroadcastaddr">if_setbroadcastaddr</code></a>()</dt>
- <dd>Access the interface broadcast address.</dd>
- <dt id="if_setmtu"><a class="permalink" href="#if_setmtu"><code class="Fn">if_setmtu</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getmtu"><a class="permalink" href="#if_getmtu"><code class="Fn">if_getmtu</code></a>()</dt>
- <dd>Access the interface MTU.</dd>
- <dt id="if_setflags"><a class="permalink" href="#if_setflags"><code class="Fn">if_setflags</code></a>()
- <a class="permalink" href="#if_getflags"><code class="Fn" id="if_getflags">if_getflags</code></a>()
- <a class="permalink" href="#if_setflagbits"><code class="Fn" id="if_setflagbits">if_setflagbits</code></a>()</dt>
- <dd>(<var class="Vt">int</var>) Flags describing operational parameters of
- this interface (see below). These flags are manipulated by generic
- code.</dd>
- <dt id="if_getnumadomain"><a class="permalink" href="#if_getnumadomain"><code class="Fn">if_getnumadomain</code></a>()</dt>
- <dd>(<var class="Vt">uint8_t</var>) The NUMA domain of the hardware device
- associated with the interface. This is filled in with a wildcard value
- unless the kernel is NUMA aware, the system is a NUMA system, and the
- ifnet is allocated using <code class="Fn">if_alloc_dev</code>() or
- <code class="Fn">if_alloc_domain</code>().</dd>
- <dt id="if_sendq_empty"><a class="permalink" href="#if_sendq_empty"><code class="Fn">if_sendq_empty</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setsendqready"><a class="permalink" href="#if_setsendqready"><code class="Fn">if_setsendqready</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setsendqlen"><a class="permalink" href="#if_setsendqlen"><code class="Fn">if_setsendqlen</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_sethwtsomax"><a class="permalink" href="#if_sethwtsomax"><code class="Fn">if_sethwtsomax</code></a>()
- <a class="permalink" href="#if_gethwtsomax"><code class="Fn" id="if_gethwtsomax">if_gethwtsomax</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_sethwtsomaxsegcount"><a class="permalink" href="#if_sethwtsomaxsegcount"><code class="Fn">if_sethwtsomaxsegcount</code></a>()
- <a class="permalink" href="#if_gethwtsomaxsegcount"><code class="Fn" id="if_gethwtsomaxsegcount">if_gethwtsomaxsegcount</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_sethwtsomaxsegsize"><a class="permalink" href="#if_sethwtsomaxsegsize"><code class="Fn">if_sethwtsomaxsegsize</code></a>()
- <a class="permalink" href="#if_gethwtsomaxsegsize"><code class="Fn" id="if_gethwtsomaxsegsize">if_gethwtsomaxsegsize</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setnetmapadapter"><a class="permalink" href="#if_setnetmapadapter"><code class="Fn">if_setnetmapadapter</code></a>()
- <a class="permalink" href="#if_getnetmapadapter"><code class="Fn" id="if_getnetmapadapter">if_getnetmapadapter</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setifheaderlen"><a class="permalink" href="#if_setifheaderlen"><code class="Fn">if_setifheaderlen</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setrcvif"><a class="permalink" href="#if_setrcvif"><code class="Fn">if_setrcvif</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_setvtag"><a class="permalink" href="#if_setvtag"><code class="Fn">if_setvtag</code></a>()
- <a class="permalink" href="#if_getvtag"><code class="Fn" id="if_getvtag">if_getvtag</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_vlantrunkinuse"><a class="permalink" href="#if_vlantrunkinuse"><code class="Fn">if_vlantrunkinuse</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getlladdr"><a class="permalink" href="#if_getlladdr"><code class="Fn">if_getlladdr</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getvnet"><a class="permalink" href="#if_getvnet"><code class="Fn">if_getvnet</code></a>()</dt>
- <dd>(<var class="Vt">struct vnet *</var>) A pointer to the virtual network
- stack instance. This is initialized by
- <code class="Fn">if_attach</code>().</dd>
- <dt id="if_gethandle"><a class="permalink" href="#if_gethandle"><code class="Fn">if_gethandle</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_vlancap"><a class="permalink" href="#if_vlancap"><code class="Fn">if_vlancap</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getcounter"><a class="permalink" href="#if_getcounter"><code class="Fn">if_getcounter</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getmaclabel"><a class="permalink" href="#if_getmaclabel"><code class="Fn">if_getmaclabel</code></a>()
- <a class="permalink" href="#if_setmaclabel"><code class="Fn" id="if_setmaclabel">if_setmaclabel</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getbpf"><a class="permalink" href="#if_getbpf"><code class="Fn">if_getbpf</code></a>()</dt>
- <dd>(<var class="Ft">struct bpf_if *</var>) Opaque per-interface data for the
- packet filter, <a class="Xr">bpf(4)</a>. This is initialized by
- <a class="permalink" href="#bpf_attach"><code class="Fn" id="bpf_attach">bpf_attach</code></a>().</dd>
- <dt id="if_getpcp"><a class="permalink" href="#if_getpcp"><code class="Fn">if_getpcp</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="if_getl2com"><a class="permalink" href="#if_getl2com"><code class="Fn">if_getl2com</code></a>()</dt>
- <dd>A pointer to the common data for the interface's layer 2 protocol. This is
- initialized by <code class="Fn">if_alloc</code>().
- <a class="permalink" href="#if_getvlantrunk"><code class="Fn" id="if_getvlantrunk">if_getvlantrunk</code></a>(<var class="Fa">if_t
- ifp</var>) (<var class="Ft">struct ifvlantrunk *</var>) A pointer to
- 802.1Q trunk structure, <a class="Xr">vlan(4)</a>. This is initialized by
- the driver-specific <code class="Fn">if_ioctl</code>() routine.</dd>
- <dt><code class="Fn">if_getdrvflags</code>()
- <code class="Fn">if_setdrvflags</code>()
- <code class="Fn">if_setdrvflagbits</code>()</dt>
- <dd>(<var class="Ft">int</var>) Flags describing operational status of this
- interface (see below). These flags are manipulated by driver.</dd>
- <dt><code class="Fn">if_addmulti</code>()
- <code class="Fn">if_delmulti</code>()
- <code class="Fn">if_findmulti</code>()</dt>
- <dd>Add, remove, and find multicast addresses assigned to this interface.</dd>
- <dt id="if_getifaddr"><a class="permalink" href="#if_getifaddr"><code class="Fn">if_getifaddr</code></a>()</dt>
- <dd>(<var class="Vt">struct ifaddr *</var>) Get a pointer to the interface's
- link-level address.</dd>
- <dt><code class="Fn">if_getbroadcastaddr</code>()
- <code class="Fn">if_setbroadcastaddr</code>()</dt>
- <dd>(<var class="Ft">const u_int8_t *</var>) A link-level broadcast bytestring
- for protocols with variable address length.</dd>
- <dt id="if_getafdata"><a class="permalink" href="#if_getafdata"><code class="Fn">if_getafdata</code></a>()</dt>
- <dd>(<var class="Ft">void *</var>) An address family dependent data
- region.</dd>
- <dt id="if_addgroup"><a class="permalink" href="#if_addgroup"><code class="Fn">if_addgroup</code></a>()
- <a class="permalink" href="#if_delgroup"><code class="Fn" id="if_delgroup">if_delgroup</code></a>()</dt>
- <dd>Add and delete groups from the interface.</dd>
-</dl>
-</div>
-<p class="Pp" id="if_ref">References to <var class="Vt">ifnet</var> structures
- are gained by calling the
- <a class="permalink" href="#if_ref"><code class="Fn">if_ref</code></a>()
- function and released by calling the
- <a class="permalink" href="#if_rele"><code class="Fn" id="if_rele">if_rele</code></a>()
- function. They are used to allow kernel code walking global interface lists
- to release the <var class="Vt">ifnet</var> lock yet keep the
- <var class="Vt">ifnet</var> structure stable.</p>
-<p class="Pp">There are in addition a number of function pointers which the
- driver must initialize to complete its interface with the generic interface
- layer:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="if_input"><a class="permalink" href="#if_input"><code class="Fn">if_input</code></a>()</dt>
- <dd>Pass a packet to an appropriate upper layer as determined from the
- link-layer header of the packet. This routine is to be called from an
- interrupt handler or used to emulate reception of a packet on this
- interface. A single function implementing
- <code class="Fn">if_input</code>() can be shared among multiple drivers
- utilizing the same link-layer framing, e.g., Ethernet.</dd>
- <dt id="if_output"><a class="permalink" href="#if_output"><code class="Fn">if_output</code></a>()</dt>
- <dd>Output a packet on interface <var class="Fa">ifp</var>, or queue it on the
- output queue if the interface is already active.</dd>
- <dt id="if_transmit"><a class="permalink" href="#if_transmit"><code class="Fn">if_transmit</code></a>()</dt>
- <dd>Transmit a packet on an interface or queue it if the interface is in use.
- This function will return <code class="Dv">ENOBUFS</code> if the devices
- software and hardware queues are both full. This function must be
- installed after <code class="Fn">if_attach</code>() to override the
- default implementation. This function is exposed in order to allow drivers
- to manage their own queues and to reduce the latency caused by a
- frequently gratuitous enqueue / dequeue pair to ifq. The suggested
- internal software queuing mechanism is buf_ring.</dd>
- <dt id="if_qflush"><a class="permalink" href="#if_qflush"><code class="Fn">if_qflush</code></a>()</dt>
- <dd>Free mbufs in internally managed queues when the interface is marked down.
- This function must be installed after <code class="Fn">if_attach</code>()
- to override the default implementation. This function is exposed in order
- to allow drivers to manage their own queues and to reduce the latency
- caused by a frequently gratuitous enqueue / dequeue pair to ifq. The
- suggested internal software queuing mechanism is buf_ring.</dd>
- <dt id="if_start"><a class="permalink" href="#if_start"><code class="Fn">if_start</code></a>()</dt>
- <dd>Start queued output on an interface. This function is exposed in order to
- provide for some interface classes to share a
- <code class="Fn">if_output</code>() among all drivers.
- <code class="Fn">if_start</code>() may only be called when the
- <code class="Dv">IFF_DRV_OACTIVE</code> flag is not set. (Thus,
- <code class="Dv">IFF_DRV_OACTIVE</code> does not literally mean that
- output is active, but rather that the device's internal output queue is
- full.) Please note that this function will soon be deprecated.</dd>
- <dt><code class="Fn">if_ioctl</code>()</dt>
- <dd>Process interface-related <a class="Xr">ioctl(2)</a> requests (defined in
- <code class="In">&lt;<a class="In">sys/sockio.h</a>&gt;</code>).
- Preliminary processing is done by the generic routine
- <code class="Fn">ifioctl</code>() to check for appropriate privileges,
- locate the interface being manipulated, and perform certain generic
- operations like twiddling flags and flushing queues. See the description
- of <code class="Fn">ifioctl</code>() below for more information.</dd>
- <dt id="if_init"><a class="permalink" href="#if_init"><code class="Fn">if_init</code></a>()</dt>
- <dd>Initialize and bring up the hardware, e.g., reset the chip and enable the
- receiver unit. Should mark the interface running, but not active
- (<code class="Dv">IFF_DRV_RUNNING</code>,
- <code class="Dv">~IIF_DRV_OACTIVE</code>).</dd>
- <dt><code class="Fn">if_resolvemulti</code>()</dt>
- <dd>Check the requested multicast group membership,
- <var class="Fa">addr</var>, for validity, and if necessary compute a
- link-layer group which corresponds to that address which is returned in
- <var class="Fa">*retsa</var>. Returns zero on success, or an error code on
- failure.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interface_Flags"><a class="permalink" href="#Interface_Flags">Interface
- Flags</a></h2>
-<p class="Pp">Interface flags are used for a number of different purposes. Some
- flags simply indicate information about the type of interface and its
- capabilities; others are dynamically manipulated to reflect the current
- state of the interface. Flags of the former kind are marked
- &#x27E8;S&#x27E9; in this table; the latter are marked &#x27E8;D&#x27E9;.
- Flags which begin with &#x201C;IFF_DRV_&#x201D; are stored in
- <var class="Va">if_drv_flags</var>; all other flags are stored in
- <var class="Va">if_flags</var>.</p>
-<p class="Pp">The macro <code class="Dv">IFF_CANTCHANGE</code> defines the bits
- which cannot be set by a user program using the
- <code class="Dv">SIOCSIFFLAGS</code> command to <a class="Xr">ioctl(2)</a>;
- these are indicated by an asterisk
- (&#x2018;<code class="Li">*</code>&#x2019;) in the following listing.</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="IFF_UP"><a class="permalink" href="#IFF_UP"><code class="Dv">IFF_UP</code></a></dt>
- <dd>&#x27E8;D&#x27E9; The interface has been configured up by the user-level
- code.</dd>
- <dt id="IFF_BROADCAST"><a class="permalink" href="#IFF_BROADCAST"><code class="Dv">IFF_BROADCAST</code></a></dt>
- <dd>&#x27E8;S*&#x27E9; The interface supports broadcast.</dd>
- <dt id="IFF_DEBUG"><a class="permalink" href="#IFF_DEBUG"><code class="Dv">IFF_DEBUG</code></a></dt>
- <dd>&#x27E8;D&#x27E9; Used to enable/disable driver debugging code.</dd>
- <dt id="IFF_LOOPBACK"><a class="permalink" href="#IFF_LOOPBACK"><code class="Dv">IFF_LOOPBACK</code></a></dt>
- <dd>&#x27E8;S&#x27E9; The interface is a loopback device.</dd>
- <dt id="IFF_POINTOPOINT"><a class="permalink" href="#IFF_POINTOPOINT"><code class="Dv">IFF_POINTOPOINT</code></a></dt>
- <dd>&#x27E8;S*&#x27E9; The interface is point-to-point;
- &#x201C;broadcast&#x201D; address is actually the address of the other
- end.</dd>
- <dt id="IFF_DRV_RUNNING"><a class="permalink" href="#IFF_DRV_RUNNING"><code class="Dv">IFF_DRV_RUNNING</code></a></dt>
- <dd>&#x27E8;D*&#x27E9; The interface has been configured and dynamic resources
- were successfully allocated. Probably only useful internal to the
- interface.</dd>
- <dt id="IFF_NOARP"><a class="permalink" href="#IFF_NOARP"><code class="Dv">IFF_NOARP</code></a></dt>
- <dd>&#x27E8;D&#x27E9; Disable network address resolution on this
- interface.</dd>
- <dt id="IFF_PROMISC"><a class="permalink" href="#IFF_PROMISC"><code class="Dv">IFF_PROMISC</code></a></dt>
- <dd>&#x27E8;D*&#x27E9; This interface is in promiscuous mode.</dd>
- <dt id="IFF_PPROMISC"><a class="permalink" href="#IFF_PPROMISC"><code class="Dv">IFF_PPROMISC</code></a></dt>
- <dd>&#x27E8;D&#x27E9; This interface is in the permanently promiscuous mode
- (implies <code class="Dv">IFF_PROMISC</code>).</dd>
- <dt id="IFF_ALLMULTI"><a class="permalink" href="#IFF_ALLMULTI"><code class="Dv">IFF_ALLMULTI</code></a></dt>
- <dd>&#x27E8;D*&#x27E9; This interface is in all-multicasts mode (used by
- multicast routers).</dd>
- <dt id="IFF_PALLMULTI"><a class="permalink" href="#IFF_PALLMULTI"><code class="Dv">IFF_PALLMULTI</code></a></dt>
- <dd>&#x27E8;D&#x27E9; This interface is in the permanently all-multicasts mode
- (implies <code class="Dv">IFF_ALLMULTI</code>).</dd>
- <dt id="IFF_DRV_OACTIVE"><a class="permalink" href="#IFF_DRV_OACTIVE"><code class="Dv">IFF_DRV_OACTIVE</code></a></dt>
- <dd>&#x27E8;D*&#x27E9; The interface's hardware output queue (if any) is full;
- output packets are to be queued.</dd>
- <dt id="IFF_SIMPLEX"><a class="permalink" href="#IFF_SIMPLEX"><code class="Dv">IFF_SIMPLEX</code></a></dt>
- <dd>&#x27E8;S*&#x27E9; The interface cannot hear its own transmissions.</dd>
- <dt id="IFF_LINK0"><a class="permalink" href="#IFF_LINK0"><code class="Dv">IFF_LINK0</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="IFF_LINK1"><a class="permalink" href="#IFF_LINK1"><code class="Dv">IFF_LINK1</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="IFF_LINK2"><a class="permalink" href="#IFF_LINK2"><code class="Dv">IFF_LINK2</code></a></dt>
- <dd>&#x27E8;D&#x27E9; Control flags for the link layer. (Currently abused to
- select among multiple physical layers on some devices.)</dd>
- <dt id="IFF_MULTICAST"><a class="permalink" href="#IFF_MULTICAST"><code class="Dv">IFF_MULTICAST</code></a></dt>
- <dd>&#x27E8;S*&#x27E9; This interface supports multicast.</dd>
- <dt id="IFF_CANTCONFIG"><a class="permalink" href="#IFF_CANTCONFIG"><code class="Dv">IFF_CANTCONFIG</code></a></dt>
- <dd>&#x27E8;S*&#x27E9; The interface is not configurable in a meaningful way.
- Primarily useful for <code class="Dv">IFT_USB</code> interfaces registered
- at the interface list.</dd>
- <dt id="IFF_MONITOR"><a class="permalink" href="#IFF_MONITOR"><code class="Dv">IFF_MONITOR</code></a></dt>
- <dd>&#x27E8;D&#x27E9; This interface blocks transmission of packets and
- discards incoming packets after BPF processing. Used to monitor network
- traffic but not interact with the network in question.</dd>
- <dt id="IFF_STATICARP"><a class="permalink" href="#IFF_STATICARP"><code class="Dv">IFF_STATICARP</code></a></dt>
- <dd>&#x27E8;D&#x27E9; Used to enable/disable ARP requests on this
- interface.</dd>
- <dt id="IFF_DYING"><a class="permalink" href="#IFF_DYING"><code class="Dv">IFF_DYING</code></a></dt>
- <dd>&#x27E8;D*&#x27E9; Set when the <var class="Vt">ifnet</var> structure of
- this interface is being released and still has
- <var class="Va">if_refcount</var> references.</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interface_Capabilities_Flags"><a class="permalink" href="#Interface_Capabilities_Flags">Interface
- Capabilities Flags</a></h2>
-<p class="Pp">Interface capabilities are specialized features an interface may
- or may not support. These capabilities are very hardware-specific and allow,
- when enabled, to offload specific network processing to the interface or to
- offer a particular feature for use by other kernel parts.</p>
-<p class="Pp" id="ifioctl">It should be stressed that a capability can be
- completely uncontrolled (i.e., stay always enabled with no way to disable
- it) or allow limited control over itself (e.g., depend on another
- capability's state.) Such peculiarities are determined solely by the
- hardware and driver of a particular interface. Only the driver possesses the
- knowledge on whether and how the interface capabilities can be controlled.
- Consequently, capabilities flags in <var class="Va">if_capenable</var>
- should never be modified directly by kernel code other than the interface
- driver. The command <code class="Dv">SIOCSIFCAP</code> to
- <a class="permalink" href="#ifioctl"><code class="Fn">ifioctl</code></a>()
- is the dedicated means to attempt altering
- <var class="Va">if_capenable</var> on an interface. Userland code shall use
- <a class="Xr">ioctl(2)</a>.</p>
-<p class="Pp">The following capabilities are currently supported by the
- system:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="IFCAP_RXCSUM"><a class="permalink" href="#IFCAP_RXCSUM"><code class="Dv">IFCAP_RXCSUM</code></a></dt>
- <dd>This interface can do checksum validation on receiving data. Some
- interfaces do not have sufficient buffer storage to store frames above a
- certain MTU-size completely. The driver for the interface might disable
- hardware checksum validation if the MTU is set above the hardcoded
- limit.</dd>
- <dt id="IFCAP_TXCSUM"><a class="permalink" href="#IFCAP_TXCSUM"><code class="Dv">IFCAP_TXCSUM</code></a></dt>
- <dd>This interface can do checksum calculation on transmitting data.</dd>
- <dt id="IFCAP_HWCSUM"><a class="permalink" href="#IFCAP_HWCSUM"><code class="Dv">IFCAP_HWCSUM</code></a></dt>
- <dd>A shorthand for (<code class="Dv">IFCAP_RXCSUM</code> |
- <code class="Dv">IFCAP_TXCSUM</code>).</dd>
- <dt id="IFCAP_NETCONS"><a class="permalink" href="#IFCAP_NETCONS"><code class="Dv">IFCAP_NETCONS</code></a></dt>
- <dd>This interface can be a network console.</dd>
- <dt id="IFCAP_VLAN_MTU"><a class="permalink" href="#IFCAP_VLAN_MTU"><code class="Dv">IFCAP_VLAN_MTU</code></a></dt>
- <dd>The <a class="Xr">vlan(4)</a> driver can operate over this interface in
- software tagging mode without having to decrease MTU on
- <a class="Xr">vlan(4)</a> interfaces below 1500 bytes. This implies the
- ability of this interface to cope with frames somewhat longer than
- permitted by the Ethernet specification.</dd>
- <dt id="IFCAP_VLAN_HWTAGGING"><a class="permalink" href="#IFCAP_VLAN_HWTAGGING"><code class="Dv">IFCAP_VLAN_HWTAGGING</code></a></dt>
- <dd>This interface can do VLAN tagging on output and demultiplex frames by
- their VLAN tag on input.</dd>
- <dt id="IFCAP_JUMBO_MTU"><a class="permalink" href="#IFCAP_JUMBO_MTU"><code class="Dv">IFCAP_JUMBO_MTU</code></a></dt>
- <dd>This Ethernet interface can transmit and receive frames up to 9000 bytes
- long.</dd>
- <dt id="IFCAP_POLLING"><a class="permalink" href="#IFCAP_POLLING"><code class="Dv">IFCAP_POLLING</code></a></dt>
- <dd>This interface supports <a class="Xr">polling(4)</a>. See below for
- details.</dd>
- <dt id="IFCAP_VLAN_HWCSUM"><a class="permalink" href="#IFCAP_VLAN_HWCSUM"><code class="Dv">IFCAP_VLAN_HWCSUM</code></a></dt>
- <dd>This interface can do checksum calculation on both transmitting and
- receiving data on <a class="Xr">vlan(4)</a> interfaces (implies
- <code class="Dv">IFCAP_HWCSUM</code>).</dd>
- <dt id="IFCAP_TSO4"><a class="permalink" href="#IFCAP_TSO4"><code class="Dv">IFCAP_TSO4</code></a></dt>
- <dd>This Ethernet interface supports TCP4 Segmentation offloading.</dd>
- <dt id="IFCAP_TSO6"><a class="permalink" href="#IFCAP_TSO6"><code class="Dv">IFCAP_TSO6</code></a></dt>
- <dd>This Ethernet interface supports TCP6 Segmentation offloading.</dd>
- <dt id="IFCAP_TSO"><a class="permalink" href="#IFCAP_TSO"><code class="Dv">IFCAP_TSO</code></a></dt>
- <dd>A shorthand for (<code class="Dv">IFCAP_TSO4</code> |
- <code class="Dv">IFCAP_TSO6</code>).</dd>
- <dt id="IFCAP_TOE4"><a class="permalink" href="#IFCAP_TOE4"><code class="Dv">IFCAP_TOE4</code></a></dt>
- <dd>This Ethernet interface supports TCP4 Offload Engine.</dd>
- <dt id="IFCAP_TOE6"><a class="permalink" href="#IFCAP_TOE6"><code class="Dv">IFCAP_TOE6</code></a></dt>
- <dd>This Ethernet interface supports TCP6 Offload Engine.</dd>
- <dt id="IFCAP_TOE"><a class="permalink" href="#IFCAP_TOE"><code class="Dv">IFCAP_TOE</code></a></dt>
- <dd>A shorthand for (<code class="Dv">IFCAP_TOE4</code> |
- <code class="Dv">IFCAP_TOE6</code>).</dd>
- <dt id="IFCAP_WOL_UCAST"><a class="permalink" href="#IFCAP_WOL_UCAST"><code class="Dv">IFCAP_WOL_UCAST</code></a></dt>
- <dd>This Ethernet interface supports waking up on any Unicast packet.</dd>
- <dt id="IFCAP_WOL_MCAST"><a class="permalink" href="#IFCAP_WOL_MCAST"><code class="Dv">IFCAP_WOL_MCAST</code></a></dt>
- <dd>This Ethernet interface supports waking up on any Multicast packet.</dd>
- <dt id="IFCAP_WOL_MAGIC"><a class="permalink" href="#IFCAP_WOL_MAGIC"><code class="Dv">IFCAP_WOL_MAGIC</code></a></dt>
- <dd>This Ethernet interface supports waking up on any Magic packet such as
- those sent by <a class="Xr">wake(8)</a>.</dd>
- <dt id="IFCAP_WOL"><a class="permalink" href="#IFCAP_WOL"><code class="Dv">IFCAP_WOL</code></a></dt>
- <dd>A shorthand for (<code class="Dv">IFCAP_WOL_UCAST</code> |
- <code class="Dv">IFCAP_WOL_MCAST</code> |
- <code class="Dv">IFCAP_WOL_MAGIC</code>).</dd>
- <dt id="IFCAP_VLAN_HWFILTER"><a class="permalink" href="#IFCAP_VLAN_HWFILTER"><code class="Dv">IFCAP_VLAN_HWFILTER</code></a></dt>
- <dd>This interface supports frame filtering in hardware on
- <a class="Xr">vlan(4)</a> interfaces.</dd>
- <dt id="IFCAP_VLAN_HWTSO"><a class="permalink" href="#IFCAP_VLAN_HWTSO"><code class="Dv">IFCAP_VLAN_HWTSO</code></a></dt>
- <dd>This interface supports TCP Segmentation offloading on
- <a class="Xr">vlan(4)</a> interfaces (implies
- <code class="Dv">IFCAP_TSO</code>).</dd>
- <dt id="IFCAP_LINKSTATE"><a class="permalink" href="#IFCAP_LINKSTATE"><code class="Dv">IFCAP_LINKSTATE</code></a></dt>
- <dd>This Ethernet interface supports dynamic link state changes.</dd>
- <dt id="IFCAP_NETMAP"><a class="permalink" href="#IFCAP_NETMAP"><code class="Dv">IFCAP_NETMAP</code></a></dt>
- <dd>This Ethernet interface supports <a class="Xr">netmap(4)</a>.</dd>
-</dl>
-</div>
-<p class="Pp">The ability of advanced network interfaces to offload certain
- computational tasks from the host CPU to the board is limited mostly to
- TCP/IP. Therefore a separate field associated with an interface (see
- <var class="Va">ifnet.if_data.ifi_hwassist</var> below) keeps a detailed
- description of its enabled capabilities specific to TCP/IP processing. The
- TCP/IP module consults the field to see which tasks can be done on an
- <i class="Em">outgoing</i> packet by the interface. The flags defined for
- that field are a superset of those for
- <var class="Va">mbuf.m_pkthdr.csum_flags</var>, namely:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="CSUM_IP"><a class="permalink" href="#CSUM_IP"><code class="Dv">CSUM_IP</code></a></dt>
- <dd>The interface will compute IP checksums.</dd>
- <dt id="CSUM_TCP"><a class="permalink" href="#CSUM_TCP"><code class="Dv">CSUM_TCP</code></a></dt>
- <dd>The interface will compute TCP checksums.</dd>
- <dt id="CSUM_UDP"><a class="permalink" href="#CSUM_UDP"><code class="Dv">CSUM_UDP</code></a></dt>
- <dd>The interface will compute UDP checksums.</dd>
-</dl>
-</div>
-<p class="Pp" id="incoming">An interface notifies the TCP/IP module about the
- tasks the former has performed on an
- <a class="permalink" href="#incoming"><i class="Em">incoming</i></a> packet
- by setting the corresponding flags in the field
- <var class="Va">mbuf.m_pkthdr.csum_flags</var> of the <var class="Vt">mbuf
- chain</var> containing the packet. See <a class="Xr">mbuf(9)</a> for
- details.</p>
-<p class="Pp" id="ifioctl~2">The capability of a network interface to operate in
- <a class="Xr">polling(4)</a> mode involves several flags in different global
- variables and per-interface fields. The capability flag
- <code class="Dv">IFCAP_POLLING</code> set in interface's
- <var class="Va">if_capabilities</var> indicates support for
- <a class="Xr">polling(4)</a> on the particular interface. If set in
- <var class="Va">if_capabilities</var>, the same flag can be marked or
- cleared in the interface's <var class="Va">if_capenable</var> within
- <a class="permalink" href="#ifioctl~2"><code class="Fn">ifioctl</code></a>(),
- thus initiating switch of the interface to <a class="Xr">polling(4)</a> mode
- or interrupt mode, respectively. The actual mode change is managed by the
- driver-specific <code class="Fn">if_ioctl</code>() routine. The
- <a class="Xr">polling(4)</a> handler returns the number of packets
- processed.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_if_data_Structure"><a class="permalink" href="#The_if_data_Structure">The
- if_data Structure</a></h2>
-<p class="Pp">The <var class="Vt">if_data</var> structure contains statistics
- and identifying information used by management programs, and which is
- exported to user programs by way of the <a class="Xr">ifmib(4)</a> branch of
- the <a class="Xr">sysctl(3)</a> MIB. The following elements of the
- <var class="Vt">if_data</var> structure are initialized by the interface and
- are not expected to change significantly over the course of normal
- operation:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ifi_type"><var class="Va">ifi_type</var></dt>
- <dd>(<var class="Vt">u_char</var>) The type of the interface, as defined in
- <code class="In">&lt;<a class="In">net/if_types.h</a>&gt;</code> and
- described below in the <a class="Sx" href="#Interface_Types">Interface
- Types</a> section.</dd>
- <dt id="ifi_physical"><var class="Va">ifi_physical</var></dt>
- <dd>(<var class="Vt">u_char</var>) Intended to represent a selection of
- physical layers on devices which support more than one; never
- implemented.</dd>
- <dt id="ifi_addrlen"><var class="Va">ifi_addrlen</var></dt>
- <dd>(<var class="Vt">u_char</var>) Length of a link-layer address on this
- device, or zero if there are none. Used to initialized the address length
- field in <var class="Vt">sockaddr_dl</var> structures referring to this
- interface.</dd>
- <dt id="ifi_hdrlen"><var class="Va">ifi_hdrlen</var></dt>
- <dd>(<var class="Vt">u_char</var>) Maximum length of any link-layer header
- which might be prepended by the driver to a packet before transmission.
- The generic code computes the maximum over all interfaces and uses that
- value to influence the placement of data in <var class="Vt">mbuf</var>s to
- attempt to ensure that there is always sufficient space to prepend a
- link-layer header without allocating an additional
- <var class="Vt">mbuf</var>.</dd>
- <dt id="ifi_datalen"><var class="Va">ifi_datalen</var></dt>
- <dd>(<var class="Vt">u_char</var>) Length of the <var class="Vt">if_data</var>
- structure. Allows some stabilization of the routing socket ABI in the face
- of increases in the length of <var class="Vt">struct ifdata</var>.</dd>
- <dt id="ifi_mtu"><var class="Va">ifi_mtu</var></dt>
- <dd>(<var class="Vt">u_long</var>) The maximum transmission unit of the
- medium, exclusive of any link-layer overhead.</dd>
- <dt id="ifi_metric"><var class="Va">ifi_metric</var></dt>
- <dd>(<var class="Vt">u_long</var>) A dimensionless metric interpreted by a
- user-mode routing process.</dd>
- <dt id="ifi_epoch"><var class="Va">ifi_epoch</var></dt>
- <dd>(<var class="Vt">time_t</var>) The system uptime when interface was
- attached or the statistics below were reset. This is intended to be used
- to set the SNMP variable <var class="Va">ifCounterDiscontinuityTime</var>.
- It may also be used to determine if two successive queries for an
- interface of the same index have returned results for the same
- interface.</dd>
-</dl>
-</div>
-<p class="Pp">The structure additionally contains generic statistics applicable
- to a variety of different interface types (except as noted, all members are
- of type <var class="Vt">u_long</var>):</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ifi_link_state"><var class="Va">ifi_link_state</var></dt>
- <dd>(<var class="Vt">u_char</var>) The current link state of Ethernet
- interfaces. See the <a class="Sx" href="#Interface_Link_States">Interface
- Link States</a> section for possible values.</dd>
- <dt id="ifi_ipackets"><var class="Va">ifi_ipackets</var></dt>
- <dd>Number of packets received.</dd>
- <dt id="ifi_ierrors"><var class="Va">ifi_ierrors</var></dt>
- <dd>Number of receive errors detected (e.g., FCS errors, DMA overruns, etc.).
- More detailed breakdowns can often be had by way of a link-specific
- MIB.</dd>
- <dt id="ifi_opackets"><var class="Va">ifi_opackets</var></dt>
- <dd>Number of packets transmitted.</dd>
- <dt id="ifi_oerrors"><var class="Va">ifi_oerrors</var></dt>
- <dd>Number of output errors detected (e.g., late collisions, DMA overruns,
- etc.). More detailed breakdowns can often be had by way of a link-specific
- MIB.</dd>
- <dt id="ifi_collisions"><var class="Va">ifi_collisions</var></dt>
- <dd>Total number of collisions detected on output for CSMA interfaces. (This
- member is sometimes [ab]used by other types of interfaces for other output
- error counts.)</dd>
- <dt id="ifi_ibytes"><var class="Va">ifi_ibytes</var></dt>
- <dd>Total traffic received, in bytes.</dd>
- <dt id="ifi_obytes"><var class="Va">ifi_obytes</var></dt>
- <dd>Total traffic transmitted, in bytes.</dd>
- <dt id="ifi_imcasts"><var class="Va">ifi_imcasts</var></dt>
- <dd>Number of packets received which were sent by link-layer multicast.</dd>
- <dt id="ifi_omcasts"><var class="Va">ifi_omcasts</var></dt>
- <dd>Number of packets sent by link-layer multicast.</dd>
- <dt id="ifi_iqdrops"><var class="Va">ifi_iqdrops</var></dt>
- <dd>Number of packets dropped on input. Rarely implemented.</dd>
- <dt id="ifi_oqdrops"><var class="Va">ifi_oqdrops</var></dt>
- <dd>Number of packets dropped on output.</dd>
- <dt id="ifi_noproto"><var class="Va">ifi_noproto</var></dt>
- <dd>Number of packets received for unknown network-layer protocol.</dd>
- <dt id="ifi_lastchange"><var class="Va">ifi_lastchange</var></dt>
- <dd>(<var class="Vt">struct timeval</var>) The time of the last administrative
- change to the interface (as required for SNMP ) .</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interface_Types"><a class="permalink" href="#Interface_Types">Interface
- Types</a></h2>
-<p class="Pp">The header file
- <code class="In">&lt;<a class="In">net/if_types.h</a>&gt;</code> defines
- symbolic constants for a number of different types of interfaces. The most
- common are:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="IFT_OTHER"><a class="permalink" href="#IFT_OTHER"><code class="Dv">IFT_OTHER</code></a></dt>
- <dd>none of the following</dd>
- <dt id="IFT_ETHER"><a class="permalink" href="#IFT_ETHER"><code class="Dv">IFT_ETHER</code></a></dt>
- <dd>Ethernet</dd>
- <dt id="IFT_ISO88023"><a class="permalink" href="#IFT_ISO88023"><code class="Dv">IFT_ISO88023</code></a></dt>
- <dd>ISO 8802-3 CSMA/CD</dd>
- <dt id="IFT_ISO88024"><a class="permalink" href="#IFT_ISO88024"><code class="Dv">IFT_ISO88024</code></a></dt>
- <dd>ISO 8802-4 Token Bus</dd>
- <dt id="IFT_ISO88025"><a class="permalink" href="#IFT_ISO88025"><code class="Dv">IFT_ISO88025</code></a></dt>
- <dd>ISO 8802-5 Token Ring</dd>
- <dt id="IFT_ISO88026"><a class="permalink" href="#IFT_ISO88026"><code class="Dv">IFT_ISO88026</code></a></dt>
- <dd>ISO 8802-6 DQDB MAN</dd>
- <dt id="IFT_FDDI"><a class="permalink" href="#IFT_FDDI"><code class="Dv">IFT_FDDI</code></a></dt>
- <dd>FDDI</dd>
- <dt id="IFT_PPP"><a class="permalink" href="#IFT_PPP"><code class="Dv">IFT_PPP</code></a></dt>
- <dd>Internet Point-to-Point Protocol (<a class="Xr">ppp(8)</a>)</dd>
- <dt id="IFT_LOOP"><a class="permalink" href="#IFT_LOOP"><code class="Dv">IFT_LOOP</code></a></dt>
- <dd>The loopback (<a class="Xr">lo(4)</a>) interface</dd>
- <dt id="IFT_SLIP"><a class="permalink" href="#IFT_SLIP"><code class="Dv">IFT_SLIP</code></a></dt>
- <dd>Serial Line IP</dd>
- <dt id="IFT_PARA"><a class="permalink" href="#IFT_PARA"><code class="Dv">IFT_PARA</code></a></dt>
- <dd>Parallel-port IP (&#x201C;PLIP&#x201D;)</dd>
- <dt id="IFT_ATM"><a class="permalink" href="#IFT_ATM"><code class="Dv">IFT_ATM</code></a></dt>
- <dd>Asynchronous Transfer Mode</dd>
- <dt id="IFT_USB"><a class="permalink" href="#IFT_USB"><code class="Dv">IFT_USB</code></a></dt>
- <dd>USB Interface</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interface_Link_States"><a class="permalink" href="#Interface_Link_States">Interface
- Link States</a></h2>
-<p class="Pp">The following link states are currently defined:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="LINK_STATE_UNKNOWN"><a class="permalink" href="#LINK_STATE_UNKNOWN"><code class="Dv">LINK_STATE_UNKNOWN</code></a></dt>
- <dd>The link is in an invalid or unknown state.</dd>
- <dt id="LINK_STATE_DOWN"><a class="permalink" href="#LINK_STATE_DOWN"><code class="Dv">LINK_STATE_DOWN</code></a></dt>
- <dd>The link is down.</dd>
- <dt id="LINK_STATE_UP"><a class="permalink" href="#LINK_STATE_UP"><code class="Dv">LINK_STATE_UP</code></a></dt>
- <dd>The link is up.</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_ifaddr_Structure"><a class="permalink" href="#The_ifaddr_Structure">The
- ifaddr Structure</a></h2>
-<p class="Pp">Every interface is associated with a list (or, rather, a
- <code class="Li">TAILQ</code>) of addresses, rooted at the interface
- structure's <var class="Va">if_addrhead</var> member. The first element in
- this list is always an <code class="Dv">AF_LINK</code> address representing
- the interface itself; multi-access network drivers should complete this
- structure by filling in their link-layer addresses after calling
- <a class="permalink" href="#if_attach"><code class="Fn" id="if_attach">if_attach</code></a>().
- Other members of the structure represent network-layer addresses which have
- been configured by means of the <code class="Dv">SIOCAIFADDR</code> command
- to <a class="Xr">ioctl(2)</a>, called on a socket of the appropriate
- protocol family. The elements of this list consist of
- <var class="Vt">ifaddr</var> structures. Most protocols will declare their
- own protocol-specific interface address structures, but all begin with a
- <var class="Vt">struct ifaddr</var> which provides the most-commonly-needed
- functionality across all protocols. Interface addresses are
- reference-counted.</p>
-<p class="Pp">The members of <var class="Vt">struct ifaddr</var> are as
- follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ifa_addr"><var class="Va">ifa_addr</var></dt>
- <dd>(<var class="Vt">struct sockaddr *</var>) The local address of the
- interface.</dd>
- <dt id="ifa_dstaddr"><var class="Va">ifa_dstaddr</var></dt>
- <dd>(<var class="Vt">struct sockaddr *</var>) The remote address of
- point-to-point interfaces, and the broadcast address of broadcast
- interfaces. (<var class="Va">ifa_broadaddr</var> is a macro for
- <var class="Va">ifa_dstaddr</var>.)</dd>
- <dt id="ifa_netmask"><var class="Va">ifa_netmask</var></dt>
- <dd>(<var class="Vt">struct sockaddr *</var>) The network mask for
- multi-access interfaces, and the confusion generator for point-to-point
- interfaces.</dd>
- <dt id="ifa_ifp"><var class="Va">ifa_ifp</var></dt>
- <dd>(<var class="Vt">if_t</var>) A link back to the interface structure.</dd>
- <dt id="ifa_link"><var class="Va">ifa_link</var></dt>
- <dd>(<a class="permalink" href="#TAILQ_ENTRY"><code class="Fn" id="TAILQ_ENTRY">TAILQ_ENTRY</code></a>(<var class="Fa">ifaddr</var>))
- <a class="Xr">queue(3)</a> glue for list of addresses on each
- interface.</dd>
- <dt id="ifa_rtrequest"><var class="Va">ifa_rtrequest</var></dt>
- <dd>See below.</dd>
- <dt id="ifa_flags"><var class="Va">ifa_flags</var></dt>
- <dd>(<var class="Vt">u_short</var>) Some of the flags which would be used for
- a route representing this address in the route table.</dd>
- <dt id="ifa_refcnt"><var class="Va">ifa_refcnt</var></dt>
- <dd>(<var class="Vt">short</var>) The reference count.</dd>
-</dl>
-</div>
-<p class="Pp" id="ifa_ref">References to <var class="Vt">ifaddr</var> structures
- are gained by calling the
- <a class="permalink" href="#ifa_ref"><code class="Fn">ifa_ref</code></a>()
- function and released by calling the
- <a class="permalink" href="#ifa_free"><code class="Fn" id="ifa_free">ifa_free</code></a>()
- function.</p>
-<p class="Pp" id="ifa_rtrequest~2"><a class="permalink" href="#ifa_rtrequest~2"><code class="Fn">ifa_rtrequest</code></a>()
- is a pointer to a function which receives callouts from the routing code
- (<a class="permalink" href="#rtrequest"><code class="Fn" id="rtrequest">rtrequest</code></a>())
- to perform link-layer-specific actions upon requests to add, or delete
- routes. The <var class="Fa">cmd</var> argument indicates the request in
- question: <code class="Dv">RTM_ADD</code>, or
- <code class="Dv">RTM_DELETE</code>. The <var class="Fa">rt</var> argument is
- the route in question; the <var class="Fa">info</var> argument contains the
- specific destination being manipulated.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">The functions provided by the generic interface code can be
- divided into two groups: those which manipulate interfaces, and those which
- manipulate interface addresses. In addition to these functions, there may
- also be link-layer support routines which are used by a number of drivers
- implementing a specific link layer over different hardware; see the
- documentation for that link layer for more details.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_ifmultiaddr_Structure"><a class="permalink" href="#The_ifmultiaddr_Structure">The
- ifmultiaddr Structure</a></h2>
-<p class="Pp">Every multicast-capable interface is associated with a list of
- multicast group memberships, which indicate at a low level which link-layer
- multicast addresses (if any) should be accepted, and at a high level, in
- which network-layer multicast groups a user process has expressed
- interest.</p>
-<p class="Pp">The elements of the structure are as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="ifma_link"><var class="Va">ifma_link</var></dt>
- <dd>(<a class="permalink" href="#LIST_ENTRY"><code class="Fn" id="LIST_ENTRY">LIST_ENTRY</code></a>(<var class="Fa">ifmultiaddr</var>))
- <a class="Xr">queue(3)</a> macro glue.</dd>
- <dt id="ifma_addr"><var class="Va">ifma_addr</var></dt>
- <dd>(<var class="Vt">struct sockaddr *</var>) A pointer to the address which
- this record represents. The memberships for various address families are
- stored in arbitrary order.</dd>
- <dt id="ifma_lladdr"><var class="Va">ifma_lladdr</var></dt>
- <dd>(<var class="Vt">struct sockaddr *</var>) A pointer to the link-layer
- multicast address, if any, to which the network-layer multicast address in
- <var class="Va">ifma_addr</var> is mapped, else a null pointer. If this
- element is non-nil, this membership also holds an invisible reference to
- another membership for that link-layer address.</dd>
- <dt id="ifma_refcount"><var class="Va">ifma_refcount</var></dt>
- <dd>(<var class="Vt">u_int</var>) A reference count of requests for this
- particular membership.</dd>
-</dl>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interface Manipulation Functions</h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="if_alloc"><a class="permalink" href="#if_alloc"><code class="Fn">if_alloc</code></a>()</dt>
- <dd>Allocate and initialize <var class="Vt">struct ifnet</var>. Initialization
- includes the allocation of an interface index and may include the
- allocation of a <var class="Fa">type</var> specific structure in
- <var class="Va">if_l2com</var>.</dd>
- <dt id="if_alloc_dev"><a class="permalink" href="#if_alloc_dev"><code class="Fn">if_alloc_dev</code></a>()</dt>
- <dd>Allocate and initialize <var class="Vt">struct ifnet</var> as
- <code class="Fn">if_alloc</code>() does, with the addition that the ifnet
- can be tagged with the appropriate NUMA domain derived from the
- <var class="Fa">dev</var> argument passed by the caller.</dd>
- <dt id="if_alloc_domain"><a class="permalink" href="#if_alloc_domain"><code class="Fn">if_alloc_domain</code></a>()</dt>
- <dd>Allocate and initialize <var class="Vt">struct ifnet</var> as
- <code class="Fn">if_alloc</code>() does, with the addition that the ifnet
- will be tagged with the NUMA domain via the
- <var class="Fa">numa_domain</var> argument passed by the caller.</dd>
- <dt><code class="Fn">if_attach</code>()</dt>
- <dd>Link the specified interface <var class="Fa">ifp</var> into the list of
- network interfaces. Also initialize the list of addresses on that
- interface, and create a link-layer <var class="Vt">ifaddr</var> structure
- to be the first element in that list. (A pointer to this address structure
- is saved in the <var class="Vt">ifnet</var> structure.) The
- <var class="Fa">ifp</var> must have been allocated by
- <code class="Fn">if_alloc</code>(), <code class="Fn">if_alloc_dev</code>()
- or <code class="Fn">if_alloc_domain</code>().</dd>
- <dt id="if_detach"><a class="permalink" href="#if_detach"><code class="Fn">if_detach</code></a>()</dt>
- <dd>Shut down and unlink the specified <var class="Fa">ifp</var> from the
- interface list.</dd>
- <dt id="if_free"><a class="permalink" href="#if_free"><code class="Fn">if_free</code></a>()</dt>
- <dd>Free the given <var class="Fa">ifp</var> back to the system. The interface
- must have been previously detached if it was ever attached.</dd>
- <dt id="if_free_type"><a class="permalink" href="#if_free_type"><code class="Fn">if_free_type</code></a>()</dt>
- <dd>Identical to <code class="Fn">if_free</code>() except that the given
- <var class="Fa">type</var> is used to free <var class="Va">if_l2com</var>
- instead of the type in <var class="Va">if_type</var>. This is intended for
- use with drivers that change their interface type.</dd>
- <dt><code class="Fn">if_down</code>()</dt>
- <dd>Mark the interface <var class="Fa">ifp</var> as down (i.e.,
- <code class="Dv">IFF_UP</code> is not set), flush its output queue, notify
- protocols of the transition, and generate a message from the
- <a class="Xr">route(4)</a> routing socket.</dd>
- <dt><code class="Fn">if_up</code>()</dt>
- <dd>Mark the interface <var class="Fa">ifp</var> as up, notify protocols of
- the transition, and generate a message from the <a class="Xr">route(4)</a>
- routing socket.</dd>
- <dt id="ifpromisc"><a class="permalink" href="#ifpromisc"><code class="Fn">ifpromisc</code></a>()</dt>
- <dd>Add or remove a promiscuous reference to <var class="Fa">ifp</var>. If
- <var class="Fa">pswitch</var> is true, add a reference; if it is false,
- remove a reference. On reference count transitions from zero to one and
- one to zero, set the <code class="Dv">IFF_PROMISC</code> flag
- appropriately and call <code class="Fn">if_ioctl</code>() to set up the
- interface in the desired mode.</dd>
- <dt id="if_allmulti"><a class="permalink" href="#if_allmulti"><code class="Fn">if_allmulti</code></a>()</dt>
- <dd>As <code class="Fn">ifpromisc</code>(), but for the all-multicasts
- (<code class="Dv">IFF_ALLMULTI</code>) flag instead of the promiscuous
- flag.</dd>
- <dt id="ifunit"><a class="permalink" href="#ifunit"><code class="Fn">ifunit</code></a>()</dt>
- <dd>Return an <var class="Vt">ifnet</var> pointer for the interface named
- <var class="Fa">name</var>.</dd>
- <dt id="ifunit_ref"><a class="permalink" href="#ifunit_ref"><code class="Fn">ifunit_ref</code></a>()</dt>
- <dd>Return a reference-counted (via <code class="Fn">ifa_ref</code>())
- <var class="Vt">ifnet</var> pointer for the interface named
- <var class="Fa">name</var>. This is the preferred function over
- <code class="Fn">ifunit</code>(). The caller is responsible for releasing
- the reference with <code class="Fn">if_rele</code>() when it is finished
- with the ifnet.</dd>
- <dt><code class="Fn">ifioctl</code>()</dt>
- <dd>Process the ioctl request <var class="Fa">cmd</var>, issued on socket
- <var class="Fa">so</var> by thread <var class="Fa">td</var>, with data
- parameter <var class="Fa">data</var>. This is the main routine for
- handling all interface configuration requests from user mode. It is
- ordinarily only called from the socket-layer <a class="Xr">ioctl(2)</a>
- handler, and only for commands with class
- &#x2018;<code class="Li">i</code>&#x2019;. Any unrecognized commands will
- be passed down to socket <var class="Fa">so</var>'s protocol for further
- interpretation. The following commands are handled by
- <code class="Fn">ifioctl</code>():
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="SIOCGIFCONF"><a class="permalink" href="#SIOCGIFCONF"><code class="Dv">SIOCGIFCONF</code></a></dt>
- <dd>Get interface configuration. (No call-down to driver.)
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFNAME"><a class="permalink" href="#SIOCSIFNAME"><code class="Dv">SIOCSIFNAME</code></a></dt>
- <dd>Set the interface name. <code class="Dv">RTM_IFANNOUNCE</code>
- departure and arrival messages are sent so that routing code that
- relies on the interface name will update its interface list. Caller
- must have appropriate privilege. (No call-down to driver.)</dd>
- <dt id="SIOCGIFCAP"><a class="permalink" href="#SIOCGIFCAP"><code class="Dv">SIOCGIFCAP</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFDATA"><a class="permalink" href="#SIOCGIFDATA"><code class="Dv">SIOCGIFDATA</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFFIB"><a class="permalink" href="#SIOCGIFFIB"><code class="Dv">SIOCGIFFIB</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFFLAGS"><a class="permalink" href="#SIOCGIFFLAGS"><code class="Dv">SIOCGIFFLAGS</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFMETRIC"><a class="permalink" href="#SIOCGIFMETRIC"><code class="Dv">SIOCGIFMETRIC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFMTU"><a class="permalink" href="#SIOCGIFMTU"><code class="Dv">SIOCGIFMTU</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCGIFPHYS"><a class="permalink" href="#SIOCGIFPHYS"><code class="Dv">SIOCGIFPHYS</code></a></dt>
- <dd>Get interface capabilities, data, FIB, flags, metric, MTU, medium
- selection. (No call-down to driver.)
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFCAP"><a class="permalink" href="#SIOCSIFCAP"><code class="Dv">SIOCSIFCAP</code></a></dt>
- <dd>Enable or disable interface capabilities. Caller must have appropriate
- privilege. Before a call to the driver-specific
- <a class="permalink" href="#if_ioctl"><code class="Fn" id="if_ioctl">if_ioctl</code></a>()
- routine, the requested mask for enabled capabilities is checked
- against the mask of capabilities supported by the interface,
- <var class="Va">if_capabilities</var>. Requesting to enable an
- unsupported capability is invalid. The rest is supposed to be done by
- the driver, which includes updating <var class="Va">if_capenable</var>
- and <var class="Va">if_data.ifi_hwassist</var> appropriately.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCGIFCAPNV"><a class="permalink" href="#SIOCGIFCAPNV"><code class="Dv">SIOCGIFCAPNV</code></a></dt>
- <dd><a class="Xr">nv(9)</a> version of the
- <code class="Dv">SIOCGIFCAP</code> ioctl. Caller must provide a
- pointer to <var class="Vt">struct ifreq_cap_nv</var> as
- <var class="Fa">data</var>, where the member
- <code class="Dv">buffer</code> points to some buffer containing
- <code class="Dv">buf_length</code> bytes. The serialized nvlist with
- description of the device capabilities is written to the buffer. If
- buffer is too short, the structure is updated with
- <code class="Dv">buffer</code> member set to
- <code class="Dv">NULL</code>, <code class="Dv">length</code> set to
- the minimal required length, and error <code class="Er">EFBIG</code>
- is returned.
- <p class="Pp">Elements of the returned nvlist for simple capabilities
- are boolean, identified by names. Presence of the boolean element
- means that corresponding capability is supported by the interface.
- Element's value describes the current configured state:
- <code class="Dv">true</code> means that the capability is enabled,
- and <code class="Dv">false</code> that it is disabled.</p>
- <p class="Pp">Driver indicates support for both
- <code class="Dv">SIOCGIFCAPNV</code> and
- <code class="Dv">SIOCSIFCAPNV</code> requests by setting
- <code class="Dv">IFCAP_NV</code> non-modifiable capability bit in
- <code class="Dv">if_capabilities</code>.</p>
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFCAPNV"><a class="permalink" href="#SIOCSIFCAPNV"><code class="Dv">SIOCSIFCAPNV</code></a></dt>
- <dd><a class="Xr">nv(9)</a> version of the
- <code class="Dv">SIOCSIFCAP</code> ioctl. Caller must provide the
- pointer to <var class="Vt">struct ifreq_cap_nv</var> as
- <var class="Fa">data</var>, where the member
- <code class="Dv">buffer</code> points to serialized nvlist of
- <code class="Dv">length</code> bytes. Each element of nvlist describes
- a requested update of one capability, identified by the element name.
- For simple capabilities, the element must be boolean. Its
- <code class="Dv">true</code> value means that the caller asks to
- enable the capability, and <code class="Dv">false</code> value to
- disable. Only capabilities listed in the nvlist are affected by the
- call.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFFIB"><a class="permalink" href="#SIOCSIFFIB"><code class="Dv">SIOCSIFFIB</code></a></dt>
- <dd>Sets interface FIB. Caller must have appropriate privilege. FIB values
- start at 0 and values greater or equals than
- <var class="Va">net.fibs</var> are considered invalid.</dd>
- <dt id="SIOCSIFFLAGS"><a class="permalink" href="#SIOCSIFFLAGS"><code class="Dv">SIOCSIFFLAGS</code></a></dt>
- <dd>Change interface flags. Caller must have appropriate privilege. If a
- change to the <code class="Dv">IFF_UP</code> flag is requested,
- <a class="permalink" href="#if_up"><code class="Fn" id="if_up">if_up</code></a>()
- or
- <a class="permalink" href="#if_down"><code class="Fn" id="if_down">if_down</code></a>()
- is called as appropriate. Flags listed in
- <code class="Dv">IFF_CANTCHANGE</code> are masked off, and the field
- <var class="Va">if_flags</var> in the interface structure is updated.
- Finally, the driver <code class="Fn">if_ioctl</code>() routine is
- called to perform any setup requested.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFMETRIC"><a class="permalink" href="#SIOCSIFMETRIC"><code class="Dv">SIOCSIFMETRIC</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCSIFPHYS"><a class="permalink" href="#SIOCSIFPHYS"><code class="Dv">SIOCSIFPHYS</code></a></dt>
- <dd>Change interface metric or medium. Caller must have appropriate
- privilege.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCSIFMTU"><a class="permalink" href="#SIOCSIFMTU"><code class="Dv">SIOCSIFMTU</code></a></dt>
- <dd>Change interface MTU. Caller must have appropriate privilege. MTU
- values less than 72 or greater than 65535 are considered invalid. The
- driver
- <a class="permalink" href="#if_ioctl~2"><code class="Fn" id="if_ioctl~2">if_ioctl</code></a>()
- routine is called to implement the change; it is responsible for any
- additional sanity checking and for actually modifying the MTU in the
- interface structure.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCADDMULTI"><a class="permalink" href="#SIOCADDMULTI"><code class="Dv">SIOCADDMULTI</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCDELMULTI"><a class="permalink" href="#SIOCDELMULTI"><code class="Dv">SIOCDELMULTI</code></a></dt>
- <dd>Add or delete permanent multicast group memberships on the interface.
- Caller must have appropriate privilege. The
- <a class="permalink" href="#if_addmulti"><code class="Fn" id="if_addmulti">if_addmulti</code></a>()
- or <code class="Fn">if_delmulti</code>() function is called to perform
- the operation; qq.v.
- <p class="Pp"></p>
- </dd>
- <dt id="SIOCAIFADDR"><a class="permalink" href="#SIOCAIFADDR"><code class="Dv">SIOCAIFADDR</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="SIOCDIFADDR"><a class="permalink" href="#SIOCDIFADDR"><code class="Dv">SIOCDIFADDR</code></a></dt>
- <dd>The socket's protocol control routine is called to implement the
- requested action.</dd>
- </dl>
- </div>
- </dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interface Address Functions</h2>
-<p class="Pp">Several functions exist to look up an interface address structure
- given an address.
- <a class="permalink" href="#ifa_ifwithaddr"><code class="Fn" id="ifa_ifwithaddr">ifa_ifwithaddr</code></a>()
- returns an interface address with either a local address or a broadcast
- address precisely matching the parameter <var class="Fa">addr</var>.
- <a class="permalink" href="#ifa_ifwithdstaddr"><code class="Fn" id="ifa_ifwithdstaddr">ifa_ifwithdstaddr</code></a>()
- returns an interface address for a point-to-point interface whose remote
- (&#x201C;destination&#x201D;) address is <var class="Fa">addr</var> and a
- fib is <var class="Fa">fib</var>. If <var class="Fa">fib</var> is
- <code class="Dv">RT_ALL_FIBS</code>, then the first interface address
- matching <var class="Fa">addr</var> will be returned.</p>
-<p class="Pp" id="ifa_ifwithnet"><a class="permalink" href="#ifa_ifwithnet"><code class="Fn">ifa_ifwithnet</code></a>()
- returns the most specific interface address which matches the specified
- address, <var class="Fa">addr</var>, subject to its configured netmask, or a
- point-to-point interface address whose remote address is
- <var class="Fa">addr</var> if one is found. If
- <var class="Fa">ignore_ptp</var> is true, skip point-to-point interface
- addresses. The <var class="Fa">fib</var> parameter is handled the same way
- as by
- <a class="permalink" href="#ifa_ifwithdstaddr~2"><code class="Fn" id="ifa_ifwithdstaddr~2">ifa_ifwithdstaddr</code></a>().</p>
-<p class="Pp" id="ifaof_ifpforaddr"><a class="permalink" href="#ifaof_ifpforaddr"><code class="Fn">ifaof_ifpforaddr</code></a>()
- returns the most specific address configured on interface
- <var class="Fa">ifp</var> which matches address <var class="Fa">addr</var>,
- subject to its configured netmask. If the interface is point-to-point, only
- an interface address whose remote address is precisely
- <var class="Fa">addr</var> will be returned.</p>
-<p class="Pp">All of these functions return a null pointer if no such address
- can be found.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss">Interface Multicast Address Functions</h2>
-<p class="Pp">The
- <a class="permalink" href="#if_addmulti~2"><code class="Fn" id="if_addmulti~2">if_addmulti</code></a>(),
- <code class="Fn">if_delmulti</code>(), and
- <code class="Fn">if_findmulti</code>() functions provide support for
- requesting and relinquishing multicast group memberships, and for querying
- an interface's membership list, respectively. The
- <code class="Fn">if_addmulti</code>() function takes a pointer to an
- interface, <var class="Fa">ifp</var>, and a generic address,
- <var class="Fa">sa</var>. It also takes a pointer to a
- <var class="Vt">struct ifmultiaddr *</var> which is filled in on successful
- return with the address of the group membership control block. The
- <code class="Fn">if_addmulti</code>() function performs the following
- four-step process:</p>
-<ol class="Bl-enum Bd-indent">
- <li id="if_resolvemulti">Call the interface's
- <a class="permalink" href="#if_resolvemulti"><code class="Fn">if_resolvemulti</code></a>()
- entry point to determine the link-layer address, if any, corresponding to
- this membership request, and also to give the link layer an opportunity to
- veto this membership request should it so desire.</li>
- <li>Check the interface's group membership list for a pre-existing membership
- for this group. If one is not found, allocate a new one; if one is,
- increment its reference count.</li>
- <li>If the <code class="Fn">if_resolvemulti</code>() routine returned a
- link-layer address corresponding to the group, repeat the previous step
- for that address as well.</li>
- <li>If the interface's multicast address filter needs to be changed because a
- new membership was added, call the interface's
- <code class="Fn">if_ioctl</code>() routine (with a
- <var class="Fa">cmd</var> argument of
- <code class="Dv">SIOCADDMULTI</code>) to request that it do so.</li>
-</ol>
-<p class="Pp" id="if_delmulti">The
- <a class="permalink" href="#if_delmulti"><code class="Fn">if_delmulti</code></a>()
- function, given an interface <var class="Fa">ifp</var> and an address,
- <var class="Fa">sa</var>, reverses this process. Both functions return zero
- on success, or a standard error number on failure.</p>
-<p class="Pp" id="if_findmulti">The
- <a class="permalink" href="#if_findmulti"><code class="Fn">if_findmulti</code></a>()
- function examines the membership list of interface <var class="Fa">ifp</var>
- for an address matching <var class="Fa">sa</var>, and returns a pointer to
- that <var class="Vt">struct ifmultiaddr</var> if one is found, else it
- returns a null pointer.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">link_addr(3)</a>,
- <a class="Xr">queue(3)</a>, <a class="Xr">sysctl(3)</a>,
- <a class="Xr">bpf(4)</a>, <a class="Xr">ifmib(4)</a>,
- <a class="Xr">lo(4)</a>, <a class="Xr">netintro(4)</a>,
- <a class="Xr">polling(4)</a>, <a class="Xr">config(8)</a>,
- <a class="Xr">ppp(8)</a>, <a class="Xr">mbuf(9)</a>,
- <a class="Xr">rtentry(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Gary R. Wright</span> and
- <span class="RsA">W. Richard Stevens</span>, <i class="RsB">TCP/IP
- Illustrated</i>, <span class="RsV">Vol. 2</span>,
- <span class="RsO">Addison-Wesley, ISBN 0-201-63354-X</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Garrett A.
- Wollman</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 10, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/inittodr.9 3.html b/static/freebsd/man9/inittodr.9 3.html
deleted file mode 100644
index 1b0460ad..00000000
--- a/static/freebsd/man9/inittodr.9 3.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">INITTODR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">INITTODR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">inittodr</code> &#x2014;
- <span class="Nd">initialize system time</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">inittodr</code>(<var class="Fa" style="white-space: nowrap;">time_t
- base</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#inittodr"><code class="Fn" id="inittodr">inittodr</code></a>()
- function determines the time and sets the system clock. It tries to pick the
- correct time using a set of heuristics that examine the system's battery
- backed clock and the time obtained from the root file system, as given in
- <var class="Fa">base</var>. How the <var class="Fa">base</var> value is
- obtained will vary depending on the root file system type. The heuristics
- used include:</p>
-<ul class="Bl-bullet">
- <li>If the battery-backed clock has a valid time, it is used.</li>
- <li>If the battery-backed clock does not have a valid time, the time provided
- in <var class="Fa">base</var> will be used.</li>
-</ul>
-<p class="Pp">Once a system time has been determined, it is stored in the
- <var class="Va">time</var> variable.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-<p class="Pp">The <code class="Fn">inittodr</code>() function prints diagnostic
- messages if it has trouble figuring out the system time. Conditions that can
- cause diagnostic messages to be printed include:</p>
-<ul class="Bl-bullet">
- <li>The battery-backed clock's time appears nonsensical.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">resettodr(9)</a>, <a class="Xr">time(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">On many systems, <code class="Fn">inittodr</code>() has to convert
- from a time expressed in terms of year, month, day, hours, minutes, and
- seconds to <var class="Va">time</var>, expressed in seconds. Many of the
- implementations could share code, but do not.</p>
-<p class="Pp">Each system's heuristics for picking the correct time are slightly
- different.</p>
-<p class="Pp">The <span class="Ux">FreeBSD</span> implementation should do a
- better job of validating the time provided in <var class="Fa">base</var>
- when the battery-backed clock is unusable. Currently it unconditionally sets
- the system clock to this value.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 22, 1997</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/insmntque.9 3.html b/static/freebsd/man9/insmntque.9 3.html
deleted file mode 100644
index 94bac6db..00000000
--- a/static/freebsd/man9/insmntque.9 3.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">INSMNTQUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">INSMNTQUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">insmntque</code>,
- <code class="Nm">insmntque1</code> &#x2014; <span class="Nd">associate a
- vnode with a mount</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">insmntque</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct mount
- *mp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">insmntque1</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct mount
- *mp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#insmntque"><code class="Fn" id="insmntque">insmntque</code></a>()
- function associates a vnode with a mount. This includes updating
- <var class="Va">v_mount</var> for the vnode, and inserting the vnode into
- the mount's vnode list.</p>
-<p class="Pp">The indirect mount reference count, maintained as the count of the
- vnodes owned by it, is incremented for each vnode added to the mount, and
- that reference is decremented by <a class="Xr">vgone(9)</a>.</p>
-<p class="Pp">The mount's interlock is held while the vnode is inserted. The
- vnode must be exclusively locked.</p>
-<p class="Pp" id="insmntque~2">On failure,
- <a class="permalink" href="#insmntque~2"><code class="Fn">insmntque</code></a>()
- resets vnode's operations vector to the vector of
- <a class="Xr">deadfs(9)</a>, clears <var class="Va">v_data</var>, and then
- calls <a class="Xr">vgone(9)</a> and <a class="Xr">vput(9)</a>. If more
- elaborated cleanup after <code class="Fn">insmntque</code>() failure is
- needed, the
- <a class="permalink" href="#insmntque1"><code class="Fn" id="insmntque1">insmntque1</code></a>()
- function may be used instead. It does not do any cleanup following a
- failure, leaving all the work to the caller. In particular, the operations
- vector <var class="Va">v_op</var> and <var class="Va">v_data</var> fields of
- the vnode are kept intact.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">insmntque</code>() function will always
- return 0, unless the file system is currently being unmounted in which case
- it may return <code class="Dv">EBUSY</code>. Also,
- <code class="Fn">insmntque</code>() may be forced to insert the vnode into
- the mount's vnode list by setting the <var class="Va">VV_FORCEINSMQ</var>
- flag in the vnode <var class="Va">v_flag</var>, even if the file system is
- being unmounted.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vgone(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 24, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/intr_event.9 3.html b/static/freebsd/man9/intr_event.9 3.html
deleted file mode 100644
index 07f157eb..00000000
--- a/static/freebsd/man9/intr_event.9 3.html
+++ /dev/null
@@ -1,341 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">INTR_EVENT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">INTR_EVENT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">intr_event_add_handler</code>,
- <code class="Nm">intr_event_create</code>,
- <code class="Nm">intr_event_destroy</code>,
- <code class="Nm">intr_event_handle</code>,
- <code class="Nm">intr_event_remove_handler</code>,
- <code class="Nm">intr_priority</code> &#x2014; <span class="Nd">kernel
- interrupt handler and thread API</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/interrupt.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">intr_event_add_handler</code>(<var class="Fa">struct
- intr_event *ie</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">driver_filter_t filter</var>, <var class="Fa">driver_intr_t
- handler</var>, <var class="Fa">void *arg</var>, <var class="Fa">u_char
- pri</var>, <var class="Fa">enum intr_type flags</var>, <var class="Fa">void
- **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">intr_event_create</code>(<var class="Fa">struct intr_event
- **event</var>, <var class="Fa">void *source</var>, <var class="Fa">int
- flags</var>, <var class="Fa">int irq</var>, <var class="Fa">void
- (*pre_ithread)(void *)</var>, <var class="Fa">void (*post_ithread)(void
- *)</var>, <var class="Fa">void (*post_filter)(void *)</var>,
- <var class="Fa">int (*assign_cpu)(void *, int)</var>, <var class="Fa">const
- char *fmt</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">intr_event_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- intr_event *ie</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">intr_event_handle</code>(<var class="Fa" style="white-space: nowrap;">struct
- intr_event *ie</var>, <var class="Fa" style="white-space: nowrap;">struct
- trapframe *frame</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">intr_event_remove_handler</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">u_char</var>
- <br/>
- <code class="Fn">intr_priority</code>(<var class="Fa" style="white-space: nowrap;">enum
- intr_type flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The interrupt event API provides methods to manage the
- registration and execution of interrupt handlers and their associated thread
- contexts.</p>
-<p class="Pp">Each interrupt event in the system corresponds to a single
- hardware or software interrupt source. Each interrupt event maintains a list
- of interrupt handlers, sorted by priority, which will be invoked when
- handling the event. An interrupt event will typically, but not always, have
- an associated <a class="Xr">kthread(9)</a>, known as the interrupt thread.
- Finally, each event contains optional callback functions which will be
- invoked before and after the handler functions themselves.</p>
-<p class="Pp">An interrupt handler contains two distinct handler functions: the
- <i class="Em">filter</i> and the thread <i class="Em">handler</i>. The
- <i class="Em">filter</i> function is run from interrupt context and is
- intended to perform quick handling such as acknowledging or masking a
- hardware interrupt, and queueing work for the ensuing thread
- <i class="Em">handler</i>. Both functions are optional; each interrupt
- handler may choose to register a filter, a thread handler, or both. Each
- interrupt handler also consists of a name, a set of flags, and an opaque
- argument which will be passed to both the <i class="Em">filter</i> and
- <i class="Em">handler</i> functions.</p>
-<section class="Ss">
-<h2 class="Ss" id="Handler_Constraints"><a class="permalink" href="#Handler_Constraints">Handler
- Constraints</a></h2>
-<p class="Pp">The <i class="Em">filter</i> function is executed inside a
- <a class="Xr">critical(9)</a> section. Therefore, filters may not yield the
- CPU for any reason, and may only use spin locks to access shared data.
- Allocating memory within a filter is not permitted.</p>
-<p class="Pp">The <i class="Em">handler</i> function executes from the context
- of the associated interrupt kernel thread. Sleeping is not permitted, but
- the interrupt thread may be preempted by higher priority threads. Thus,
- threaded handler functions may obtain non-sleepable locks, as described in
- <a class="Xr">locking(9)</a>. Any memory or zone allocations in an interrupt
- thread must specify the <code class="Dv">M_NOWAIT</code> flag, and any
- allocation errors must be handled.</p>
-<p class="Pp">The exception to these constraints is software interrupt threads,
- which are allowed to sleep but should be allocated and scheduled using the
- <a class="Xr">swi(9)</a> interface.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Function_Descriptions"><a class="permalink" href="#Function_Descriptions">Function
- Descriptions</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#intr_event_create"><code class="Fn" id="intr_event_create">intr_event_create</code></a>()
- function creates a new interrupt event. The <var class="Fa">event</var>
- argument points to a <var class="Vt">struct intr_event</var> pointer that
- will reference the newly created event upon success. The
- <var class="Fa">source</var> argument is an opaque pointer which will be
- passed to the <var class="Fa">pre_ithread</var>,
- <var class="Fa">post_ithread</var>, and <var class="Fa">post_filter</var>
- callbacks. The <var class="Fa">flags</var> argument is a mask of properties
- of this thread. The only valid flag currently for
- <code class="Fn">intr_event_create</code>() is
- <code class="Dv">IE_SOFT</code> to specify that this interrupt thread is a
- software interrupt. The <var class="Fa">enable</var> and
- <var class="Fa">disable</var> arguments specify optional functions used to
- enable and disable this interrupt thread's interrupt source. The
- <var class="Fa">irq</var> argument is the unique interrupt vector number
- corresponding to the event. The <var class="Fa">pre_ithread</var>,
- <var class="Fa">post_ithread</var>, and <var class="Fa">post_filter</var>
- arguments are callback functions that are invoked at different points while
- handling an interrupt. This is described in more detail in the
- <a class="Sx" href="#Handler_Callbacks">Handler Callbacks</a> section,
- below. They may be <var class="Va">NULL</var> to specify no callback. The
- <var class="Fa">assign_cpu</var> argument points to a callback function that
- will be invoked when binding an interrupt to a particular CPU. It may be
- <var class="Va">NULL</var> if binding is unsupported. The remaining
- arguments form a <a class="Xr">printf(9)</a> argument list that is used to
- build the base name of the new interrupt thread. The full name of an
- interrupt thread is formed by concatenating the base name of the interrupt
- thread with the names of all of its interrupt handlers.</p>
-<p class="Pp" id="intr_event_destroy">The
- <a class="permalink" href="#intr_event_destroy"><code class="Fn">intr_event_destroy</code></a>()
- function destroys a previously created interrupt event by releasing its
- resources. An interrupt event can only be destroyed if it has no handlers
- remaining.</p>
-<p class="Pp" id="intr_event_add_handler">The
- <a class="permalink" href="#intr_event_add_handler"><code class="Fn">intr_event_add_handler</code></a>()
- function adds a new handler to an existing interrupt event specified by
- <var class="Fa">ie</var>. The <var class="Fa">name</var> argument specifies
- a name for this handler. The <var class="Fa">filter</var> argument provide
- the filter function to execute. The <var class="Fa">handler</var> argument
- provides the handler function to be executed from the event's interrupt
- thread. The <var class="Fa">arg</var> argument will be passed to the
- <var class="Fa">filter</var> and <var class="Fa">handler</var> functions
- when they are invoked. The <var class="Fa">pri</var> argument specifies the
- priority of this handler, corresponding to the values defined in
- <code class="In">&lt;<a class="In">sys/priority.h</a>&gt;</code>. It
- determines the order this handler is called relative to the other handlers
- for this event, as well as the scheduling priority of the backing kernel
- thread. <var class="Fa">flags</var> argument can be used to specify
- properties of this handler as defined in
- <code class="In">&lt;<a class="In">sys/bus.h</a>&gt;</code>. If
- <var class="Fa">cookiep</var> is not <code class="Dv">NULL</code>, then it
- will be assigned a cookie that can be used later to remove this handler.</p>
-<p class="Pp" id="intr_event_handle">The
- <a class="permalink" href="#intr_event_handle"><code class="Fn">intr_event_handle</code></a>()
- function is the main entry point into the interrupt handling code. It must
- be called from an interrupt context. The function will execute all filter
- handlers associated with the interrupt event <var class="Fa">ie</var>, and
- schedule the associated interrupt thread to run, if applicable. The
- <var class="Fa">frame</var> argument is used to pass a pointer to the
- <var class="Vt">struct trapframe</var> containing the machine state at the
- time of the interrupt. The main body of this function runs within a
- <a class="Xr">critical(9)</a> section.</p>
-<p class="Pp" id="intr_event_remove_handler">The
- <a class="permalink" href="#intr_event_remove_handler"><code class="Fn">intr_event_remove_handler</code></a>()
- function removes an interrupt handler from the interrupt event specified by
- <var class="Fa">ie</var>. The <var class="Fa">cookie</var> argument,
- obtained from <code class="Fn">intr_event_add_handler</code>(), identifies
- the handler to remove.</p>
-<p class="Pp" id="intr_priority">The
- <a class="permalink" href="#intr_priority"><code class="Fn">intr_priority</code></a>()
- function translates the <code class="Dv">INTR_TYPE_*</code> interrupt flags
- into interrupt thread scheduling priorities.</p>
-<p class="Pp">The interrupt flags not related to the type of a particular
- interrupt (<code class="Dv">INTR_TYPE_*</code>) can be used to specify
- additional properties of both hardware and software interrupt handlers. The
- <code class="Dv">INTR_EXCL</code> flag specifies that this handler cannot
- share an interrupt thread with another handler. The
- <code class="Dv">INTR_MPSAFE</code> flag specifies that this handler is MP
- safe in that it does not need the Giant mutex to be held while it is
- executed. The <code class="Dv">INTR_ENTROPY</code> flag specifies that the
- interrupt source this handler is tied to is a good source of entropy, and
- thus that entropy should be gathered when an interrupt from the handler's
- source triggers. Presently, the <code class="Dv">INTR_ENTROPY</code> flag is
- not valid for software interrupt handlers. The
- <code class="Dv">INTR_SLEEPABLE</code> flag specifies that the interrupt
- ithread may sleep. Presently, the <code class="Dv">INTR_SLEEPABLE</code>
- flag requires the <code class="Dv">INTR_EXCL</code> flag to be set.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Handler_Callbacks"><a class="permalink" href="#Handler_Callbacks">Handler
- Callbacks</a></h2>
-<p class="Pp">Each <var class="Vt">struct intr_event</var> is assigned three
- optional callback functions when it is created:
- <var class="Fa">pre_ithread</var>, <var class="Fa">post_ithread</var>, and
- <var class="Fa">post_filter</var>. These callbacks are intended to be
- defined by the interrupt controller driver, to allow for actions such as
- masking and unmasking hardware interrupt signals.</p>
-<p class="Pp">When an interrupt is triggered, all filters are run to determine
- if any threaded interrupt handlers should be scheduled for execution by the
- associated interrupt thread. If no threaded handlers are scheduled, the
- <var class="Fa">post_filter</var> callback is invoked which should
- acknowledge the interrupt and permit it to trigger in the future. If any
- threaded handlers are scheduled, the <var class="Fa">pre_ithread</var>
- callback is invoked instead. This handler should acknowledge the interrupt,
- but it should also ensure that the interrupt will not fire continuously
- until after the threaded handlers have executed. Typically this callback
- masks level-triggered interrupts in an interrupt controller while leaving
- edge-triggered interrupts alone. Once all threaded handlers have executed,
- the <var class="Fa">post_ithread</var> callback is invoked from the
- interrupt thread to enable future interrupts. Typically this callback
- unmasks level-triggered interrupts in an interrupt controller.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">intr_event_add_handler</code>(),
- <code class="Fn">intr_event_create</code>(),
- <code class="Fn">intr_event_destroy</code>(),
- <code class="Fn">intr_event_handle</code>(), and
- <code class="Fn">intr_event_remove_handler</code>() functions return zero on
- success and non-zero on failure. The <code class="Fn">intr_priority</code>()
- function returns a process priority corresponding to the passed in interrupt
- flags.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The <a class="Xr">swi_add(9)</a> function demonstrates the use of
- <code class="Fn">intr_event_create</code>() and
- <code class="Fn">intr_event_add_handler</code>().</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>int
-swi_add(struct intr_event **eventp, const char *name, driver_intr_t handler,
- void *arg, int pri, enum intr_type flags, void **cookiep)
-{
- struct intr_event *ie;
- int error = 0;
-
- if (flags &amp; INTR_ENTROPY)
- return (EINVAL);
-
- ie = (eventp != NULL) ? *eventp : NULL;
-
- if (ie != NULL) {
- if (!(ie-&gt;ie_flags &amp; IE_SOFT))
- return (EINVAL);
- } else {
- error = intr_event_create(&amp;ie, NULL, IE_SOFT, 0,
- NULL, NULL, NULL, swi_assign_cpu, &quot;swi%d:&quot;, pri);
- if (error)
- return (error);
- if (eventp != NULL)
- *eventp = ie;
- }
- if (handler != NULL) {
- error = intr_event_add_handler(ie, name, NULL, handler, arg,
- PI_SWI(pri), flags, cookiep);
- }
- return (error);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">intr_event_add_handler</code>() function will
- fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">ie</var> or <var class="Fa">name</var> arguments are
- <code class="Dv">NULL</code>.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">handler</var> and <var class="Fa">filter</var>
- arguments are both <code class="Dv">NULL</code>.</dd>
- <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <code class="Dv">IH_EXCLUSIVE</code> flag is specified and the
- interrupt thread <var class="Fa">ie</var> already has at least one
- handler, or the interrupt thread <var class="Fa">ie</var> already has an
- exclusive handler.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">intr_event_create</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt>
- <dd>A flag other than <code class="Dv">IE_SOFT</code> was specified in the
- <var class="Fa">flags</var> parameter.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">intr_event_destroy</code>() function will
- fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">ie</var> argument is
- <code class="Dv">NULL</code>.</dd>
- <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
- <dd>The interrupt event pointed to by <var class="Fa">ie</var> has at least
- one handler which has not been removed with
- <code class="Fn">intr_event_remove_handler</code>().</dd>
-</dl>
-<p class="Pp">The <code class="Fn">intr_event_handle</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~6">[<a class="permalink" href="#EINVAL~6"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">ie</var> argument is
- <code class="Dv">NULL</code>.</dd>
- <dt id="EINVAL~7">[<a class="permalink" href="#EINVAL~7"><code class="Er">EINVAL</code></a>]</dt>
- <dd>There are no interrupt handlers assigned to <var class="Fa">ie</var>.</dd>
- <dt id="EINVAL~8">[<a class="permalink" href="#EINVAL~8"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The interrupt was not acknowledged by any filter and has no associated
- thread handler.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">intr_event_remove_handler</code>() function
- will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~9">[<a class="permalink" href="#EINVAL~9"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">cookie</var> argument is
- <code class="Dv">NULL</code>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">critical(9)</a>, <a class="Xr">kthread(9)</a>,
- <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">swi(9)</a>, <a class="Xr">uma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Interrupt threads and their corresponding API first appeared in
- <span class="Ux">FreeBSD 5.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 24, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/intro.9 3.html b/static/freebsd/man9/intro.9 3.html
deleted file mode 100644
index 9c218a7a..00000000
--- a/static/freebsd/man9/intro.9 3.html
+++ /dev/null
@@ -1,387 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">INTRO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">INTRO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">intro</code> &#x2014;
- <span class="Nd">introduction to kernel programming interfaces</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Welcome to the <span class="Ux">FreeBSD</span> kernel
- documentation. Outside the source code itself, this set of
- <a class="Xr">man(1)</a> pages is the primary resource for information on
- usage of the numerous programming interfaces available within the kernel. In
- some cases, it is also a source of truth for the implementation details
- and/or design decisions behind a particular subsystem or piece of code.</p>
-<p class="Pp">The intended audience of this documentation is developers, and the
- primary authors are also developers. It is written assuming a certain
- familiarity with common programming or OS-level concepts and practices.
- However, this documentation should also attempt to provide enough background
- information that readers approaching a particular subsystem or interface for
- the first time will be able to understand.</p>
-<p class="Pp">To further set expectations, we acknowledge that kernel
- documentation, like the source code itself, is forever a work-in-progress.
- There will be large sections of the codebase whose documentation is subtly
- or severely outdated, or missing altogether. This documentation is a
- supplement to the source code, and cannot always be taken at face value.</p>
-<p class="Pp">At its best, section 9 documentation will provide a description of
- a particular piece of code that, paired with its implementation, fully
- informs the reader of the intended and realized effects.</p>
-<p class="Pp"><a class="Xr">man(1)</a> pages in this section most frequently
- describe functions, but may also describe types, global variables, macros,
- or high-level concepts.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODING_GUIDELINES"><a class="permalink" href="#CODING_GUIDELINES">CODING
- GUIDELINES</a></h1>
-<p class="Pp">Code written for the <span class="Ux">FreeBSD</span> kernel is
- expected to conform to the established style and coding conventions. Please
- see <a class="Xr">style(9)</a> for a detailed set of rules and
- guidelines.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="OVERVIEW"><a class="permalink" href="#OVERVIEW">OVERVIEW</a></h1>
-<p class="Pp">Below is presented various subsystems.</p>
-<section class="Ss">
-<h2 class="Ss" id="Data_Structures"><a class="permalink" href="#Data_Structures">Data
- Structures</a></h2>
-<p class="Pp">There are implementations for many well-known data structures
- available in the kernel.</p>
-<dl class="Bl-tag">
- <dt><a class="Xr">bitstring(3)</a></dt>
- <dd>Simple bitmap implementation.</dd>
- <dt><a class="Xr">counter(9)</a></dt>
- <dd>An SMP-safe general-purpose counter implementation.</dd>
- <dt><a class="Xr">hash(9)</a></dt>
- <dd>Hash map implementation.</dd>
- <dt><a class="Xr">nv(9)</a></dt>
- <dd>Name/value pairs.</dd>
- <dt><a class="Xr">queue(3)</a></dt>
- <dd>Singly-linked and doubly-linked lists, and queues.</dd>
- <dt><a class="Xr">refcount(9)</a></dt>
- <dd>An SMP-safe implementation of reference counts.</dd>
- <dt><a class="Xr">sbuf(9)</a></dt>
- <dd>Dynamic string composition.</dd>
- <dt><a class="Xr">sglist(9)</a></dt>
- <dd>A scatter/gather list implementation.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Utility_Functions"><a class="permalink" href="#Utility_Functions">Utility
- Functions</a></h2>
-<p class="Pp">Functions or facilities of general usefulness or convenience. See
- also the <a class="Sx" href="#Testing_and_Debugging_Tools">Testing and
- Debugging Tools</a> or <a class="Sx" href="#Miscellaneous">Miscellaneous</a>
- sub-sections below.</p>
-<p class="Pp">Formatted output and logging functions are described by
- <a class="Xr">printf(9)</a>.</p>
-<p class="Pp">Endian-swapping functions: <a class="Xr">byteorder(9)</a>.</p>
-<p class="Pp">Data output in hexadecimal format:
- <a class="Xr">hexdump(9)</a>.</p>
-<p class="Pp">A rich set of macros for declaring <a class="Xr">sysctl(8)</a>
- variables and functions is described by <a class="Xr">sysctl(9)</a>.</p>
-<p class="Pp" id="_Static_assert">Non-recoverable errors in the kernel should
- trigger a <a class="Xr">panic(9)</a>. Run-time assertions can be verified
- using the <a class="Xr">KASSERT(9)</a> macros. Compile-time assertions
- should use
- <a class="permalink" href="#_Static_assert"><code class="Fn">_Static_assert</code></a>().</p>
-<p class="Pp">The SYSINIT framework provides macros for declaring functions that
- will be executed during start-up and shutdown; see
- <a class="Xr">SYSINIT(9)</a>.</p>
-<p class="Pp">Deprecation messages may be emitted with
- <a class="Xr">gone_in(9)</a>.</p>
-<p class="Pp">A unit number facility is provided by
- <a class="Xr">unr(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Synchronization_Primitives"><a class="permalink" href="#Synchronization_Primitives">Synchronization
- Primitives</a></h2>
-<p class="Pp">The <a class="Xr">locking(9)</a> man page gives an overview of the
- various types of locks available in the kernel and advice on their
- usage.</p>
-<p class="Pp">Atomic primitives are described by
- <a class="Xr">atomic(9)</a>.</p>
-<p class="Pp">The <a class="Xr">epoch(9)</a> and <a class="Xr">smr(9)</a>
- facilities are used to create lock-free data structures. There is also
- <a class="Xr">seqc(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Memory_Management"><a class="permalink" href="#Memory_Management">Memory
- Management</a></h2>
-<p class="Pp">Dynamic memory allocations inside the kernel are generally done
- using <a class="Xr">malloc(9)</a>. Frequently allocated objects may prefer
- to use <a class="Xr">uma(9)</a>.</p>
-<p class="Pp">Much of the virtual memory system operates on
- <var class="Vt">vm_page_t</var> structures. The following functions are
- documented:</p>
-<div class="Bd Pp Bd-indent"><a class="Xr">vm_page_advise(9)</a>,
- <a class="Xr">vm_page_aflag(9)</a>, <a class="Xr">vm_page_alloc(9)</a>,
- <a class="Xr">vm_page_bits(9)</a>, <a class="Xr">vm_page_busy(9)</a>,
- <a class="Xr">vm_page_deactivate(9)</a>, <a class="Xr">vm_page_free(9)</a>,
- <a class="Xr">vm_page_grab(9)</a>, <a class="Xr">vm_page_insert(9)</a>,
- <a class="Xr">vm_page_lookup(9)</a>, <a class="Xr">vm_page_rename(9)</a>,
- <a class="Xr">vm_page_sbusy(9)</a>, <a class="Xr">vm_page_wire(9)</a></div>
-<p class="Pp">Virtual address space maps are managed with the
- <a class="Xr">vm_map(9)</a> API.</p>
-<p class="Pp">The machine-dependent portion of the virtual memory stack is the
- <a class="Xr">pmap(9)</a> module.</p>
-<p class="Pp">Allocation policies for NUMA memory domains are managed with the
- <a class="Xr">domainset(9)</a> API.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="File_Systems"><a class="permalink" href="#File_Systems">File
- Systems</a></h2>
-<p class="Pp">The kernel interface for file systems is <a class="Xr">VFS(9)</a>.
- File system implementations register themselves with
- <a class="Xr">vfsconf(9)</a>.</p>
-<p class="Pp">The <a class="Xr">vnode(9)</a> is the abstract and
- filesystem-independent representation of a file, directory, or other
- file-like entity within the kernel.</p>
-<p class="Pp">The implementation of access control lists for filesystems is
- described by <a class="Xr">acl(9)</a>. Also
- <a class="Xr">vaccess(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="I/O_and_Storage"><a class="permalink" href="#I/O_and_Storage">I/O
- and Storage</a></h2>
-<p class="Pp">The GEOM framework represents I/O requests using the
- <a class="Xr">bio(9)</a> structure.</p>
-<p class="Pp">Disk drivers connect themselves to GEOM using the
- <a class="Xr">disk(9)</a> API.</p>
-<p class="Pp">The <a class="Xr">devstat(9)</a> facility provides an interface
- for recording device statistics in disk drivers.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Networking"><a class="permalink" href="#Networking">Networking</a></h2>
-<p class="Pp">Much of the networking stack uses the <a class="Xr">mbuf(9)</a>, a
- flexible memory management unit commonly used to store network packets.</p>
-<p class="Pp">Network interfaces are implemented using the
- <a class="Xr">ifnet(9)</a> API, which has functions for drivers and
- consumers.</p>
-<p class="Pp">A framework for managing packet output queues is described by
- <a class="Xr">altq(9)</a>.</p>
-<p class="Pp">To receive incoming packets, network protocols register themselves
- with <a class="Xr">netisr(9)</a>.</p>
-<p class="Pp">Virtualization of the network stack is provided by
- <a class="Xr">VNET(9)</a>.</p>
-<p class="Pp">The front-end for interfacing with network sockets from within the
- kernel is described by <a class="Xr">socket(9)</a>. The back-end interface
- for socket implementations is <a class="Xr">domain(9)</a>.</p>
-<p class="Pp">The low-level packet filter interface is described by
- <a class="Xr">pfil(9)</a>.</p>
-<p class="Pp">The <a class="Xr">bpf(9)</a> interface provides a mechanism to
- redirect packets to userspace.</p>
-<p class="Pp">The subsystem for IEEE 802.11 wireless networking is described by
- <a class="Xr">ieee80211(9)</a>.</p>
-<p class="Pp">A framework for modular TCP implementations is described by
- <a class="Xr">tcp_functions(9)</a>.</p>
-<p class="Pp">A framework for modular congestion control algorithms is described
- by <a class="Xr">mod_cc(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Drivers"><a class="permalink" href="#Device_Drivers">Device
- Drivers</a></h2>
-<p class="Pp">Consult the <a class="Xr">device(9)</a> and
- <a class="Xr">driver(9)</a> pages first.</p>
-<p class="Pp">Most drivers act as devices, and provide a set of methods
- implementing the device interface. This includes methods such as
- <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, and
- <a class="Xr">DEVICE_DETACH(9)</a>.</p>
-<p class="Pp">In addition to devices, there are buses. Buses may have children,
- in the form of devices or other buses. Bus drivers will implement additional
- methods, such as <a class="Xr">BUS_ADD_CHILD(9)</a>,
- <a class="Xr">BUS_READ_IVAR(9)</a>, or <a class="Xr">BUS_RESCAN(9)</a>.</p>
-<p class="Pp">Buses often perform resource accounting on behalf of their
- children. For this there is the <a class="Xr">rman(9)</a> API.</p>
-<p class="Pp">Drivers can request and manage their resources (e.g. memory-space
- or IRQ number) from their parent using the following sets of functions:</p>
-<div class="Bd Pp Bd-indent"><a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">bus_adjust_resource(9)</a>,
- <a class="Xr">bus_get_resource(9)</a>, <a class="Xr">bus_map_resource(9)</a>,
- <a class="Xr">bus_release_resource(9)</a>,
- <a class="Xr">bus_set_resource(9)</a></div>
-<p class="Pp">Direct Memory Access (DMA) is handled using the
- <a class="Xr">busdma(9)</a> framework.</p>
-<p class="Pp">Functions for accessing bus space (i.e. read/write) are provided
- by <a class="Xr">bus_space(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Clocks_and_Timekeeping"><a class="permalink" href="#Clocks_and_Timekeeping">Clocks
- and Timekeeping</a></h2>
-<p class="Pp">The kernel clock frequency and overall system time model is
- described by <a class="Xr">hz(9)</a>.</p>
-<p class="Pp">A few global time variables, such as system up-time, are described
- by <a class="Xr">time(9)</a>.</p>
-<p class="Pp">Raw CPU cycles are provided by
- <a class="Xr">get_cyclecount(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Userspace_Memory_Access"><a class="permalink" href="#Userspace_Memory_Access">Userspace
- Memory Access</a></h2>
-<p class="Pp">Direct read/write access of userspace memory from the kernel is
- not permitted, and memory transactions that cross the kernel/user boundary
- must go through one of several interfaces built for this task.</p>
-<p class="Pp">Most device drivers use the <a class="Xr">uiomove(9)</a> set of
- routines.</p>
-<p class="Pp">Simpler primitives for reading or writing smaller chunks of memory
- are described by <a class="Xr">casuword(9)</a>, <a class="Xr">copy(9)</a>,
- <a class="Xr">fetch(9)</a>, and <a class="Xr">store(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Kernel_Threads,_Tasks,_and_Callbacks"><a class="permalink" href="#Kernel_Threads,_Tasks,_and_Callbacks">Kernel
- Threads, Tasks, and Callbacks</a></h2>
-<p class="Pp">Kernel threads and processes are created using the
- <a class="Xr">kthread(9)</a> and <a class="Xr">kproc(9)</a> interfaces,
- respectively.</p>
-<p class="Pp">Where dedicated kernel threads are too heavyweight, there is also
- the <a class="Xr">taskqueue(9)</a> interface.</p>
-<p class="Pp">For low-latency callback handling, the
- <a class="Xr">callout(9)</a> framework should be used.</p>
-<p class="Pp">Dynamic handlers for pre-defined event hooks are registered and
- invoked using the <a class="Xr">EVENTHANDLER(9)</a> API.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Thread_Switching_and_Scheduling"><a class="permalink" href="#Thread_Switching_and_Scheduling">Thread
- Switching and Scheduling</a></h2>
-<p class="Pp">The machine-independent interface to a context switch is
- <a class="Xr">mi_switch(9)</a>.</p>
-<p class="Pp">To prevent preemption, use a <a class="Xr">critical(9)</a>
- section.</p>
-<p class="Pp">To voluntarily yield the processor, use
- <a class="Xr">kern_yield(9)</a>.</p>
-<p class="Pp">The various functions which will deliberately put a thread to
- sleep are described by <a class="Xr">sleep(9)</a>. Sleeping threads are
- removed from the scheduler and placed on a
- <a class="Xr">sleepqueue(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Processes_and_Signals"><a class="permalink" href="#Processes_and_Signals">Processes
- and Signals</a></h2>
-<p class="Pp">To locate a process or process group by its identifier, use
- <a class="Xr">pfind(9)</a> and <a class="Xr">pgfind(9)</a>. Alternatively,
- the <a class="Xr">pget(9)</a> function provides additional search
- specificity.</p>
-<p class="Pp">The &quot;hold count&quot; of a process can be manipulated with
- <a class="Xr">PHOLD(9)</a>.</p>
-<p class="Pp">The kernel interface for signals is described by
- <a class="Xr">signal(9)</a>.</p>
-<p class="Pp">Signals can be sent to processes or process groups using the
- functions described by <a class="Xr">psignal(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Security"><a class="permalink" href="#Security">Security</a></h2>
-<p class="Pp">See the overview in <a class="Xr">security(7)</a>.</p>
-<p class="Pp">The basic structure for user credentials is <var class="Vt">struct
- ucred</var>, managed by the <a class="Xr">ucred(9)</a> API. Thread
- credentials are verified using <a class="Xr">priv(9)</a> to allow or deny
- certain privileged actions.</p>
-<p class="Pp">Policies influenced by <var class="Va">kern.securelevel</var> must
- use the <a class="Xr">securelevel_gt(9)</a> or
- <a class="Xr">securelevel_ge(9)</a> functions.</p>
-<p class="Pp">The Mandatory Access Control (MAC) framework provides a wide set
- of hooks, supporting dynamically-registered security modules; see
- <a class="Xr">mac(9)</a>.</p>
-<p class="Pp">Cryptographic services are provided by the OpenCrypto framework.
- This API provides an interface for both consumers and crypto drivers; see
- <a class="Xr">crypto(9)</a>.</p>
-<p class="Pp">For information on random number generation, see
- <a class="Xr">random(9)</a> and <a class="Xr">prng(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Kernel_Modules"><a class="permalink" href="#Kernel_Modules">Kernel
- Modules</a></h2>
-<p class="Pp">The interfaces for declaring loadable kernel modules are described
- by <a class="Xr">module(9)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interrupts"><a class="permalink" href="#Interrupts">Interrupts</a></h2>
-<p class="Pp"><a class="Xr">intr_event(9)</a> describes the machine-independent
- portion of the interrupt framework that supports registration and execution
- of interrupt handlers.</p>
-<p class="Pp">Software interrupts are provided by <a class="Xr">swi(9)</a>.</p>
-<p class="Pp">Device drivers register their interrupt handlers using the
- <a class="Xr">bus_setup_intr(9)</a> function.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Testing_and_Debugging_Tools"><a class="permalink" href="#Testing_and_Debugging_Tools">Testing
- and Debugging Tools</a></h2>
-<p class="Pp">A kernel test framework: <a class="Xr">kern_testfrwk(9)</a></p>
-<p class="Pp">A facility for defining configurable fail points is described by
- <a class="Xr">fail(9)</a>.</p>
-<p class="Pp">Commands for the <a class="Xr">ddb(4)</a> kernel debugger are
- defined with the <a class="Xr">DB_COMMAND(9)</a> family of macros.</p>
-<p class="Pp">The <a class="Xr">ktr(4)</a> tracing facility adds static
- tracepoints to many areas of the kernel. These tracepoints are defined using
- the macros described by <a class="Xr">ktr(9)</a>.</p>
-<p class="Pp">Static probes for DTrace are defined using the
- <a class="Xr">SDT(9)</a> macros.</p>
-<p class="Pp">Stack traces can be captured and printed with the
- <a class="Xr">stack(9)</a> API.</p>
-<p class="Pp">Kernel sanitizers can perform additional compiler-assisted checks
- against memory use/access. These runtimes are capable of detecting
- difficult-to-identify classes of bugs, at the cost of a large overhead. The
- Kernel Address Sanitizer <a class="Xr">KASAN(9)</a> and Kernel Memory
- Sanitizer <a class="Xr">KMSAN(9)</a> are supported.</p>
-<p class="Pp">The <a class="Xr">LOCK_PROFILING(9)</a> kernel config option
- enables extra code to assist with profiling and/or debugging lock
- performance.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Driver_Tools"><a class="permalink" href="#Driver_Tools">Driver
- Tools</a></h2>
-<p class="Pp">Defined functions/APIs for specific types of devices.</p>
-<dl class="Bl-tag">
- <dt><a class="Xr">iflib(9)</a></dt>
- <dd>Programming interface for <a class="Xr">iflib(4)</a> based network
- drivers.</dd>
- <dt><a class="Xr">pci(9)</a></dt>
- <dd>Peripheral Component Interconnect (PCI) and PCI Express (PCIe) programming
- API.</dd>
- <dt><a class="Xr">pwmbus(9)</a></dt>
- <dd>Pulse-Width Modulation (PWM) bus interface methods.</dd>
- <dt><a class="Xr">usbdi(9)</a></dt>
- <dd>Universal Serial Bus programming interface.</dd>
- <dt><a class="Xr">superio(9)</a></dt>
- <dd>Functions for Super I/O controller devices.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Miscellaneous"><a class="permalink" href="#Miscellaneous">Miscellaneous</a></h2>
-<p class="Pp">Dynamic per-CPU variables: <a class="Xr">dpcpu(9)</a>.</p>
-<p class="Pp">CPU bitmap management: <a class="Xr">cpuset(9)</a>.</p>
-<p class="Pp">Kernel environment management: <a class="Xr">getenv(9)</a>.</p>
-<p class="Pp">Contexts for CPU floating-point registers are managed by the
- <a class="Xr">fpu_kern(9)</a> facility.</p>
-<p class="Pp">For details on the shutdown/reboot procedure and available
- shutdown hooks, see <a class="Xr">reboot(9)</a>.</p>
-<p class="Pp">A facility for asynchronous logging to files from within the
- kernel is provided by <a class="Xr">alq(9)</a>.</p>
-<p class="Pp">The <a class="Xr">osd(9)</a> framework provides a mechanism to
- dynamically extend core structures in a way that preserves KBI. See the
- <a class="Xr">hhook(9)</a> and <a class="Xr">khelp(9)</a> APIs for
- information on how this is used.</p>
-<p class="Pp">The kernel object implementation is described by
- <a class="Xr">kobj(9)</a>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">man(1)</a>, <a class="Xr">style(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsT">The FreeBSD Architecture
- Handbook</span>,
- <a class="RsU" href="https://docs.freebsd.org/en/books/arch-handbook/">https://docs.freebsd.org/en/books/arch-handbook/</a>.</cite></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 30, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kasan.9 3.html b/static/freebsd/man9/kasan.9 3.html
deleted file mode 100644
index c5bf9093..00000000
--- a/static/freebsd/man9/kasan.9 3.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KASAN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KASAN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">KASAN</code> &#x2014; <span class="Nd">Kernel
- Address SANitizer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp">The <span class="Pa">GENERIC-KASAN</span> kernel configuration can
- be used to compile a KASAN-enabled kernel using
- <span class="Pa">GENERIC</span> as a base configuration. Alternately, to
- compile KASAN into the kernel, place the following line in your kernel
- configuration file:</p>
-<div class="Bd Pp Bd-indent"><code class="Cd">options KASAN</code></div>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/asan.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kasan_mark</code>(<var class="Fa" style="white-space: nowrap;">const
- void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">size_t
- redzsize</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- code</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">KASAN</code> is a subsystem which leverages
- compiler instrumentation to detect invalid memory accesses in the kernel.
- Currently it is implemented on the amd64 and arm64 platforms.</p>
-<p class="Pp" id="kmem_malloc">When <code class="Nm">KASAN</code> is compiled
- into the kernel, the compiler is configured to emit function calls upon
- every memory access. The functions are implemented by
- <code class="Nm">KASAN</code> and permit run-time detection of several types
- of bugs including use-after-frees, double frees and frees of invalid
- pointers, and out-of-bounds accesses. These protections apply to memory
- allocated by <a class="Xr">uma(9)</a>, <a class="Xr">malloc(9)</a> and
- related functions, and
- <a class="permalink" href="#kmem_malloc"><code class="Fn">kmem_malloc</code></a>()
- and related functions, as well as global variables and kernel stacks.
- <code class="Nm">KASAN</code> is conservative and will not detect all
- instances of these types of bugs. Memory accesses through the kernel map are
- sanitized, but accesses via the direct map are not. When
- <code class="Nm">KASAN</code> is configured, the kernel aims to minimize its
- use of the direct map.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp"><code class="Nm">KASAN</code> is implemented using compiler
- instrumentation and a kernel runtime. When a kernel is built with the KASAN
- option enabled, the compiler inserts function calls before most memory
- accesses in the generated code. The runtime implements the corresponding
- functions, which decide whether a given access is valid. If not, the runtime
- prints a warning or panics the kernel, depending on the value of the
- <a class="permalink" href="#debug.kasan.panic_on_violation"><b class="Sy" id="debug.kasan.panic_on_violation">debug.kasan.panic_on_violation</b></a>
- sysctl/tunable.</p>
-<p class="Pp" id="debug.kasan.disable=1">The <code class="Nm">KASAN</code>
- runtime in a KASAN-configured kernel can be disabled by setting the loader
- tunable
- <a class="permalink" href="#debug.kasan.disable=1"><b class="Sy">debug.kasan.disable=1</b></a>.</p>
-<p class="Pp">The <code class="Nm">KASAN</code> runtime works by maintaining a
- shadow map for the kernel map. There exists a linear mapping between
- addresses in the kernel map and addresses in the shadow map. The shadow map
- is used to store information about the current state of allocations from the
- kernel map. For example, when a buffer is returned by
- <a class="Xr">malloc(9)</a>, the corresponding region of the shadow map is
- marked to indicate that the buffer is valid. When it is freed, the shadow
- map is updated to mark the buffer as invalid. Accesses to the buffer are
- intercepted by the <code class="Nm">KASAN</code> runtime and validated using
- the contents of the shadow map.</p>
-<p class="Pp">Upon booting, all kernel memory is marked as valid. Kernel
- allocators must mark cached but free buffers as invalid, and must mark them
- valid before freeing the kernel virtual address range. This slightly reduces
- the effectiveness of <code class="Nm">KASAN</code> but simplifies its
- maintenance and integration into the kernel.</p>
-<p class="Pp">Updates to the shadow map are performed by calling
- <code class="Fn">kasan_mark</code>(). Parameter <var class="Fa">addr</var>
- is the address of the buffer whose shadow is to be updated,
- <var class="Fa">size</var> is the usable size of the buffer, and
- <var class="Fa">redzsize</var> is the full size of the buffer allocated from
- lower layers of the system. <var class="Fa">redzsize</var> must be greater
- than or equal to <var class="Fa">size</var>. In some cases kernel allocators
- will return a buffer larger than that requested by the consumer; the unused
- space at the end is referred to as a red zone and is always marked as
- invalid. <var class="Fa">code</var> allows the caller to specify an
- identifier used when marking a buffer as invalid. The identifier is included
- in any reports generated by <code class="Nm">KASAN</code> and helps identify
- the source of the invalid access. For instance, when an item is freed to a
- <a class="Xr">uma(9)</a> zone, the item is marked with
- <code class="Dv">KASAN_UMA_FREED</code>. See
- <code class="In">&lt;<a class="In">sys/asan.h</a>&gt;</code> for the
- available identifiers. If the entire buffer is to be marked valid, i.e.,
- <var class="Fa">size</var> and <var class="Fa">redzsize</var> are equal,
- <var class="Fa">code</var> should be 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">build(7)</a>, <a class="Xr">KMSAN(9)</a>,
- <a class="Xr">malloc(9)</a>, <a class="Xr">memguard(9)</a>,
- <a class="Xr">redzone(9)</a>, <a class="Xr">uma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">KASAN</code> was ported from
- <span class="Ux">NetBSD</span> and first appeared in
- <span class="Ux">FreeBSD 13.1</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Accesses to kernel memory outside of the kernel map are ignored by
- the <code class="Nm">KASAN</code> runtime. When
- <code class="Nm">KASAN</code> is configured, the kernel memory allocators
- are configured to use the kernel map, but some uses of the direct map
- remain. For example, on amd64 and arm64, accesses to page table pages are
- not tracked.</p>
-<p class="Pp">Some kernel memory allocators explicitly permit accesses after an
- object has been freed. These cannot be sanitized by
- <code class="Nm">KASAN</code>. For example, memory from all
- <a class="Xr">uma(9)</a> zones initialized with the
- <code class="Dv">UMA_ZONE_NOFREE</code> flag are not sanitized.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 13, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kern_reboot.9 3.html b/static/freebsd/man9/kern_reboot.9 3.html
deleted file mode 100644
index 126aea0f..00000000
--- a/static/freebsd/man9/kern_reboot.9 3.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">REBOOT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">REBOOT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kern_reboot</code>,
- <code class="Nm">shutdown_nice</code> &#x2014; <span class="Nd">reboot,
- halt, or power off the system</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/reboot.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern int rebooting;</var></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kern_reboot</code>(<var class="Fa" style="white-space: nowrap;">int
- howto</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">shutdown_nice</code>(<var class="Fa" style="white-space: nowrap;">int
- howto</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/eventhandler.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_pre_sync</var>,
- <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>,
- <var class="Fa" style="white-space: nowrap;">private</var>,
- <var class="Fa" style="white-space: nowrap;">priority</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_post_sync</var>,
- <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>,
- <var class="Fa" style="white-space: nowrap;">private</var>,
- <var class="Fa" style="white-space: nowrap;">priority</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_final</var>,
- <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>,
- <var class="Fa" style="white-space: nowrap;">private</var>,
- <var class="Fa" style="white-space: nowrap;">priority</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#kern_reboot"><code class="Fn" id="kern_reboot">kern_reboot</code></a>()
- function handles final system shutdown, and either halts, reboots, or powers
- down the system. The exact action to be taken is determined by the flags
- passed in <var class="Fa">howto</var>.</p>
-<p class="Pp">The relevant flags are:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="RB_HALT"><a class="permalink" href="#RB_HALT"><code class="Dv">RB_HALT</code></a></dt>
- <dd>Halt the system in-place rather than restarting.</dd>
- <dt id="RB_POWEROFF"><a class="permalink" href="#RB_POWEROFF"><code class="Dv">RB_POWEROFF</code></a></dt>
- <dd>Power down the system rather than restarting.</dd>
- <dt id="RB_POWERCYCLE"><a class="permalink" href="#RB_POWERCYCLE"><code class="Dv">RB_POWERCYCLE</code></a></dt>
- <dd>Request a power-cycle in addition to restarting.</dd>
- <dt id="RB_NOSYNC"><a class="permalink" href="#RB_NOSYNC"><code class="Dv">RB_NOSYNC</code></a></dt>
- <dd>Do not sync filesystems during shutdown.</dd>
- <dt id="RB_DUMP"><a class="permalink" href="#RB_DUMP"><code class="Dv">RB_DUMP</code></a></dt>
- <dd>Dump kernel memory during shutdown.</dd>
-</dl>
-</div>
-<p class="Pp">The <var class="Fa">howto</var> field, and its full list of flags
- are described in additional detail by <a class="Xr">reboot(2)</a>.</p>
-<p class="Pp" id="kern_reboot~2"><a class="permalink" href="#kern_reboot~2"><code class="Fn">kern_reboot</code></a>()
- performs the following actions:</p>
-<ol class="Bl-enum Bd-indent">
- <li>Set the <var class="Va">rebooting</var> variable to
- <code class="Dv">1</code>, indicating that the reboot process has begun
- and cannot be stopped.</li>
- <li>Unless the <code class="Dv">RB_NOSYNC</code> flag is set in
- <var class="Fa">howto</var>, sync and unmount the system's disks by
- calling <a class="Xr">vfs_unmountall(9)</a>.</li>
- <li id="doadump">If rebooting after a panic (<code class="Dv">RB_DUMP</code>
- is set in <var class="Fa">howto</var>, but <code class="Dv">RB_HALT</code>
- is not set), initiate a system crash dump via
- <a class="permalink" href="#doadump"><code class="Fn">doadump</code></a>().</li>
- <li>Print a message indicating that the system is about to be halted or
- rebooted, and a report of the total system uptime.</li>
- <li>Execute all registered shutdown hooks. See
- <a class="Sx" href="#SHUTDOWN_HOOKS">SHUTDOWN HOOKS</a> below.</li>
- <li id="cpu_reset">As a last resort, if none of the shutdown hooks handled the
- reboot, call the machine-dependent
- <a class="permalink" href="#cpu_reset"><code class="Fn">cpu_reset</code></a>()
- function. In the unlikely case that this is not supported,
- <code class="Fn">kern_reboot</code>() will loop forever at the end of the
- function. This requires a manual reset of the system.</li>
-</ol>
-<p class="Pp" id="kern_reboot~3"><a class="permalink" href="#kern_reboot~3"><code class="Fn">kern_reboot</code></a>()
- may be called from a typical kernel execution context, when the system is
- running normally. It may also be called as the final step of a kernel panic,
- or from the kernel debugger. Therefore, the code in this function is subject
- to restrictions described by the
- <a class="Sx" href="#EXECUTION_CONTEXT">EXECUTION CONTEXT</a> section of the
- <a class="Xr">panic(9)</a> man page.</p>
-<p class="Pp" id="shutdown_nice">The
- <a class="permalink" href="#shutdown_nice"><code class="Fn">shutdown_nice</code></a>()
- function is the intended path for performing a clean reboot or shutdown when
- the system is operating under normal conditions. Calling this function will
- send a signal to the <a class="Xr">init(8)</a> process, instructing it to
- perform a shutdown. When <a class="Xr">init(8)</a> has cleanly terminated
- its children, it will perform the <a class="Xr">reboot(2)</a> system call,
- which in turn calls <code class="Fn">kern_reboot</code>().</p>
-<p class="Pp" id="shutdown_nice~2">If
- <a class="permalink" href="#shutdown_nice~2"><code class="Fn">shutdown_nice</code></a>()
- is called before the <a class="Xr">init(8)</a> process has been spawned, or
- if the system has panicked or otherwise halted,
- <code class="Fn">kern_reboot</code>() will be called directly.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SHUTDOWN_HOOKS"><a class="permalink" href="#SHUTDOWN_HOOKS">SHUTDOWN
- HOOKS</a></h1>
-<p class="Pp">The system defines three separate
- <a class="Xr">EVENTHANDLER(9)</a> events, which are invoked successively
- during the shutdown procedure. These are
- <var class="Va">shutdown_pre_sync</var>,
- <var class="Va">shutdown_post_sync</var>, and
- <var class="Va">shutdown_final</var>. They will be executed unconditionally
- in the listed order. Handler functions registered to any of these events
- will receive the value of <var class="Fa">howto</var> as their second
- argument, which may be used to decide what action to take.</p>
-<p class="Pp">The <var class="Va">shutdown_pre_sync</var> event is invoked
- before syncing filesystems to disk. It enables any action or state
- transition that must happen before this point to take place.</p>
-<p class="Pp">The <var class="Va">shutdown_post_sync</var> event is invoked at
- the point immediately after the filesystem sync has finished. It enables,
- for example, disk drivers to complete the sync by flushing their cache to
- disk. Note that this event still takes place before the optional kernel core
- dump.</p>
-<p class="Pp" id="kern_reboot~4">The <var class="Va">shutdown_final</var> event
- is invoked as the very last step of
- <a class="permalink" href="#kern_reboot~4"><code class="Fn">kern_reboot</code></a>().
- Drivers and subsystems such as <a class="Xr">acpi(4)</a> can register
- handlers to this event that will perform the actual reboot, power-off, or
- halt.</p>
-<p class="Pp">Notably, the <var class="Va">shutdown_final</var> event is also
- the point at which all kernel modules will have their shutdown
- (<code class="Dv">MOD_SHUTDOWN</code>) hooks executed, and when the
- <a class="Xr">DEVICE_SHUTDOWN(9)</a> method will be executed recursively on
- all devices.</p>
-<p class="Pp" id="kern_reboot~5">All event handlers, like
- <a class="permalink" href="#kern_reboot~5"><code class="Fn">kern_reboot</code></a>()
- itself, may be run in either normal shutdown context or a kernel panic or
- debugger context. Handler functions are expected to take care not to trigger
- recursive panics.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">kern_reboot</code>() function does not
- return.</p>
-<p class="Pp">The <code class="Fn">shutdown_nice</code>() function will usually
- return to its caller, having initiated the asynchronous system shutdown. It
- will not return when called from a panic or debugger context, or during
- early boot.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A hypothetical driver, foo(4), defines a
- <var class="Va">shutdown_final</var> event handler that can handle system
- power-off by writing to a device register, but it does not handle halt or
- reset.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-foo_poweroff_handler(struct void *arg, int howto)
-{
- struct foo_softc *sc = arg;
- uint32_t reg;
-
- if ((howto &amp; RB_POWEROFF) != 0) {
- reg = FOO_POWEROFF;
- WRITE4(sc, FOO_POWEROFF_REG, reg);
- }
-}</pre>
-</div>
-<p class="Pp">The handler is then registered in the device attach routine:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>int
-foo_attach(device_t dev)
-{
- struct foo_softc *sc;
-
- ...
-
- /* Pass the device's software context as the private arg. */
- EVENTHANDLER_REGISTER(shutdown_final, foo_poweroff_handler, sc,
- SHUTDOWN_PRI_DEFAULT);
-
- ...
-}</pre>
-</div>
-<p class="Pp">This <var class="Va">shutdown_final</var> handler uses the
- <code class="Dv">RB_NOSYNC</code> flag to detect that a panic or other
- unusual condition has occurred, and returns early:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-bar_shutdown_final(struct void *arg, int howto)
-{
-
- if ((howto &amp; RB_NOSYNC) != 0)
- return;
-
- /* Some code that is not panic-safe. */
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">reboot(2)</a>, <a class="Xr">init(8)</a>,
- <a class="Xr">DEVICE_SHUTDOWN(9)</a>, <a class="Xr">EVENTHANDLER(9)</a>,
- <a class="Xr">module(9)</a>, <a class="Xr">panic(9)</a>,
- <a class="Xr">vfs_unmountall(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 23, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kern_testfrwk.9 3.html b/static/freebsd/man9/kern_testfrwk.9 3.html
deleted file mode 100644
index 71687c21..00000000
--- a/static/freebsd/man9/kern_testfrwk.9 3.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KERN_TESTFRWK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KERN_TESTFRWK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kern_testfrwk</code> &#x2014; <span class="Nd">A
- kernel testing framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp">kldload kern_testfrwk</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">So what is this sys/tests directory in the kernel all about?</p>
-<p class="Pp">Have you ever wanted to test a part of the
- <span class="Ux">FreeBSD</span> kernel in some way and you had no real way
- from user-land to make what you want to occur happen? Say an error path or
- situation where locking occurs in a particular manner that happens only once
- in a blue moon?</p>
-<p class="Pp">If so, then the kernel test framework is just what you are looking
- for. It is designed to help you create the situation you want.</p>
-<p class="Pp">There are two components to the system: the test framework and
- your test. This document will describe both components and use the test
- submitted with the initial commit of this code to discuss the test
- (<a class="Xr">callout_test(4)</a>). All of the tests become kernel loadable
- modules. The test you write should have a dependency on the test framework.
- That way it will be loaded automatically with your test. For example, you
- can see how to do this in the bottom of callout_test.c in
- <span class="Pa">sys/tests/callout_test/callout_test.c</span>.</p>
-<p class="Pp">The framework itself is in
- <span class="Pa">sys/tests/framework/kern_testfrwk.c</span>. Its job is to
- manage the tests that are loaded. (More than one can be loaded.) The idea is
- pretty simple; you load the test framework and then load your test.</p>
-<p class="Pp" id="kern_testframework_register">When your test loads, you
- register your tests with the kernel test framework. You do that through a
- call to
- <a class="permalink" href="#kern_testframework_register"><code class="Fn">kern_testframework_register</code></a>().
- Usually this is done at the module load event as shown below:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> switch (type) {
- case MOD_LOAD:
- err = kern_testframework_register(&quot;callout_test&quot;,
- run_callout_test);</pre>
-</div>
-<p class="Pp" id="run_callout_test">Here the test is &quot;callout_test&quot;
- and it is registered to run the function
- <a class="permalink" href="#run_callout_test"><code class="Fn">run_callout_test</code></a>()
- passing it a <var class="Fa">struct kern_test *ptr</var>. The
- <var class="Vt">kern_test</var> structure is defined in
- <span class="Pa">kern_testfrwk.h</span>.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct kern_test {
- char name[TEST_NAME_LEN];
- int num_threads; /* Fill in how many threads you want */
- int tot_threads_running; /* Private to framework */
- uint8_t test_options[TEST_OPTION_SPACE];
-};</pre>
-</div>
-<p class="Pp">The user sends this structure down via a sysctl to start your
- test. He or she places the same name you registered
- (&quot;callout_test&quot; in our example) in the <var class="Va">name</var>
- field. The user can also set the number of threads to run with
- <var class="Va">num_threads</var>.</p>
-<p class="Pp" id="run_callout_test~2">The framework will start the requested
- number of kernel threads, all running your test at the same time. The user
- does not specify anything in <var class="Va">tot_threads_running</var>; it
- is private to the framework. As the framework calls each of your tests, it
- will set the <var class="Va">tot_threads_running</var> to the index of the
- thread that your call is made from. For example, if the user sets
- <var class="Va">num_threads</var> to 2, then the function
- <a class="permalink" href="#run_callout_test~2"><code class="Fn">run_callout_test</code></a>()
- will be called once with <var class="Va">tot_threads_running</var> to 0, and
- a second time with <var class="Va">tot_threads_running</var> set to 1.</p>
-<p class="Pp">The <var class="Va">test_options</var> field is a test-specific
- set of information that is an opaque blob. It is passed in from user space
- and has a maximum size of 256 bytes. You can pass arbitrary test input in
- the space. In the case of callout_test we reshape that to:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct callout_test {
- int number_of_callouts;
- int test_number;
-};</pre>
-</div>
-<p class="Pp" id="run_callout_test~3">So the first lines of
- <a class="permalink" href="#run_callout_test~3"><code class="Fn">run_callout_test</code></a>()
- does the following to get at the user specific data:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre> struct callout_test *u;
- size_t sz;
- int i;
- struct callout_run *rn;
- int index = test-&gt;tot_threads_running;
-
- u = (struct callout_test *)test-&gt;test_options;</pre>
-</div>
-<p class="Pp">That way it can access: <var class="Va">u-&gt;test_number</var>
- (there are two types of tests provided with this test) and
- <var class="Va">u-&gt;number_of_callouts</var> (how many simultaneous
- callouts to run).</p>
-<p class="Pp" id="callout_async_drain">Your test can do anything with these
- bytes. So the callout_test in question wants to create a situation where
- multiple callouts are all run, that is the
- <var class="Va">number_of_callouts</var>, and it tries to cancel the callout
- with the new
- <a class="permalink" href="#callout_async_drain"><code class="Fn">callout_async_drain</code></a>().
- The threads do this by acquiring the lock in question, and then starting
- each of the callouts. It waits for the callouts to all go off (the executor
- spins waits). This forces the situation that the callouts have expired and
- are all waiting on the lock that the executor holds. After the callouts are
- all blocked, the executor calls
- <code class="Fn">callout_async_drain</code>() on each callout and releases
- the lock.</p>
-<p class="Pp">After all the callouts are done, a total status is printed showing
- the results via <a class="Xr">printf(9)</a>. The human tester can run
- <a class="Xr">dmesg(8)</a> to see the results. In this case it is expected
- that if you are running test 0, all the callouts expire on the same CPU so
- only one callout_drain function would have been called. the number of
- zero_returns should match the number of callout_drains that were called,
- i.e., 1. The one_returns should be the remainder of the callouts. If the
- test number was 1, the callouts were spread across all CPUs. The number of
- zero_returns will again match the number of drain calls made which matches
- the number of CPUs that were put in use.</p>
-<p class="Pp">More than one thread can be used with this test, though in the
- example case it is probably not necessary.</p>
-<p class="Pp">You should not need to change the framework. Just add tests and
- register them after loading.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The kernel test framework was written by <span class="An">Randall
- Stewart</span>
- &lt;<a class="Mt" href="mailto:rrs@FreeBSD.org">rrs@FreeBSD.org</a>&gt; with
- help from
- <br/>
- <span class="An">John Mark Gurney</span>
- &lt;<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 12, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kern_yield.9 3.html b/static/freebsd/man9/kern_yield.9 3.html
deleted file mode 100644
index 2be273f0..00000000
--- a/static/freebsd/man9/kern_yield.9 3.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KERN_YIELD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KERN_YIELD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kern_yield</code>,
- <code class="Nm">maybe_yield</code>, <code class="Nm">should_yield</code>
- &#x2014; <span class="Nd">functions for yielding execution of the current
- thread</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kern_yield</code>(<var class="Fa" style="white-space: nowrap;">int
- prio</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">maybe_yield</code>();</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">should_yield</code>();</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#kern_yield"><code class="Fn" id="kern_yield">kern_yield</code></a>()
- function causes the currently running thread to voluntarily, but
- unconditionally, surrender its execution to the scheduler. The
- <var class="Va">prio</var> argument specifies the scheduling priority to be
- assigned before the context switch, which has an influence on when execution
- will resume. Note that the requested priority will take effect until the
- thread returns to usermode, after which its base user priority will be
- restored. Valid values for <var class="Va">prio</var> are any of the
- <code class="Dv">PRI_*</code> values defined in
- <code class="In">&lt;<a class="In">sys/priority.h</a>&gt;</code>, as well as
- the following special values:</p>
-<dl class="Bl-tag">
- <dt id="PRI_USER"><a class="permalink" href="#PRI_USER"><code class="Dv">PRI_USER</code></a></dt>
- <dd>Schedule the thread with its base user priority; the value corresponding
- to <a class="Xr">setpriority(2)</a> / <a class="Xr">nice(3)</a>.</dd>
- <dt id="PRI_UNCHANGED"><a class="permalink" href="#PRI_UNCHANGED"><code class="Dv">PRI_UNCHANGED</code></a></dt>
- <dd>Yield the thread without changing its priority.</dd>
-</dl>
-<p class="Pp" id="should_yield">The
- <a class="permalink" href="#should_yield"><code class="Fn">should_yield</code></a>()
- function checks if sufficient time has passed since the thread's last
- voluntary context switch that yielding would be a useful service to other
- threads. It returns <var class="Va">true</var> when this is the case. See
- <a class="Sx" href="#USAGE_NOTES">USAGE NOTES</a> for an elaboration of what
- this means.</p>
-<p class="Pp" id="maybe_yield">The
- <a class="permalink" href="#maybe_yield"><code class="Fn">maybe_yield</code></a>()
- function is a helper function for the common task of optionally yielding the
- processor. Internally,
- <code class="Fn">kern_yield</code>(<var class="Fa">PRI_USER</var>) will be
- called if <code class="Fn">should_yield</code>() returns
- <var class="Va">true</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USAGE_NOTES"><a class="permalink" href="#USAGE_NOTES">USAGE
- NOTES</a></h1>
-<p class="Pp">Although the kernel supports preemption, this is usually reserved
- for high-priority realtime or interrupt threads. Kernel worker threads and
- timesharing threads are not guaranteed to preempt each another. Thus,
- threads executing in the kernel are expected to behave cooperatively with
- respect to other threads in the system. The yield functions are mostly
- intended to be used by threads which perform a lot of work inside the
- kernel. For example: <code class="Fn">maybe_yield</code>() is called by the
- <code class="Dv">vlnru</code> process each time it reclaims a vnode.</p>
-<p class="Pp" id="kern_yield~2">The scheduler aims to identify threads which
- monopolize the CPU, and will schedule them with decreased priority. Threads
- which regularly yield the processor will be given the chance to run more
- often. The possibly surprising effect of this is that, depending on the
- disposition of other threads on the CPU's runqueue, a call to
- <a class="permalink" href="#kern_yield~2"><code class="Fn">kern_yield</code></a>()
- does not guarantee that the yielding thread will be taken off the CPU.</p>
-<p class="Pp" id="kern_yield~3">With the above considerations in mind, it is
- advised that code written using
- <a class="permalink" href="#kern_yield~3"><code class="Fn">kern_yield</code></a>()
- be measured to confirm that its use has a positive effect on relevant
- performance or responsiveness metrics. Switching thread contexts has a
- non-zero cost, and thus yielding the processor too eagerly could have a
- negative impact on performance.</p>
-<p class="Pp">Additionally, since yielding is a cooperative action, it is
- advised that the yielding thread release any locks that it may be holding,
- when possible. Otherwise, threads which have been given the chance to run
- could end up waiting on the yielding thread to release the lock, largely
- defeating the purpose of the yield.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">setpriority(2)</a>, <a class="Xr">nice(3)</a>,
- <a class="Xr">mi_switch(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Mitchell
- Horne</span>
- &lt;<a class="Mt" href="mailto:mhorne@FreeBSD.org">mhorne@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 30, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kernacc.9 4.html b/static/freebsd/man9/kernacc.9 4.html
deleted file mode 100644
index eb0269e2..00000000
--- a/static/freebsd/man9/kernacc.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KERNACC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KERNACC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kernacc</code>, <code class="Nm">useracc</code>
- &#x2014; <span class="Nd">check memory regions for accessibility</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_extern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kernacc</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">useracc</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int rw</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#kernacc"><code class="Fn" id="kernacc">kernacc</code></a>()
- and
- <a class="permalink" href="#useracc"><code class="Fn" id="useracc">useracc</code></a>()
- functions check whether operations of the type specified in
- <var class="Fa">rw</var> are permitted in the range of virtual addresses
- given by <var class="Fa">addr</var> and <var class="Fa">len</var>. The
- possible values of <var class="Fa">rw</var> are any bitwise combination of
- <code class="Dv">VM_PROT_READ</code>, <code class="Dv">VM_PROT_WRITE</code>
- and <code class="Dv">VM_PROT_EXECUTE</code>.
- <code class="Fn">kernacc</code>() checks addresses in the kernel address
- space, while <code class="Fn">useracc</code>() considers
- <var class="Fa">addr</var> to represent an user space address. The process
- context to use for this operation is taken from the global variable
- <var class="Va">curproc</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Both functions return boolean true if the type of access specified
- by <var class="Fa">rw</var> is permitted. Otherwise boolean false is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The process pointer should be passed in as an argument to
- <code class="Fn">useracc</code>().</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kernel_mount.9 3.html b/static/freebsd/man9/kernel_mount.9 3.html
deleted file mode 100644
index 9e4c49e7..00000000
--- a/static/freebsd/man9/kernel_mount.9 3.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KERNEL_MOUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KERNEL_MOUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">free_mntarg</code>,
- <code class="Nm">kernel_mount</code>, <code class="Nm">mount_arg</code>,
- <code class="Nm">mount_argb</code>, <code class="Nm">mount_argf</code>,
- <code class="Nm">mount_argsu</code> &#x2014; <span class="Nd">functions
- provided as part of the kernel mount interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">free_mntarg</code>(<var class="Fa" style="white-space: nowrap;">struct
- mntarg *ma</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kernel_mount</code>(<var class="Fa" style="white-space: nowrap;">struct
- mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">struct mntarg *</var>
- <br/>
- <code class="Fn">mount_arg</code>(<var class="Fa">struct mntarg *ma</var>,
- <var class="Fa">const char *name</var>, <var class="Fa">const void
- *val</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp"><var class="Ft">struct mntarg *</var>
- <br/>
- <code class="Fn">mount_argb</code>(<var class="Fa" style="white-space: nowrap;">struct
- mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">int
- flag</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">struct mntarg *</var>
- <br/>
- <code class="Fn">mount_argf</code>(<var class="Fa" style="white-space: nowrap;">struct
- mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">struct mntarg *</var>
- <br/>
- <code class="Fn">mount_argsu</code>(<var class="Fa">struct mntarg *ma</var>,
- <var class="Fa">const char *name</var>, <var class="Fa">const void
- *val</var>, <var class="Fa">int len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#kernel_mount"><code class="Fn" id="kernel_mount">kernel_mount</code></a>()
- family of functions are provided as an API for building a list of mount
- arguments which will be used to mount file systems from inside the kernel.
- By accumulating a list of arguments, the API takes shape and provides the
- information necessary for the kernel to control the
- <a class="Xr">mount(8)</a> utility. When an error occurs, the process will
- stop. This will not cause a <a class="Xr">panic(9)</a>.</p>
-<p class="Pp">The header of the structure is stored in
- <span class="Pa">src/sys/kern/vfs_mount.c</span> which permits automatic
- structure creation to ease the mount process. Memory allocation must always
- be freed when the entire process is complete, it is an error otherwise.</p>
-<p class="Pp" id="free_mntarg">The
- <a class="permalink" href="#free_mntarg"><code class="Fn">free_mntarg</code></a>()
- function is used to free or clear the <var class="Vt">mntarg</var>
- structure.</p>
-<p class="Pp" id="kernel_mount~2">The
- <a class="permalink" href="#kernel_mount~2"><code class="Fn">kernel_mount</code></a>()
- function pulls information from the structure to perform the mount request
- on a given file system. Additionally, the
- <code class="Fn">kernel_mount</code>() function always calls the
- <code class="Fn">free_mntarg</code>() function. If <var class="Fa">ma</var>
- contains any error code generated during the construction, that code will be
- called and the file system mount will not be attempted.</p>
-<p class="Pp" id="mount_arg">The
- <a class="permalink" href="#mount_arg"><code class="Fn">mount_arg</code></a>()
- function takes a plain argument and crafts parts of the structure with
- regards to various mount options. If the length is a value less than 0,
- <a class="Xr">strlen(3)</a> is used. This argument will be referenced until
- either <code class="Fn">free_mntarg</code>() or
- <code class="Fn">kernel_mount</code>() is called.</p>
-<p class="Pp" id="mount_argb">The
- <a class="permalink" href="#mount_argb"><code class="Fn">mount_argb</code></a>()
- function is used to add boolean arguments to the structure. The
- <var class="Fa">flag</var> is the boolean value and
- <var class="Fa">name</var> must start with
- &quot;<code class="Li">no</code>&quot;, otherwise a panic will occur.</p>
-<p class="Pp" id="mount_argf">The
- <a class="permalink" href="#mount_argf"><code class="Fn">mount_argf</code></a>()
- function adds <a class="Xr">printf(9)</a> style arguments to the current
- structure.</p>
-<p class="Pp" id="mount_argsu">The
- <a class="permalink" href="#mount_argsu"><code class="Fn">mount_argsu</code></a>()
- function will add arguments to the structure from a userland string.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">An example of the <code class="Fn">*_cmount</code>() function:</p>
-<div class="Bd Pp Li">
-<pre>static int
-msdosfs_cmount(struct mntarg *ma, void *data, int flags, struct thread *td)
-{
- struct msdosfs_args args;
- int error;
-
- if (data == NULL)
- return (EINVAL);
- error = copyin(data, &amp;args, sizeof(args));
- if (error)
- return (error);
-
- ma = mount_argsu(ma, &quot;from&quot;, args.fspec, MAXPATHLEN);
- ma = mount_arg(ma, &quot;export&quot;, &amp;args.export, sizeof(args.export));
- ma = mount_argf(ma, &quot;uid&quot;, &quot;%d&quot;, args.uid);
- ma = mount_argf(ma, &quot;gid&quot;, &quot;%d&quot;, args.gid);
- ma = mount_argf(ma, &quot;mask&quot;, &quot;%d&quot;, args.mask);
- ma = mount_argf(ma, &quot;dirmask&quot;, &quot;%d&quot;, args.dirmask);
-
- ma = mount_argb(ma, args.flags &amp; MSDOSFSMNT_SHORTNAME, &quot;noshortname&quot;);
- ma = mount_argb(ma, args.flags &amp; MSDOSFSMNT_LONGNAME, &quot;nolongname&quot;);
- ma = mount_argb(ma, !(args.flags &amp; MSDOSFSMNT_NOWIN95), &quot;nowin95&quot;);
- ma = mount_argb(ma, args.flags &amp; MSDOSFSMNT_KICONV, &quot;nokiconv&quot;);
-
- ma = mount_argsu(ma, &quot;cs_win&quot;, args.cs_win, MAXCSLEN);
- ma = mount_argsu(ma, &quot;cs_dos&quot;, args.cs_dos, MAXCSLEN);
- ma = mount_argsu(ma, &quot;cs_local&quot;, args.cs_local, MAXCSLEN);
-
- error = kernel_mount(ma, flags);
-
- return (error);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_MOUNT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">kernel_mount</code>() family of functions and
- this manual page first appeared in <span class="Ux">FreeBSD 6.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Fn">kernel_mount</code>() family of functions and
- API was developed by <span class="An">Poul-Henning Kamp</span>
- &lt;<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>&gt;.
- This manual page was written by <span class="An">Tom Rhodes</span>
- &lt;<a class="Mt" href="mailto:trhodes@FreeBSD.org">trhodes@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 20, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/khelp.9 3.html b/static/freebsd/man9/khelp.9 3.html
deleted file mode 100644
index 1dd082c7..00000000
--- a/static/freebsd/man9/khelp.9 3.html
+++ /dev/null
@@ -1,309 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KHELP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KHELP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">khelp</code>,
- <code class="Nm">khelp_init_osd</code>,
- <code class="Nm">khelp_destroy_osd</code>,
- <code class="Nm">khelp_get_id</code>, <code class="Nm">khelp_get_osd</code>,
- <code class="Nm">khelp_add_hhook</code>,
- <code class="Nm">khelp_remove_hhook</code>,
- <code class="Nm">KHELP_DECLARE_MOD</code>,
- <code class="Nm">KHELP_DECLARE_MOD_UMA</code> &#x2014;
- <span class="Nd">Kernel Helper Framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/khelp.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/module_khelp.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">khelp_init_osd</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- classes</var>, <var class="Fa" style="white-space: nowrap;">struct osd
- *hosd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">khelp_destroy_osd</code>(<var class="Fa" style="white-space: nowrap;">struct
- osd *hosd</var>);</p>
-<p class="Pp"><var class="Ft">int32_t</var>
- <code class="Fn">khelp_get_id</code>(<var class="Fa" style="white-space: nowrap;">char
- *hname</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <code class="Fn">khelp_get_osd</code>(<var class="Fa" style="white-space: nowrap;">struct
- osd *hosd</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- id</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">khelp_add_hhook</code>(<var class="Fa" style="white-space: nowrap;">const
- struct hookinfo *hki</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <code class="Fn">khelp_remove_hhook</code>(<var class="Fa" style="white-space: nowrap;">const
- struct hookinfo *hki</var>);</p>
-<p class="Pp"><code class="Fn">KHELP_DECLARE_MOD</code>(<var class="Fa" style="white-space: nowrap;">hname</var>,
- <var class="Fa" style="white-space: nowrap;">hdata</var>,
- <var class="Fa" style="white-space: nowrap;">hhooks</var>,
- <var class="Fa" style="white-space: nowrap;">version</var>);</p>
-<p class="Pp"><code class="Fn">KHELP_DECLARE_MOD_UMA</code>(<var class="Fa" style="white-space: nowrap;">hname</var>,
- <var class="Fa" style="white-space: nowrap;">hdata</var>,
- <var class="Fa" style="white-space: nowrap;">hhooks</var>,
- <var class="Fa" style="white-space: nowrap;">version</var>,
- <var class="Fa" style="white-space: nowrap;">ctor</var>,
- <var class="Fa" style="white-space: nowrap;">dtor</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">khelp</code> provides a framework for managing
- <code class="Nm">khelp</code> modules, which indirectly use the
- <a class="Xr">hhook(9)</a> KPI to register their hook functions with hook
- points of interest within the kernel. Khelp modules aim to provide a
- structured way to dynamically extend the kernel at runtime in an ABI
- preserving manner. Depending on the subsystem providing hook points, a
- <code class="Nm">khelp</code> module may be able to associate per-object
- data for maintaining relevant state between hook calls. The
- <a class="Xr">hhook(9)</a> and <code class="Nm">khelp</code> frameworks are
- tightly integrated and anyone interested in <code class="Nm">khelp</code>
- should also read the <a class="Xr">hhook(9)</a> manual page thoroughly.</p>
-<section class="Ss">
-<h2 class="Ss" id="Information_for_Khelp_Module_Implementors"><a class="permalink" href="#Information_for_Khelp_Module_Implementors">Information
- for Khelp Module Implementors</a></h2>
-<p class="Pp"><code class="Nm">khelp</code> modules are represented within the
- <code class="Nm">khelp</code> framework by a <var class="Vt">struct
- helper</var> which has the following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct helper {
- int (*mod_init) (void);
- int (*mod_destroy) (void);
-#define HELPER_NAME_MAXLEN 16
- char h_name[HELPER_NAME_MAXLEN];
- uma_zone_t h_zone;
- struct hookinfo *h_hooks;
- uint32_t h_nhooks;
- uint32_t h_classes;
- int32_t h_id;
- volatile uint32_t h_refcount;
- uint16_t h_flags;
- TAILQ_ENTRY(helper) h_next;
-};</pre>
-</div>
-<p class="Pp">Modules must instantiate a <var class="Vt">struct helper</var>,
- but are only required to set the <var class="Va">h_classes</var> field, and
- may optionally set the <var class="Va">h_flags</var>,
- <var class="Va">mod_init</var> and <var class="Va">mod_destroy</var> fields
- where required. The framework takes care of all other fields and modules
- should refrain from manipulating them. Using the C99 designated initialiser
- feature to set fields is encouraged.</p>
-<p class="Pp">If specified, the <var class="Va">mod_init</var> function will be
- run by the <code class="Nm">khelp</code> framework prior to completing the
- registration process. Returning a non-zero value from the
- <var class="Va">mod_init</var> function will abort the registration process
- and fail to load the module. If specified, the
- <var class="Va">mod_destroy</var> function will be run by the
- <code class="Nm">khelp</code> framework during the deregistration process,
- after the module has been deregistered by the <code class="Nm">khelp</code>
- framework. The return value is currently ignored. Valid
- <code class="Nm">khelp</code> classes are defined in
- <code class="In">&lt;<a class="In">sys/khelp.h</a>&gt;</code>. Valid flags
- are defined in
- <code class="In">&lt;<a class="In">sys/module_khelp.h</a>&gt;</code>. The
- HELPER_NEEDS_OSD flag should be set in the <var class="Va">h_flags</var>
- field if the <code class="Nm">khelp</code> module requires persistent
- per-object data storage. There is no programmatic way (yet) to check if a
- <code class="Nm">khelp</code> class provides the ability for
- <code class="Nm">khelp</code> modules to associate persistent per-object
- data, so a manual check is required.</p>
-<p class="Pp" id="KHELP_DECLARE_MOD">The
- <a class="permalink" href="#KHELP_DECLARE_MOD"><code class="Fn">KHELP_DECLARE_MOD</code></a>()
- and <code class="Fn">KHELP_DECLARE_MOD_UMA</code>() macros provide
- convenient wrappers around the <a class="Xr">DECLARE_MODULE(9)</a> macro,
- and are used to register a <code class="Nm">khelp</code> module with the
- <code class="Nm">khelp</code> framework.
- <code class="Fn">KHELP_DECLARE_MOD_UMA</code>() should only be used by
- modules which require the use of persistent per-object storage i.e. modules
- which set the HELPER_NEEDS_OSD flag in their <var class="Vt">struct
- helper</var>'s <var class="Va">h_flags</var> field.</p>
-<p class="Pp" id="KHELP_DECLARE_MOD_UMA">The first four arguments common to both
- macros are as follows. The <var class="Fa">hname</var> argument specifies
- the unique <a class="Xr">ascii(7)</a> name for the
- <code class="Nm">khelp</code> module. It should be no longer than
- HELPER_NAME_MAXLEN-1 characters in length. The <var class="Fa">hdata</var>
- argument is a pointer to the module's <var class="Vt">struct helper</var>.
- The <var class="Fa">hhooks</var> argument points to a static array of
- <var class="Vt">struct hookinfo</var> structures. The array should contain a
- <var class="Vt">struct hookinfo</var> for each <a class="Xr">hhook(9)</a>
- point the module wishes to hook, even when using the same hook function
- multiple times for different <a class="Xr">hhook(9)</a> points. The
- <var class="Fa">version</var> argument specifies a version number for the
- module which will be passed to <a class="Xr">MODULE_VERSION(9)</a>. The
- <a class="permalink" href="#KHELP_DECLARE_MOD_UMA"><code class="Fn">KHELP_DECLARE_MOD_UMA</code></a>()
- macro takes the additional <var class="Fa">ctor</var> and
- <var class="Fa">dtor</var> arguments, which specify optional
- <a class="Xr">uma(9)</a> constructor and destructor functions. NULL should
- be passed where the functionality is not required.</p>
-<p class="Pp" id="khelp_get_id">The
- <a class="permalink" href="#khelp_get_id"><code class="Fn">khelp_get_id</code></a>()
- function returns the numeric identifier for the
- <code class="Nm">khelp</code> module with name
- <var class="Fa">hname</var>.</p>
-<p class="Pp" id="khelp_get_osd">The
- <a class="permalink" href="#khelp_get_osd"><code class="Fn">khelp_get_osd</code></a>()
- function is used to obtain the per-object data pointer for a specified
- <code class="Nm">khelp</code> module. The <var class="Fa">hosd</var>
- argument is a pointer to the underlying subsystem object's
- <var class="Vt">struct osd</var>. This is provided by the
- <a class="Xr">hhook(9)</a> framework when calling into a
- <code class="Nm">khelp</code> module's hook function. The
- <var class="Fa">id</var> argument specifies the numeric identifier for the
- <code class="Nm">khelp</code> module to extract the data pointer from
- <var class="Fa">hosd</var> for. The <var class="Fa">id</var> is obtained
- using the <code class="Fn">khelp_get_id</code>() function.</p>
-<p class="Pp" id="khelp_add_hhook">The
- <a class="permalink" href="#khelp_add_hhook"><code class="Fn">khelp_add_hhook</code></a>()
- and
- <a class="permalink" href="#khelp_remove_hhook"><code class="Fn" id="khelp_remove_hhook">khelp_remove_hhook</code></a>()
- functions allow a <code class="Nm">khelp</code> module to dynamically
- hook/unhook <a class="Xr">hhook(9)</a> points at run time. The
- <var class="Fa">hki</var> argument specifies a pointer to a
- <var class="Vt">struct hookinfo</var> which encapsulates the required
- information about the <a class="Xr">hhook(9)</a> point and hook function
- being manipulated. The HHOOK_WAITOK flag may be passed in via the
- <var class="Fa">flags</var> argument of
- <code class="Fn">khelp_add_hhook</code>() if <a class="Xr">malloc(9)</a> is
- allowed to sleep waiting for memory to become available.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Integrating_Khelp_Into_a_Kernel_Subsystem"><a class="permalink" href="#Integrating_Khelp_Into_a_Kernel_Subsystem">Integrating
- Khelp Into a Kernel Subsystem</a></h2>
-<p class="Pp">Most of the work required to allow <code class="Nm">khelp</code>
- modules to do useful things relates to defining and instantiating suitable
- <a class="Xr">hhook(9)</a> points for <code class="Nm">khelp</code> modules
- to hook into. The only additional decision a subsystem needs to make is
- whether it wants to allow <code class="Nm">khelp</code> modules to associate
- persistent per-object data. Providing support for persistent data storage
- can allow <code class="Nm">khelp</code> modules to perform more complex
- functionality which may be desirable. Subsystems which want to allow Khelp
- modules to associate persistent per-object data with one of the subsystem's
- data structures need to make the following two key changes:</p>
-<ul class="Bl-bullet">
- <li>Embed a <var class="Vt">struct osd</var> pointer in the structure
- definition for the object.</li>
- <li>Add calls to <code class="Fn">khelp_init_osd</code>() and
- <code class="Fn">khelp_destroy_osd</code>() to the subsystem code paths
- which are responsible for respectively initialising and destroying the
- object.</li>
-</ul>
-<p class="Pp" id="khelp_init_osd">The
- <a class="permalink" href="#khelp_init_osd"><code class="Fn">khelp_init_osd</code></a>()
- function initialises the per-object data storage for all currently loaded
- <code class="Nm">khelp</code> modules of appropriate classes which have set
- the HELPER_NEEDS_OSD flag in their <var class="Va">h_flags</var> field. The
- <var class="Fa">classes</var> argument specifies a bitmask of
- <code class="Nm">khelp</code> classes which this subsystem associates with.
- If a <code class="Nm">khelp</code> module matches any of the classes in the
- bitmask, that module will be associated with the object. The
- <var class="Fa">hosd</var> argument specifies the pointer to the object's
- <var class="Vt">struct osd</var> which will be used to provide the
- persistent storage for use by <code class="Nm">khelp</code> modules.</p>
-<p class="Pp" id="khelp_destroy_osd">The
- <a class="permalink" href="#khelp_destroy_osd"><code class="Fn">khelp_destroy_osd</code></a>()
- function frees all memory that was associated with an object's
- <var class="Vt">struct osd</var> by a previous call to
- <code class="Fn">khelp_init_osd</code>(). The <var class="Fa">hosd</var>
- argument specifies the pointer to the object's <var class="Vt">struct
- osd</var> which will be purged in preparation for destruction.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp"><code class="Nm">khelp</code> modules are protected from being
- prematurely unloaded by a reference count. The count is incremented each
- time a subsystem calls <code class="Fn">khelp_init_osd</code>() causing
- persistent storage to be allocated for the module, and decremented for each
- corresponding call to <code class="Fn">khelp_destroy_osd</code>(). Only when
- a module's reference count has dropped to zero can the module be
- unloaded.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">khelp_init_osd</code>() function returns zero
- if no errors occurred. It returns ENOMEM if a <code class="Nm">khelp</code>
- module which requires per-object storage fails to allocate the necessary
- memory.</p>
-<p class="Pp">The <code class="Fn">khelp_destroy_osd</code>() function only
- returns zero to indicate that no errors occurred.</p>
-<p class="Pp">The <code class="Fn">khelp_get_id</code>() function returns the
- unique numeric identifier for the registered <code class="Nm">khelp</code>
- module with name <var class="Fa">hname</var>. It return -1 if no module with
- the specified name is currently registered.</p>
-<p class="Pp">The <code class="Fn">khelp_get_osd</code>() function returns the
- pointer to the <code class="Nm">khelp</code> module's persistent object
- storage memory. If the module identified by <var class="Fa">id</var> does
- not have persistent object storage registered with the object's
- <var class="Fa">hosd</var> <var class="Vt">struct osd</var>, NULL is
- returned.</p>
-<p class="Pp">The <code class="Fn">khelp_add_hhook</code>() function returns
- zero if no errors occurred. It returns ENOENT if it could not find the
- requested <a class="Xr">hhook(9)</a> point. It returns ENOMEM if
- <a class="Xr">malloc(9)</a> failed to allocate memory. It returns EEXIST if
- attempting to register the same hook function more than once for the same
- <a class="Xr">hhook(9)</a> point.</p>
-<p class="Pp">The <code class="Fn">khelp_remove_hhook</code>() function returns
- zero if no errors occurred. It returns ENOENT if it could not find the
- requested <a class="Xr">hhook(9)</a> point.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A well commented example Khelp module can be found at:
- <span class="Pa">/usr/share/examples/kld/khelp/h_example.c</span></p>
-<p class="Pp">The Enhanced Round Trip Time (ERTT) <a class="Xr">h_ertt(4)</a>
- <code class="Nm">khelp</code> module provides a more complex example of what
- is possible.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">h_ertt(4)</a>, <a class="Xr">hhook(9)</a>,
- <a class="Xr">osd(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1>
-<p class="Pp">Development and testing of this software were made possible in
- part by grants from the FreeBSD Foundation and Cisco University Research
- Program Fund at Community Foundation Silicon Valley.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">khelp</code> kernel helper framework first
- appeared in <span class="Ux">FreeBSD 9.0</span>.</p>
-<p class="Pp">The <code class="Nm">khelp</code> framework was first released in
- 2010 by Lawrence Stewart whilst studying at Swinburne University of
- Technology's Centre for Advanced Internet Architectures, Melbourne,
- Australia. More details are available at:</p>
-<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">khelp</code> framework was written by
- <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">David
- Hayes</span>
- &lt;<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>&gt;
- and <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 1, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kmsan.9 3.html b/static/freebsd/man9/kmsan.9 3.html
deleted file mode 100644
index f90b3f3c..00000000
--- a/static/freebsd/man9/kmsan.9 3.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KMSAN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KMSAN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">KMSAN</code> &#x2014; <span class="Nd">Kernel
- Memory SANitizer</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp">The <span class="Pa">GENERIC-KMSAN</span> kernel configuration can
- be used to compile a KMSAN-enabled kernel using
- <span class="Pa">GENERIC</span> as a base configuration. Alternately, to
- compile KMSAN into the kernel, place the following line in your kernel
- configuration file:</p>
-<div class="Bd Pp Bd-indent"><code class="Cd">options KMSAN</code></div>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/msan.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_mark</code>(<var class="Fa" style="white-space: nowrap;">const
- void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- code</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_orig</code>(<var class="Fa" style="white-space: nowrap;">const
- void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">int type</var>,
- <var class="Fa" style="white-space: nowrap;">uintptr_t pc</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_check</code>(<var class="Fa" style="white-space: nowrap;">const
- void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_check_bio</code>(<var class="Fa" style="white-space: nowrap;">const
- struct bio *</var>, <var class="Fa" style="white-space: nowrap;">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_check_ccb</code>(<var class="Fa" style="white-space: nowrap;">const
- union ccb *</var>, <var class="Fa" style="white-space: nowrap;">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_check_mbuf</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mbuf *</var>, <var class="Fa" style="white-space: nowrap;">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kmsan_check_uio</code>(<var class="Fa" style="white-space: nowrap;">const
- struct uio *</var>, <var class="Fa" style="white-space: nowrap;">const char
- *descr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">KMSAN</code> is a subsystem which leverages
- compiler instrumentation to detect uses of uninitialized memory in the
- kernel. Currently it is implemented only on the amd64 and arm64
- platforms.</p>
-<p class="Pp" id="memcpy">When <code class="Nm">KMSAN</code> is compiled into
- the kernel, the compiler is configured to emit function calls preceding
- memory accesses. The functions are implemented by the
- <code class="Nm">KMSAN</code> runtime component and use hidden,
- byte-granular shadow state to determine whether the source operand has been
- initialized. When uninitialized memory is used as a source operand in
- certain operations, such as control flow expressions or memory accesses, the
- runtime reports an error. Otherwise, the shadow state is propagated to
- destination operand. For example, a variable assignment or a
- <a class="permalink" href="#memcpy"><code class="Fn">memcpy</code></a>()
- call which copies uninitialized memory will cause the destination buffer or
- variable to be marked uninitialized.</p>
-<p class="Pp" id="debug.kmsan.panic_on_violation">To report an error, the
- <code class="Nm">KMSAN</code> runtime will either trigger a kernel panic or
- print a message to the console, depending on the value of the
- <a class="permalink" href="#debug.kmsan.panic_on_violation"><b class="Sy">debug.kmsan.panic_on_violation</b></a>
- sysctl. In both cases, a stack trace and information about the origin of the
- uninitialized memory is included.</p>
-<p class="Pp">In addition to compiler-detected uses of uninitialized memory,
- various kernel I/O &#x201C;exit points&#x201D;, such as
- <a class="Xr">copyout(9)</a>, perform validation of the input's shadow state
- and will raise an error if any uninitialized bytes are detected.</p>
-<p class="Pp">The <code class="Nm">KMSAN</code> option imposes a significant
- performance penalty. Kernel code typically runs two or three times slower,
- and each byte mapped in the kernel map requires two bytes of shadow state.
- As a result, <code class="Nm">KMSAN</code> should be used only for kernel
- testing and development. It is not recommended to enable
- <code class="Nm">KMSAN</code> in systems with less than 8GB of physical
- RAM.</p>
-<p class="Pp" id="debug.kmsan.disable=1">The sanitizer in a KMSAN-configured
- kernel can be disabled by setting the loader tunable
- <a class="permalink" href="#debug.kmsan.disable=1"><b class="Sy">debug.kmsan.disable=1</b></a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#kmsan_mark"><code class="Fn" id="kmsan_mark">kmsan_mark</code></a>()
- and <code class="Fn">kmsan_orig</code>() functions update
- <code class="Nm">KMSAN</code> shadow state.
- <code class="Fn">kmsan_mark</code>() marks an address range as valid or
- invalid according to the value of the <var class="Va">code</var> parameter.
- The valid values for this parameter are
- <code class="Dv">KMSAN_STATE_INITED</code> and
- <code class="Dv">KMSAN_STATE_UNINIT</code>, which mark the range as
- initialized and uninitialized, respectively. For example, when a piece of
- memory is freed to a kernel allocator, it will typically have been marked
- initialized; before the memory is reused for a new allocation, the allocator
- should mark it as uninitialized. As another example, writes to host memory
- performed by devices, e.g., via DMA, are not intercepted by the sanitizer;
- to avoid false positives, drivers should mark device-written memory as
- initialized. For many drivers this is handled internally by the
- <a class="Xr">busdma(9)</a> subsystem.</p>
-<p class="Pp" id="kmsan_orig">The
- <a class="permalink" href="#kmsan_orig"><code class="Fn">kmsan_orig</code></a>()
- function updates &#x201C;origin&#x201D; shadow state. In particular, it
- associates a given uninitialized buffer with a memory type and code address.
- This is used by the <code class="Nm">KMSAN</code> runtime to track the
- source of uninitialized memory and is only for debugging purposes. See
- <a class="Sx" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION NOTES</a> for more
- details.</p>
-<p class="Pp" id="kmsan_check">The
- <a class="permalink" href="#kmsan_check"><code class="Fn">kmsan_check</code></a>()
- function and its sub-typed siblings validate the shadow state of the
- region(s) of kernel memory passed as input parameters. If any byte of the
- input is marked as uninitialized, the runtime will generate a report. These
- functions are useful during debugging, as they can be strategically inserted
- into code paths to narrow down the source of uninitialized memory. They are
- also used to perform validation in various kernel I/O paths, helping ensure
- that, for example, packets transmitted over a network do not contain
- uninitialized kernel memory. <code class="Fn">kmsan_check</code>() and
- related functions also take a <var class="Fa">descr</var> parameter which is
- inserted into any reports raised by the check.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Shadow_Maps"><a class="permalink" href="#Shadow_Maps">Shadow
- Maps</a></h2>
-<p class="Pp">The <code class="Nm">KMSAN</code> runtime makes use of two shadows
- of the kernel map. Each address in the kernel map has a linear mapping to
- addresses in the two shadows. The first, simply called the shadow map,
- tracks the state of the corresponding kernel memory. A non-zero byte in the
- shadow map indicates that the corresponding byte of kernel memory is
- uninitialized. The <code class="Nm">KMSAN</code> instrumentation
- automatically propagates shadow state as the contents of kernel memory are
- transformed and copied.</p>
-<p class="Pp">The second shadow is called the origin map, and exists only to
- help debug reports from the sanitizer. To avoid false positives,
- <code class="Nm">KMSAN</code> does not raise reports for certain operations
- on uninitialized memory, such as copying or arithmetic. Thus, operations on
- uninitialized state which raise a report may be far removed from the source
- of the bug, complicating debugging. The origin map contains information
- which can help pinpoint the root cause of a particular
- <code class="Nm">KMSAN</code> report; when generating a report, the runtime
- uses state from the origin map to provide extra details.</p>
-<p class="Pp">Unlike the shadow map, the origin map is not byte-granular, but
- consists of 4-byte &#x201C;cells&#x201D;. Each cell describes the
- corresponding four bytes of mapped kernel memory and holds a type and
- compressed code address. When kernel memory is allocated for some purpose,
- its origin is initialized either by the compiler instrumentation or by
- runtime hooks in the allocator. The type indicates the specific allocator,
- e.g., <a class="Xr">uma(9)</a>, and the address provides the location in the
- kernel code where the memory was allocated.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Assembly_Code"><a class="permalink" href="#Assembly_Code">Assembly
- Code</a></h2>
-<p class="Pp">When <code class="Nm">KMSAN</code> is configured, the compiler
- will only emit instrumentation for C code. Files containing assembly code
- are left un-instrumented. In some cases this is handled by the sanitizer
- runtime, which defines wrappers for subroutines implemented in assembly.
- These wrappers are referred to as interceptors and handle updating shadow
- state to reflect the operations performed by the original subroutines. In
- other cases, C code which calls assembly code or is called from assembly
- code may need to use <code class="Fn">kmsan_mark</code>() to manually update
- shadow state. This is typically only necessary in machine-dependent
- code.</p>
-<p class="Pp">Inline assembly is instrumented by the compiler to update shadow
- state based on the output operands of the code, and thus does not usually
- require any special handling to avoid false positives.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interrupts_and_Exceptions"><a class="permalink" href="#Interrupts_and_Exceptions">Interrupts
- and Exceptions</a></h2>
-<p class="Pp">In addition to the shadow maps, the sanitizer requires some
- thread-local storage (TLS) to track initialization and origin state for
- function parameters and return values. The sanitizer instrumentation will
- automatically fetch, update and verify this state. In particular, this
- storage block has a layout defined by the sanitizer ABI.</p>
-<p class="Pp">Most kernel code runs in a context where interrupts or exceptions
- may redirect the CPU to begin execution of unrelated code. To ensure that
- thread-local sanitizer state remains consistent, the runtime maintains a
- stack of TLS blocks for each thread. When machine-dependent interrupt and
- exception handlers begin execution, they push a new entry onto the stack
- before calling into any C code, and pop the stack before resuming execution
- of the interrupted code. These operations are performed by the
- <code class="Fn">kmsan_intr_enter</code>() and
- <code class="Fn">kmsan_intr_leave</code>() functions in the sanitizer
- runtime.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following contrived example demonstrates some of the types of
- bugs that are automatically detected by <code class="Nm">KMSAN</code>:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>int
-f(size_t osz)
-{
- struct {
- uint32_t bar;
- uint16_t baz;
- /* A 2-byte hole is here. */
- } foo;
- char *buf;
- size_t sz;
- int error;
-
- /*
- * This will raise a report since &quot;sz&quot; is uninitialized
- * here. If it is initialized, and &quot;osz&quot; was left uninitialized
- * by the caller, a report would also be raised.
- */
- if (sz &lt; osz)
- return (1);
-
- buf = malloc(32, M_TEMP, M_WAITOK);
-
- /*
- * This will raise a report since &quot;buf&quot; has not been
- * initialized and contains whatever data is left over from the
- * previous use of that memory.
- */
- for (i = 0; i &lt; 32; i++)
- if (buf[i] != '&#x00A0;')
- foo.bar++;
- foo.baz = 0;
-
- /*
- * This will raise a report since the pad bytes in &quot;foo&quot; have
- * not been initialized, e.g., by memset(), and this call will
- * thus copy uninitialized kernel stack memory into userspace.
- */
- copyout(&amp;foo, uaddr, sizeof(foo));
-
- /*
- * This line itself will not raise a report, but may trigger
- * a report in the caller depending on how the return value is
- * used.
- */
- return (error);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">build(7)</a>, <a class="Xr">busdma(9)</a>,
- <a class="Xr">copyout(9)</a>, <a class="Xr">KASAN(9)</a>,
- <a class="Xr">uio(9)</a>, <a class="Xr">uma(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Evgeniy Stepanov</span> and
- <span class="RsA">Konstantin Serebryany</span>,
- <span class="RsT">MemorySanitizer: fast detector of uninitialized memory use
- in C++</span>, <i class="RsJ">2015 IEEE/ACM International Symposium on Code
- Generation and Optimization (CGO)</i>,
- <span class="RsD">2015</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">KMSAN</code> was ported from
- <span class="Ux">NetBSD</span> and first appeared in
- <span class="Ux">FreeBSD 14.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Accesses to kernel memory outside of the kernel map are ignored by
- the <code class="Nm">KMSAN</code> runtime. In particular, memory accesses
- via the direct map are not validated. When memory is copied from outside the
- kernel map into the kernel map, that region of the kernel map is marked as
- initialized. When <code class="Nm">KMSAN</code> is configured, kernel memory
- allocators are configured to use the kernel map, and filesystems are
- configured to always map data buffers into the kernel map, so usage of the
- direct map is minimized. However, some uses of the direct map remain. This
- is a conservative policy which aims to avoid false positives, but it will
- mask bug in some kernel subsystems.</p>
-<p class="Pp">On amd64, global variables and the physical page array
- <var class="Va">vm_page_array</var> are not sanitized. This is intentional,
- as it reduces memory usage by avoiding creating shadows of large regions of
- the kernel map. However, this can allow bugs to go undetected by
- <code class="Nm">KMSAN</code>.</p>
-<p class="Pp">Some kernel memory allocators provide type-stable objects, and
- code which uses them frequently depends on object data being preserved
- across allocations. Such allocations cannot be sanitized by
- <code class="Nm">KMSAN</code>. However, in some cases it may be possible to
- use <code class="Fn">kmsan_mark</code>() to manually annotate fields which
- are known to contain invalid data upon allocation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 11, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kobj.9 3.html b/static/freebsd/man9/kobj.9 3.html
deleted file mode 100644
index 42459e96..00000000
--- a/static/freebsd/man9/kobj.9 3.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KOBJ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KOBJ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kobj</code> &#x2014; <span class="Nd">a kernel
- object system for FreeBSD</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kobj.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_class_compile</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_class_compile_static</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>, <var class="Fa" style="white-space: nowrap;">kobj_ops_t
- ops</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_class_free</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>);</p>
-<p class="Pp"><var class="Ft">kobj_t</var>
- <br/>
- <code class="Fn">kobj_create</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *mtype</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_init</code>(<var class="Fa" style="white-space: nowrap;">kobj_t
- obj</var>, <var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_init_static</code>(<var class="Fa" style="white-space: nowrap;">kobj_t
- obj</var>, <var class="Fa" style="white-space: nowrap;">kobj_class_t
- cls</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kobj_delete</code>(<var class="Fa" style="white-space: nowrap;">kobj_t
- obj</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *mtype</var>);</p>
-<p class="Pp"><code class="Fn">DEFINE_CLASS</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">kobj_method_t *methods</var>,
- <var class="Fa" style="white-space: nowrap;">size_t size</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The kernel object system implements an object-oriented programming
- system in the <span class="Ux">FreeBSD</span> kernel. The system is based
- around the concepts of interfaces, which are descriptions of sets of
- methods; classes, which are lists of functions implementing certain methods
- from those interfaces; and objects, which combine a class with a structure
- in memory.</p>
-<p class="Pp">Methods are called using a dynamic method dispatching algorithm
- which is designed to allow new interfaces and classes to be introduced into
- the system at runtime. The method dispatch algorithm is designed to be both
- fast and robust and is only slightly more expensive than a direct function
- call, making kernel objects suitable for performance-critical
- algorithms.</p>
-<p class="Pp">Suitable uses for kernel objects are any algorithms which need
- some kind of polymorphism (i.e., many different objects which can be treated
- in a uniform way). The common behaviour of the objects is described by a
- suitable interface and each different type of object is implemented by a
- suitable class.</p>
-<p class="Pp" id="kobj_create">The simplest way to create a kernel object is to
- call
- <a class="permalink" href="#kobj_create"><code class="Fn">kobj_create</code></a>()
- with a suitable class, malloc type and flags (see
- <a class="Xr">malloc(9)</a> for a description of the malloc type and flags).
- This will allocate memory for the object based on the object size specified
- by the class and initialise it by zeroing the memory and installing a
- pointer to the class' method dispatch table. Objects created in this way
- should be freed by calling
- <a class="permalink" href="#kobj_delete"><code class="Fn" id="kobj_delete">kobj_delete</code></a>().</p>
-<p class="Pp" id="kobj_init">Clients which would like to manage the allocation
- of memory themselves should call
- <a class="permalink" href="#kobj_init"><code class="Fn">kobj_init</code></a>()
- or
- <a class="permalink" href="#kobj_init_static"><code class="Fn" id="kobj_init_static">kobj_init_static</code></a>()
- with a pointer to the memory for the object and the class which implements
- it. It is also possible to use <code class="Fn">kobj_init</code>() and
- <code class="Fn">kobj_init_static</code>() to change the class for an
- object. This should be done with care as the classes must agree on the
- layout of the object. The device framework uses this feature to associate
- drivers with devices.</p>
-<p class="Pp" id="kobj_class_compile">The functions
- <a class="permalink" href="#kobj_class_compile"><code class="Fn">kobj_class_compile</code></a>(),
- <a class="permalink" href="#kobj_class_compile_static"><code class="Fn" id="kobj_class_compile_static">kobj_class_compile_static</code></a>()
- and
- <a class="permalink" href="#kobj_class_free"><code class="Fn" id="kobj_class_free">kobj_class_free</code></a>()
- are used to process a class description to make method dispatching
- efficient. A client should not normally need to call these since a class
- will automatically be compiled the first time it is used. If a class is to
- be used before <a class="Xr">malloc(9)</a> and <a class="Xr">mutex(9)</a>
- are initialised, then <code class="Fn">kobj_class_compile_static</code>()
- should be called with the class and a pointer to a statically allocated
- <var class="Vt">kobj_ops</var> structure before the class is used to
- initialise any objects. In that case, also
- <code class="Fn">kobj_init_static</code>() should be used instead of
- <code class="Fn">kobj_init</code>().</p>
-<p class="Pp" id="KOBJMETHOD">To define a class, first define a simple array of
- <var class="Vt">kobj_method_t</var>. Each method which the class implements
- should be entered into the table using the macro
- <a class="permalink" href="#KOBJMETHOD"><code class="Fn">KOBJMETHOD</code></a>()
- which takes the name of the method (including its interface) and a pointer
- to a function which implements it. The table should be terminated with two
- zeros. The macro
- <a class="permalink" href="#DEFINE_CLASS"><code class="Fn" id="DEFINE_CLASS">DEFINE_CLASS</code></a>()
- can then be used to initialise a <var class="Vt">kobj_class_t</var>
- structure. The size argument to <code class="Fn">DEFINE_CLASS</code>()
- specifies how much memory should be allocated for each object.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Some of the concepts for this interface appeared in the device
- framework used for the alpha port of <span class="Ux">FreeBSD 3.0</span> and
- more widely in <span class="Ux">FreeBSD 4.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 14, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kproc.9 3.html b/static/freebsd/man9/kproc.9 3.html
deleted file mode 100644
index 90e3b0c3..00000000
--- a/static/freebsd/man9/kproc.9 3.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KPROC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KPROC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kproc_start</code>,
- <code class="Nm">kproc_shutdown</code>,
- <code class="Nm">kproc_create</code>, <code class="Nm">kproc_exit</code>,
- <code class="Nm">kproc_resume</code>, <code class="Nm">kproc_suspend</code>,
- <code class="Nm">kproc_suspend_check</code> &#x2014; <span class="Nd">kernel
- processes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kthread.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kproc_start</code>(<var class="Fa" style="white-space: nowrap;">const
- void *udata</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kproc_shutdown</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>, <var class="Fa" style="white-space: nowrap;">int
- howto</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kproc_create</code>(<var class="Fa">void (*func)(void
- *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc
- **newpp</var>, <var class="Fa">int flags</var>, <var class="Fa">int
- pages</var>, <var class="Fa">const char *fmt</var>,
- <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kproc_exit</code>(<var class="Fa" style="white-space: nowrap;">int
- ecode</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kproc_resume</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kproc_suspend</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kproc_suspend_check</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kproc_kthread_add</code>(<var class="Fa">void (*func)(void
- *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc
- **procptr</var>, <var class="Fa">struct thread **tdptr</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int pages</var>,
- <var class="Fa">char * procname</var>, <var class="Fa">const char
- *fmt</var>, <var class="Fa">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">In <span class="Ux">FreeBSD 8.0</span>, the
- <a class="permalink" href="#kthread*"><code class="Fn" id="kthread*">kthread*</code></a>(<var class="Fa">9</var>)
- family of functions was renamed to be the
- <a class="permalink" href="#kproc*"><code class="Fn" id="kproc*">kproc*</code></a>(<var class="Fa">9</var>)
- family of functions, as they were misnamed and actually produced kernel
- processes. A new family of
- <a class="permalink" href="#different"><i class="Em" id="different">different</i></a>
- <a class="permalink" href="#kthread_*"><code class="Fn" id="kthread_*">kthread_*</code></a>(<var class="Fa">9</var>)
- functions was added to produce
- <a class="permalink" href="#real"><i class="Em" id="real">real</i></a>
- kernel
- <a class="permalink" href="#threads"><i class="Em" id="threads">threads</i></a>.
- See the <a class="Xr">kthread(9)</a> man page for more information on those
- calls. Also note that the
- <code class="Fn">kproc_kthread_add</code>(<var class="Fa">9</var>) function
- appears in both pages as its functionality is split.</p>
-<p class="Pp" id="kproc_start">The function
- <a class="permalink" href="#kproc_start"><code class="Fn">kproc_start</code></a>()
- is used to start &#x201C;internal&#x201D; daemons such as
- <code class="Nm">bufdaemon</code>, <code class="Nm">pagedaemon</code>,
- <code class="Nm">vmdaemon</code>, and the <code class="Nm">syncer</code> and
- is intended to be called from <a class="Xr">SYSINIT(9)</a>. The
- <var class="Fa">udata</var> argument is actually a pointer to a
- <var class="Vt">struct kproc_desc</var> which describes the kernel process
- that should be created:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct kproc_desc {
- char *arg0;
- void (*func)(void);
- struct proc **global_procpp;
-};</pre>
-</div>
-<p class="Pp" id="kproc_start~2">The structure members are used by
- <a class="permalink" href="#kproc_start~2"><code class="Fn">kproc_start</code></a>()
- as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="arg0"><var class="Va">arg0</var></dt>
- <dd>String to be used for the name of the process. This string will be copied
- into the <var class="Va">p_comm</var> member of the new process'
- <var class="Vt">struct proc</var>.</dd>
- <dt id="func"><var class="Va">func</var></dt>
- <dd>The main function for this kernel process to run.</dd>
- <dt id="global_procpp"><var class="Va">global_procpp</var></dt>
- <dd>A pointer to a <var class="Vt">struct proc</var> pointer that should be
- updated to point to the newly created process' process structure. If this
- variable is <code class="Dv">NULL</code>, then it is ignored.</dd>
-</dl>
-</div>
-<p class="Pp" id="kproc_create">The
- <a class="permalink" href="#kproc_create"><code class="Fn">kproc_create</code></a>()
- function is used to create a kernel process. The new process shares its
- address space with process 0, the <code class="Nm">swapper</code> process,
- and runs in kernel mode only. The <var class="Fa">func</var> argument
- specifies the function that the process should execute. The
- <var class="Fa">arg</var> argument is an arbitrary pointer that is passed in
- as the only argument to <var class="Fa">func</var> when it is called by the
- new process. The <var class="Fa">newpp</var> pointer points to a
- <var class="Vt">struct proc</var> pointer that is to be updated to point to
- the newly created process. If this argument is <code class="Dv">NULL</code>,
- then it is ignored. The <var class="Fa">flags</var> argument specifies a set
- of flags as described in <a class="Xr">rfork(2)</a>. The
- <var class="Fa">pages</var> argument specifies the size of the new kernel
- process's stack in pages. If 0 is used, the default kernel stack size is
- allocated. The rest of the arguments form a <a class="Xr">printf(9)</a>
- argument list that is used to build the name of the new process and is
- stored in the <var class="Va">p_comm</var> member of the new process's
- <var class="Vt">struct proc</var>.</p>
-<p class="Pp" id="kproc_exit">The
- <a class="permalink" href="#kproc_exit"><code class="Fn">kproc_exit</code></a>()
- function is used to terminate kernel processes. It should be called by the
- main function of the kernel process rather than letting the main function
- return to its caller. The <var class="Fa">ecode</var> argument specifies the
- exit status of the process. While exiting, the function
- <a class="Xr">exit1(9)</a> will initiate a call to
- <a class="Xr">wakeup(9)</a> on the process handle.</p>
-<p class="Pp" id="kproc_resume">The
- <a class="permalink" href="#kproc_resume"><code class="Fn">kproc_resume</code></a>(),
- <a class="permalink" href="#kproc_suspend"><code class="Fn" id="kproc_suspend">kproc_suspend</code></a>(),
- and
- <a class="permalink" href="#kproc_suspend_check"><code class="Fn" id="kproc_suspend_check">kproc_suspend_check</code></a>()
- functions are used to suspend and resume a kernel process. During the main
- loop of its execution, a kernel process that wishes to allow itself to be
- suspended should call <code class="Fn">kproc_suspend_check</code>() passing
- in <var class="Va">curproc</var> as the only argument. This function checks
- to see if the kernel process has been asked to suspend. If it has, it will
- <a class="Xr">tsleep(9)</a> until it is told to resume. Once it has been
- told to resume it will return allowing execution of the kernel process to
- continue. The other two functions are used to notify a kernel process of a
- suspend or resume request. The <var class="Fa">p</var> argument points to
- the <var class="Vt">struct proc</var> of the kernel process to suspend or
- resume. For <code class="Fn">kproc_suspend</code>(), the
- <var class="Fa">timo</var> argument specifies a timeout to wait for the
- kernel process to acknowledge the suspend request and suspend itself.</p>
-<p class="Pp" id="kproc_shutdown">The
- <a class="permalink" href="#kproc_shutdown"><code class="Fn">kproc_shutdown</code></a>()
- function is meant to be registered as a shutdown event for kernel processes
- that need to be suspended voluntarily during system shutdown so as not to
- interfere with system shutdown activities. The actual suspension of the
- kernel process is done with
- <a class="permalink" href="#kproc_suspend~2"><code class="Fn" id="kproc_suspend~2">kproc_suspend</code></a>().</p>
-<p class="Pp" id="kproc_kthread_add">The
- <a class="permalink" href="#kproc_kthread_add"><code class="Fn">kproc_kthread_add</code></a>()
- function is much like the <code class="Fn">kproc_create</code>() function
- above except that if the kproc already exists, then only a new thread (see
- <a class="Xr">kthread(9)</a>) is created on the existing process. The
- <var class="Fa">func</var> argument specifies the function that the process
- should execute. The <var class="Fa">arg</var> argument is an arbitrary
- pointer that is passed in as the only argument to <var class="Fa">func</var>
- when it is called by the new process. The <var class="Fa">procptr</var>
- pointer points to a <var class="Vt">struct proc</var> pointer that is the
- location to be updated with the new proc pointer if a new process is
- created, or if not <code class="Dv">NULL</code>, must contain the process
- pointer for the already existing process. If this argument points to
- <code class="Dv">NULL</code>, then a new process is created and the field
- updated. If not NULL, the <var class="Fa">tdptr</var> pointer points to a
- <var class="Vt">struct thread</var> pointer that is the location to be
- updated with the new thread pointer. The <var class="Fa">flags</var>
- argument specifies a set of flags as described in
- <a class="Xr">rfork(2)</a>. The <var class="Fa">pages</var> argument
- specifies the size of the new kernel thread's stack in pages. If 0 is used,
- the default kernel stack size is allocated. The procname argument is the
- name the new process should be given if it needs to be created. It is
- <a class="permalink" href="#NOT"><i class="Em" id="NOT">NOT</i></a> a printf
- style format specifier but a simple string. The rest of the arguments form a
- <a class="Xr">printf(9)</a> argument list that is used to build the name of
- the new thread and is stored in the <var class="Va">td_name</var> member of
- the new thread's <var class="Vt">struct thread</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">kproc_create</code>(),
- <code class="Fn">kproc_resume</code>(), and
- <code class="Fn">kproc_suspend</code>() functions return zero on success and
- non-zero on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example demonstrates the use of a <var class="Vt">struct
- kproc_desc</var> and the functions <code class="Fn">kproc_start</code>(),
- <code class="Fn">kproc_shutdown</code>(), and
- <code class="Fn">kproc_suspend_check</code>() to run the
- <code class="Nm">bufdaemon</code> process.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static struct proc *bufdaemonproc;
-
-static struct kproc_desc buf_kp = {
- &quot;bufdaemon&quot;,
- buf_daemon,
- &amp;bufdaemonproc
-};
-SYSINIT(bufdaemon, SI_SUB_KTHREAD_BUF, SI_ORDER_FIRST, kproc_start,
- &amp;buf_kp)
-
-static void
-buf_daemon()
-{
- ...
- /*
- * This process needs to be suspended prior to shutdown sync.
- */
- EVENTHANDLER_REGISTER(shutdown_pre_sync, kproc_shutdown,
- bufdaemonproc, SHUTDOWN_PRI_LAST);
- ...
- for (;;) {
- kproc_suspend_check(bufdaemonproc);
- ...
- }
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">kproc_resume</code>() and
- <code class="Fn">kproc_suspend</code>() functions will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">p</var> argument does not reference a kernel
- process.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">kproc_create</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt>
- <dd>The system-imposed limit on the total number of processes under execution
- would be exceeded. The limit is given by the <a class="Xr">sysctl(3)</a>
- MIB variable <code class="Dv">KERN_MAXPROC</code>.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <code class="Dv">RFCFDG</code> flag was specified in the
- <var class="Fa">flags</var> parameter.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">rfork(2)</a>, <a class="Xr">exit1(9)</a>,
- <a class="Xr">kthread(9)</a>, <a class="Xr">SYSINIT(9)</a>,
- <a class="Xr">wakeup(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">kproc_start</code>() function first appeared
- in <span class="Ux">FreeBSD 2.2</span>. The
- <code class="Fn">kproc_shutdown</code>(),
- <code class="Fn">kproc_create</code>(),
- <code class="Fn">kproc_exit</code>(),
- <code class="Fn">kproc_resume</code>(),
- <code class="Fn">kproc_suspend</code>(), and
- <code class="Fn">kproc_suspend_check</code>() functions were introduced in
- <span class="Ux">FreeBSD 4.0</span>. Prior to <span class="Ux">FreeBSD
- 5.0</span>, the <code class="Fn">kproc_shutdown</code>(),
- <code class="Fn">kproc_resume</code>(),
- <code class="Fn">kproc_suspend</code>(), and
- <code class="Fn">kproc_suspend_check</code>() functions were named
- <code class="Fn">shutdown_kproc</code>(),
- <code class="Fn">resume_kproc</code>(),
- <code class="Fn">shutdown_kproc</code>(), and
- <code class="Fn">kproc_suspend_loop</code>(), respectively. Originally they
- had the names <code class="Fn">kthread_*</code>() but were changed to
- <code class="Fn">kproc_*</code>() when real kthreads became available.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 19, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kqueue.9 4.html b/static/freebsd/man9/kqueue.9 4.html
deleted file mode 100644
index 827536ea..00000000
--- a/static/freebsd/man9/kqueue.9 4.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KQUEUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KQUEUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kqueue_add_filteropts</code>,
- <code class="Nm">kqueue_del_filteropts</code>,
- <code class="Nm">kqfd_register</code>,
- <code class="Nm">knote_fdclose</code>, <code class="Nm">knlist_init</code>,
- <code class="Nm">knlist_init_mtx</code>, <code class="Nm">knlist_add</code>,
- <code class="Nm">knlist_remove</code>, <code class="Nm">knlist_empty</code>,
- <code class="Nm">knlist_clear</code>, <code class="Nm">knlist_delete</code>,
- <code class="Nm">knlist_destroy</code>,
- <code class="Nm">KNOTE_LOCKED</code>, <code class="Nm">KNOTE_UNLOCKED</code>
- &#x2014; <span class="Nd">event delivery subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/event.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kqueue_add_filteropts</code>(<var class="Fa" style="white-space: nowrap;">int
- filt</var>, <var class="Fa" style="white-space: nowrap;">struct filterops
- *filtops</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kqueue_del_filteropts</code>(<var class="Fa" style="white-space: nowrap;">int
- filt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kqfd_register</code>(<var class="Fa" style="white-space: nowrap;">int
- fd</var>, <var class="Fa" style="white-space: nowrap;">struct kevent
- *kev</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>, <var class="Fa" style="white-space: nowrap;">int
- waitok</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knote_fdclose</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- fd</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_init</code>(<var class="Fa">struct knlist *knl</var>,
- <var class="Fa">void *lock</var>, <var class="Fa">void (*kl_lock)(void
- *)</var>, <var class="Fa">void (*kl_unlock)(void *)</var>,
- <var class="Fa">int (*kl_locked)(void *)</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_init_mtx</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *lock</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_add</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct knote
- *kn</var>, <var class="Fa" style="white-space: nowrap;">int
- islocked</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_remove</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct knote
- *kn</var>, <var class="Fa" style="white-space: nowrap;">int
- islocked</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">knlist_empty</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_clear</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">int
- islocked</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_delete</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- islocked</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">knlist_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">KNOTE_LOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">long
- hint</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">KNOTE_UNLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct
- knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">long
- hint</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The functions
- <a class="permalink" href="#kqueue_add_filteropts"><code class="Fn" id="kqueue_add_filteropts">kqueue_add_filteropts</code></a>()
- and
- <a class="permalink" href="#kqueue_del_filteropts"><code class="Fn" id="kqueue_del_filteropts">kqueue_del_filteropts</code></a>()
- allow for the addition and removal of a filter type. The filter is
- statically defined by the <code class="Dv">EVFILT_*</code> macros. The
- function <code class="Fn">kqueue_add_filteropts</code>() will make
- <var class="Fa">filt</var> available. The <var class="Vt">struct
- filterops</var> has the following members:</p>
-<dl class="Bl-tag">
- <dt id="f_isfd"><var class="Va">f_isfd</var></dt>
- <dd>If <var class="Va">f_isfd</var> is set, <var class="Va">ident</var> in
- <var class="Vt">struct kevent</var> is taken to be a file descriptor. In
- this case, the <var class="Vt">knote</var> passed into
- <var class="Va">f_attach</var> will have the <var class="Va">kn_fp</var>
- member initialized to the <var class="Vt">struct file *</var> that
- represents the file descriptor.</dd>
- <dt id="f_attach"><var class="Va">f_attach</var></dt>
- <dd>The <var class="Va">f_attach</var> function will be called when attaching
- a <var class="Vt">knote</var> to the object. The method should call
- <a class="permalink" href="#knlist_add"><code class="Fn" id="knlist_add">knlist_add</code></a>()
- to add the <var class="Vt">knote</var> to the list that was initialized
- with <code class="Fn">knlist_init</code>(). The call to
- <code class="Fn">knlist_add</code>() is only necessary if the object can
- have multiple <var class="Vt">knotes</var> associated with it. If there is
- no <var class="Vt">knlist</var> to call
- <code class="Fn">knlist_add</code>() with, the function
- <var class="Va">f_attach</var> must clear the
- <code class="Dv">KN_DETACHED</code> bit of <var class="Va">kn_status</var>
- in the <var class="Vt">knote</var>. The function shall return 0 on
- success, or appropriate error for the failure, such as when the object is
- being destroyed, or does not exist. During <var class="Va">f_attach</var>,
- it is valid to change the <var class="Va">kn_fop</var> pointer to a
- different pointer. This will change the <var class="Va">f_event</var> and
- <var class="Va">f_detach</var> functions called when processing the
- <var class="Vt">knote</var>.</dd>
- <dt id="f_detach"><var class="Va">f_detach</var></dt>
- <dd>The <var class="Va">f_detach</var> function will be called to detach the
- <var class="Vt">knote</var> if the <var class="Vt">knote</var> has not
- already been detached by a call to
- <a class="permalink" href="#knlist_remove"><code class="Fn" id="knlist_remove">knlist_remove</code></a>()
- or <code class="Fn">knlist_delete</code>(). The list
- <var class="Fa">lock</var> will not be held when this function is
- called.</dd>
- <dt id="f_event"><var class="Va">f_event</var></dt>
- <dd>The <var class="Va">f_event</var> function will be called to update the
- status of the <var class="Vt">knote</var>. If the function returns 0, it
- will be assumed that the object is not ready (or no longer ready) to be
- woken up. The <var class="Fa">hint</var> argument will be 0 when scanning
- <var class="Vt">knotes</var> to see which are triggered. Otherwise, the
- <var class="Fa">hint</var> argument will be the value passed to either
- <code class="Dv">KNOTE_LOCKED</code> or
- <code class="Dv">KNOTE_UNLOCKED</code>. The <var class="Va">kn_data</var>
- value should be updated as necessary to reflect the current value, such as
- number of bytes available for reading, or buffer space available for
- writing.
- <p class="Pp" id="must">Locks
- <a class="permalink" href="#must"><i class="Em">must not</i></a> be
- acquired in <var class="Va">f_event</var>. If a lock is required in
- <var class="Va">f_event</var>, it must be obtained in the
- <var class="Fa">kl_lock</var> function of the
- <var class="Vt">knlist</var> that the <var class="Va">knote</var> was
- added to.</p>
- </dd>
- <dt id="f_copy"><var class="Va">f_copy</var></dt>
- <dd>The <var class="Va">f_copy</var> function is called to copy notes when the
- process forks. When <code class="Dv">NULL</code>, the current node is not
- duplicated to the child process. Filter might set
- <code class="Dv">f_copy</code> to
- <a class="permalink" href="#knote_triv_copy"><code class="Fn" id="knote_triv_copy">knote_triv_copy</code></a>()
- if there is no additional handling required, besides shallow copying of
- the knote itself.</dd>
-</dl>
-<p class="Pp" id="kqfd_register">The function
- <a class="permalink" href="#kqfd_register"><code class="Fn">kqfd_register</code></a>()
- will register the <var class="Vt">kevent</var> on the kqueue file descriptor
- <var class="Fa">fd</var>. If it is safe to sleep,
- <var class="Fa">waitok</var> should be set.</p>
-<p class="Pp" id="knote_fdclose">The function
- <a class="permalink" href="#knote_fdclose"><code class="Fn">knote_fdclose</code></a>()
- is used to delete all <var class="Vt">knotes</var> associated with
- <var class="Fa">fd</var>. Once returned, there will no longer be any
- <var class="Vt">knotes</var> associated with the <var class="Fa">fd</var>.
- The <var class="Vt">knotes</var> removed will never be returned from a
- <a class="Xr">kevent(2)</a> call, so if userland uses the
- <var class="Vt">knote</var> to track resources, they will be leaked. The
- <a class="permalink" href="#FILEDESC_LOCK"><code class="Fn" id="FILEDESC_LOCK">FILEDESC_LOCK</code></a>()
- lock must be held over the call to <code class="Fn">knote_fdclose</code>()
- so that file descriptors cannot be added or removed.</p>
-<p class="Pp" id="knlist_*">The
- <a class="permalink" href="#knlist_*"><code class="Fn">knlist_*</code></a>()
- family of functions are for managing <var class="Vt">knotes</var> associated
- with an object. A <var class="Vt">knlist</var> is not required, but is
- commonly used. If used, the <var class="Vt">knlist</var> must be initialized
- with either <code class="Fn">knlist_init</code>() or
- <code class="Fn">knlist_init_mtx</code>(). The <var class="Vt">knlist</var>
- structure may be embedded into the object structure. The
- <var class="Fa">lock</var> will be held over <var class="Va">f_event</var>
- calls.</p>
-<p class="Pp" id="knlist_init">For the
- <a class="permalink" href="#knlist_init"><code class="Fn">knlist_init</code></a>()
- function, if <var class="Fa">lock</var> is <code class="Dv">NULL</code>, a
- shared global lock will be used and the remaining arguments must be
- <code class="Dv">NULL</code>. The function pointers
- <var class="Fa">kl_lock</var>, <var class="Fa">kl_unlock</var> and
- <var class="Fa">kl_locked</var> will be used to manipulate the argument
- <var class="Fa">lock</var>. If any of the function pointers are
- <code class="Dv">NULL</code>, a function operating on
- <code class="Dv">MTX_DEF</code> style <a class="Xr">mutex(9)</a> locks will
- be used instead.</p>
-<p class="Pp" id="knlist_init_mtx">The function
- <a class="permalink" href="#knlist_init_mtx"><code class="Fn">knlist_init_mtx</code></a>()
- may be used to initialize a <var class="Vt">knlist</var> when
- <var class="Fa">lock</var> is a <code class="Dv">MTX_DEF</code> style
- <a class="Xr">mutex(9)</a> lock.</p>
-<p class="Pp" id="knlist_empty">The function
- <a class="permalink" href="#knlist_empty"><code class="Fn">knlist_empty</code></a>()
- returns true when there are no <var class="Vt">knotes</var> on the list. The
- function requires that the <var class="Fa">lock</var> be held when
- called.</p>
-<p class="Pp" id="knlist_clear">The function
- <a class="permalink" href="#knlist_clear"><code class="Fn">knlist_clear</code></a>()
- removes all <var class="Vt">knotes</var> from the list. The
- <var class="Fa">islocked</var> argument declares if the
- <var class="Fa">lock</var> has been acquired. All
- <var class="Vt">knotes</var> will have <code class="Dv">EV_ONESHOT</code>
- set so that the <var class="Vt">knote</var> will be returned and removed
- during the next scan. The <var class="Va">f_detach</var> function will be
- called when the <var class="Vt">knote</var> is deleted during the next
- scan.</p>
-<p class="Pp" id="knlist_delete">The function
- <a class="permalink" href="#knlist_delete"><code class="Fn">knlist_delete</code></a>()
- removes and deletes all <var class="Vt">knotes</var> on the list. The
- function <var class="Va">f_detach</var> will not be called, and the
- <var class="Vt">knote</var> will not be returned on the next scan. Using
- this function could leak userland resources if a process uses the
- <var class="Vt">knote</var> to track resources.</p>
-<p class="Pp" id="knlist_clear~2">Both the
- <a class="permalink" href="#knlist_clear~2"><code class="Fn">knlist_clear</code></a>()
- and <code class="Fn">knlist_delete</code>() functions may sleep. They also
- may release the <var class="Fa">lock</var> to wait for other
- <var class="Vt">knotes</var> to drain.</p>
-<p class="Pp" id="knlist_destroy">The
- <a class="permalink" href="#knlist_destroy"><code class="Fn">knlist_destroy</code></a>()
- function is used to destroy a <var class="Vt">knlist</var>. There must be no
- <var class="Vt">knotes</var> associated with the
- <var class="Vt">knlist</var> (<code class="Fn">knlist_empty</code>() returns
- true) and no more <var class="Vt">knotes</var> may be attached to the
- object. A <var class="Vt">knlist</var> may be emptied by calling
- <code class="Fn">knlist_clear</code>() or
- <code class="Fn">knlist_delete</code>().</p>
-<p class="Pp" id="KNOTE_LOCKED">The macros
- <a class="permalink" href="#KNOTE_LOCKED"><code class="Fn">KNOTE_LOCKED</code></a>()
- and
- <a class="permalink" href="#KNOTE_UNLOCKED"><code class="Fn" id="KNOTE_UNLOCKED">KNOTE_UNLOCKED</code></a>()
- are used to notify <var class="Vt">knotes</var> about events associated with
- the object. It will iterate over all <var class="Vt">knotes</var> on the
- list calling the <var class="Va">f_event</var> function associated with the
- <var class="Vt">knote</var>. The macro
- <code class="Fn">KNOTE_LOCKED</code>() must be used if the lock associated
- with the <var class="Fa">knl</var> is held. The function
- <code class="Fn">KNOTE_UNLOCKED</code>() will acquire the lock before
- iterating over the list of <var class="Vt">knotes</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The function <code class="Fn">kqueue_add_filteropts</code>() will
- return zero on success, <code class="Er">EINVAL</code> in the case of an
- invalid <var class="Fa">filt</var>, or <code class="Er">EEXIST</code> if the
- filter has already been installed.</p>
-<p class="Pp">The function <code class="Fn">kqueue_del_filteropts</code>() will
- return zero on success, <code class="Er">EINVAL</code> in the case of an
- invalid <var class="Fa">filt</var>, or <code class="Er">EBUSY</code> if the
- filter is still in use.</p>
-<p class="Pp">The function <code class="Fn">kqfd_register</code>() will return
- zero on success, <code class="Er">EBADF</code> if the file descriptor is not
- a kqueue, or any of the possible values returned by
- <a class="Xr">kevent(2)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">kevent(2)</a>, <a class="Xr">kqueue(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">John-Mark
- Gurney</span>
- &lt;<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 2, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kstack_contains.9 4.html b/static/freebsd/man9/kstack_contains.9 4.html
deleted file mode 100644
index 4c5acd20..00000000
--- a/static/freebsd/man9/kstack_contains.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KSTACK_CONTAINS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KSTACK_CONTAINS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kstack_contains</code> &#x2014;
- <span class="Nd">determine if an address range lies within the kernel stack
- for a thread</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/stack.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">kstack_contains</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- va</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function can be used to determine whether a given address
- range falls within the kernel stack for the thread pointed to by
- <var class="Fa">td</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The function <code class="Fn">kstack_contains</code>() returns
- <code class="Dv">true</code> if the range of addresses
- [<var class="Fa">va</var>..(<var class="Fa">va</var>+<var class="Fa">len</var>-1)]
- (both addresses inclusive) lies within the kernel stack for the thread
- pointed to by argument <var class="Fa">td</var>, or returns
- <code class="Dv">false</code> otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">This function does not return an error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">kproc(9)</a>, <a class="Xr">kthread(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 2, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/kthread.9 3.html b/static/freebsd/man9/kthread.9 3.html
deleted file mode 100644
index 01aa3362..00000000
--- a/static/freebsd/man9/kthread.9 3.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KTHREAD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KTHREAD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">kthread_start</code>,
- <code class="Nm">kthread_shutdown</code>,
- <code class="Nm">kthread_add</code>, <code class="Nm">kthread_exit</code>,
- <code class="Nm">kthread_resume</code>,
- <code class="Nm">kthread_suspend</code>,
- <code class="Nm">kthread_suspend_check</code> &#x2014;
- <span class="Nd">kernel threads</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kthread.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kthread_start</code>(<var class="Fa" style="white-space: nowrap;">const
- void *udata</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kthread_shutdown</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>, <var class="Fa" style="white-space: nowrap;">int
- howto</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kthread_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kthread_resume</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kthread_suspend</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kthread_suspend_check</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/unistd.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kthread_add</code>(<var class="Fa">void (*func)(void
- *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc
- *procp</var>, <var class="Fa">struct thread **newtdpp</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int pages</var>,
- <var class="Fa">const char *fmt</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">kproc_kthread_add</code>(<var class="Fa">void (*func)(void
- *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc
- **procptr</var>, <var class="Fa">struct thread **tdptr</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int pages</var>,
- <var class="Fa">char * procname</var>, <var class="Fa">const char
- *fmt</var>, <var class="Fa">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">In <span class="Ux">FreeBSD 8.0</span>, the older family of
- <a class="permalink" href="#kthread_*"><code class="Fn" id="kthread_*">kthread_*</code></a>(<var class="Fa">9</var>)
- functions was renamed to be the
- <a class="permalink" href="#kproc_*"><code class="Fn" id="kproc_*">kproc_*</code></a>(<var class="Fa">9</var>)
- family of functions, as they were previously misnamed and actually produced
- kernel processes. This new family of
- <code class="Fn">kthread_*</code>(<var class="Fa">9</var>) functions was
- added to produce
- <a class="permalink" href="#real"><i class="Em" id="real">real</i></a>
- kernel threads. See the <a class="Xr">kproc(9)</a> man page for more
- information on the renamed calls. Also note that the
- <code class="Fn">kproc_kthread_add</code>(<var class="Fa">9</var>) function
- appears in both pages as its functionality is split.</p>
-<p class="Pp" id="kthread_start">The function
- <a class="permalink" href="#kthread_start"><code class="Fn">kthread_start</code></a>()
- is used to start &#x201C;internal&#x201D; daemons such as
- <code class="Nm">bufdaemon</code>, <code class="Nm">pagedaemon</code>,
- <code class="Nm">vmdaemon</code>, and the <code class="Nm">syncer</code> and
- is intended to be called from <a class="Xr">SYSINIT(9)</a>. The
- <var class="Fa">udata</var> argument is actually a pointer to a
- <var class="Vt">struct kthread_desc</var> which describes the kernel thread
- that should be created:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct kthread_desc {
- char *arg0;
- void (*func)(void);
- struct thread **global_threadpp;
-};</pre>
-</div>
-<p class="Pp" id="kthread_start~2">The structure members are used by
- <a class="permalink" href="#kthread_start~2"><code class="Fn">kthread_start</code></a>()
- as follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="arg0"><var class="Va">arg0</var></dt>
- <dd>String to be used for the name of the thread. This string will be copied
- into the <var class="Va">td_name</var> member of the new threads'
- <var class="Vt">struct thread</var>.</dd>
- <dt id="func"><var class="Va">func</var></dt>
- <dd>The main function for this kernel thread to run.</dd>
- <dt id="global_threadpp"><var class="Va">global_threadpp</var></dt>
- <dd>A pointer to a <var class="Vt">struct thread</var> pointer that should be
- updated to point to the newly created thread's
- <var class="Vt">thread</var> structure. If this variable is
- <code class="Dv">NULL</code>, then it is ignored. The thread will be a
- subthread of <var class="Va">proc0</var> (PID 0).</dd>
-</dl>
-</div>
-<p class="Pp" id="kthread_add">The
- <a class="permalink" href="#kthread_add"><code class="Fn">kthread_add</code></a>()
- function is used to create a kernel thread. The new thread runs in kernel
- mode only. It is added to the process specified by the
- <var class="Fa">procp</var> argument, or if that is
- <code class="Dv">NULL</code>, to <var class="Va">proc0</var>. The
- <var class="Fa">func</var> argument specifies the function that the thread
- should execute. The <var class="Fa">arg</var> argument is an arbitrary
- pointer that is passed in as the only argument to <var class="Fa">func</var>
- when it is called by the new thread. The <var class="Fa">newtdpp</var>
- pointer points to a <var class="Vt">struct thread</var> pointer that is to
- be updated to point to the newly created thread. If this argument is
- <code class="Dv">NULL</code>, then it is ignored. The
- <var class="Fa">flags</var> argument may be set to
- <code class="Dv">RFSTOPPED</code> to leave the thread in a stopped state.
- The caller must call
- <a class="permalink" href="#sched_add"><code class="Fn" id="sched_add">sched_add</code></a>()
- to start the thread. The <var class="Fa">pages</var> argument specifies the
- size of the new kernel thread's stack in pages. If 0 is used, the default
- kernel stack size is allocated. The rest of the arguments form a
- <a class="Xr">printf(9)</a> argument list that is used to build the name of
- the new thread and is stored in the <var class="Va">td_name</var> member of
- the new thread's <var class="Vt">struct thread</var>.</p>
-<p class="Pp" id="kproc_kthread_add">The
- <a class="permalink" href="#kproc_kthread_add"><code class="Fn">kproc_kthread_add</code></a>()
- function is much like the <code class="Fn">kthread_add</code>() function
- above except that if the kproc does not already exist, it is created. This
- function is better documented in the <a class="Xr">kproc(9)</a> manual
- page.</p>
-<p class="Pp" id="kthread_exit">The
- <a class="permalink" href="#kthread_exit"><code class="Fn">kthread_exit</code></a>()
- function is used to terminate kernel threads. It should be called by the
- main function of the kernel thread rather than letting the main function
- return to its caller.</p>
-<p class="Pp" id="kthread_resume">The
- <a class="permalink" href="#kthread_resume"><code class="Fn">kthread_resume</code></a>(),
- <a class="permalink" href="#kthread_suspend"><code class="Fn" id="kthread_suspend">kthread_suspend</code></a>(),
- and
- <a class="permalink" href="#kthread_suspend_check"><code class="Fn" id="kthread_suspend_check">kthread_suspend_check</code></a>()
- functions are used to suspend and resume a kernel thread. During the main
- loop of its execution, a kernel thread that wishes to allow itself to be
- suspended should call <code class="Fn">kthread_suspend_check</code>() in
- order to check if the it has been asked to suspend. If it has, it will
- <a class="Xr">msleep(9)</a> until it is told to resume. Once it has been
- told to resume it will return allowing execution of the kernel thread to
- continue. The other two functions are used to notify a kernel thread of a
- suspend or resume request. The <var class="Fa">td</var> argument points to
- the <var class="Vt">struct thread</var> of the kernel thread to suspend or
- resume. For <code class="Fn">kthread_suspend</code>(), the
- <var class="Fa">timo</var> argument specifies a timeout to wait for the
- kernel thread to acknowledge the suspend request and suspend itself.</p>
-<p class="Pp" id="kthread_shutdown">The
- <a class="permalink" href="#kthread_shutdown"><code class="Fn">kthread_shutdown</code></a>()
- function is meant to be registered as a shutdown event for kernel threads
- that need to be suspended voluntarily during system shutdown so as not to
- interfere with system shutdown activities. The actual suspension of the
- kernel thread is done with
- <a class="permalink" href="#kthread_suspend~2"><code class="Fn" id="kthread_suspend~2">kthread_suspend</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">kthread_add</code>(),
- <code class="Fn">kthread_resume</code>(), and
- <code class="Fn">kthread_suspend</code>() functions return zero on success
- and non-zero on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example demonstrates the use of a <var class="Vt">struct
- kthread_desc</var> and the functions
- <code class="Fn">kthread_start</code>(),
- <code class="Fn">kthread_shutdown</code>(), and
- <code class="Fn">kthread_suspend_check</code>() to run the
- <code class="Nm">bufdaemon</code> process.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>static struct thread *bufdaemonthread;
-
-static struct kthread_desc buf_kp = {
- &quot;bufdaemon&quot;,
- buf_daemon,
- &amp;bufdaemonthread
-};
-SYSINIT(bufdaemon, SI_SUB_KTHREAD_BUF, SI_ORDER_FIRST, kthread_start,
- &amp;buf_kp)
-
-static void
-buf_daemon()
-{
- ...
- /*
- * This process needs to be suspended prior to shutdown sync.
- */
- EVENTHANDLER_REGISTER(shutdown_pre_sync, kthread_shutdown,
- bufdaemonthread, SHUTDOWN_PRI_LAST);
- ...
- for (;;) {
- kthread_suspend_check();
- ...
- }
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">kthread_resume</code>() and
- <code class="Fn">kthread_suspend</code>() functions will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">td</var> argument does not reference a kernel
- thread.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">kthread_add</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Memory for a thread's stack could not be allocated.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">kproc(9)</a>, <a class="Xr">SYSINIT(9)</a>,
- <a class="Xr">wakeup(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">kthread_start</code>() function first
- appeared in <span class="Ux">FreeBSD 2.2</span> where it created a whole
- process. It was converted to create threads in <span class="Ux">FreeBSD
- 8.0</span>. The <code class="Fn">kthread_shutdown</code>(),
- <code class="Fn">kthread_exit</code>(),
- <code class="Fn">kthread_resume</code>(),
- <code class="Fn">kthread_suspend</code>(), and
- <code class="Fn">kthread_suspend_check</code>() functions were introduced in
- <span class="Ux">FreeBSD 4.0</span> and were converted to threads in
- <span class="Ux">FreeBSD 8.0</span>. The
- <code class="Fn">kthread_create</code>() call was renamed to
- <code class="Fn">kthread_add</code>() in <span class="Ux">FreeBSD
- 8.0</span>. The old functionality of creating a kernel process was renamed
- to <a class="Xr">kproc_create(9)</a>. Prior to <span class="Ux">FreeBSD
- 5.0</span>, the <code class="Fn">kthread_shutdown</code>(),
- <code class="Fn">kthread_resume</code>(),
- <code class="Fn">kthread_suspend</code>(), and
- <code class="Fn">kthread_suspend_check</code>() functions were named
- <code class="Fn">shutdown_kproc</code>(),
- <code class="Fn">resume_kproc</code>(),
- <code class="Fn">shutdown_kproc</code>(), and
- <code class="Fn">kproc_suspend_loop</code>(), respectively.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 15, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ktr.9 4.html b/static/freebsd/man9/ktr.9 4.html
deleted file mode 100644
index 1863f4fd..00000000
--- a/static/freebsd/man9/ktr.9 4.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">KTR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">KTR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">CTR0</code>, <code class="Nm">CTR1</code>,
- <code class="Nm">CTR2</code>, <code class="Nm">CTR3</code>,
- <code class="Nm">CTR4</code>, <code class="Nm">CTR5</code> &#x2014;
- <span class="Nd">kernel tracing facility</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ktr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern int ktr_cpumask</var>;
- <br/>
- <var class="Vt">extern int ktr_entries</var>;
- <br/>
- <var class="Vt">extern int ktr_extend</var>;
- <br/>
- <var class="Vt">extern int ktr_mask</var>;
- <br/>
- <var class="Vt">extern int ktr_verbose</var>;
- <br/>
- <var class="Vt">extern struct ktr_entry ktr_buf[]</var>;</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR0</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char
- *format</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR1</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR2</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR3</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR4</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR5</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">CTR6</code>(<var class="Fa" style="white-space: nowrap;">u_int
- mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">arg3</var>,
- <var class="Fa" style="white-space: nowrap;">arg4</var>,
- <var class="Fa" style="white-space: nowrap;">arg5</var>,
- <var class="Fa" style="white-space: nowrap;">arg6</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">KTR provides a circular buffer of events that can be logged in a
- <a class="Xr">printf(9)</a> style fashion. These events can then be dumped
- with <a class="Xr">ddb(4)</a>, <a class="Xr">gdb(1)</a>
- (<span class="Pa">ports/devel/gdb</span>) or
- <a class="Xr">ktrdump(8)</a>.</p>
-<p class="Pp">Events are created and logged in the kernel via the
- <code class="Dv">CTR</code> and
- <code class="Dv">CTR</code><var class="Ar">x</var> macros. The first
- parameter is a mask of event types (<code class="Dv">KTR_*</code>) defined
- in <code class="In">&lt;<a class="In">sys/ktr_class.h</a>&gt;</code>. The
- event will be logged only if any of the event types specified in
- <var class="Fa">mask</var> are enabled in the global event mask stored in
- <var class="Va">ktr_mask</var>. The <var class="Fa">format</var> argument is
- a <a class="Xr">printf(9)</a> style format string used to build the text of
- the event log message. Following the <var class="Fa">format</var> string are
- zero to six arguments referenced by <var class="Fa">format</var>. Each event
- is logged with a file name and source line number of the originating CTR
- call, and a timestamp in addition to the log message.</p>
-<p class="Pp">The event is stored in the circular buffer with supplied arguments
- as is, and formatting is done at the dump time. Do not use pointers to the
- objects with limited lifetime, for instance, strings, because the pointer
- may become invalid when buffer is printed.</p>
-<p class="Pp">The <code class="Dv">CTR</code><var class="Ar">x</var> macros
- differ only in the number of arguments each one takes, as indicated by its
- name.</p>
-<p class="Pp">The <var class="Va">ktr_entries</var> variable contains the number
- of entries in the <var class="Va">ktr_buf</var> array. These variables are
- mostly useful for post-mortem crash dump tools to locate the base of the
- circular trace buffer and its length.</p>
-<p class="Pp">The <var class="Va">ktr_mask</var> variable contains the run time
- mask of events to log.</p>
-<p class="Pp">The CPU event mask is stored in the
- <var class="Va">ktr_cpumask</var> variable.</p>
-<p class="Pp">The <var class="Va">ktr_verbose</var> variable stores the verbose
- flag that controls whether events are logged to the console in addition to
- the event buffer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example demonstrates the use of tracepoints at the
- <code class="Dv">KTR_PROC</code> logging level.</p>
-<div class="Bd Pp Li">
-<pre>void
-mi_switch()
-{
- ...
- /*
- * Pick a new current process and record its start time.
- */
- ...
- CTR3(KTR_PROC, &quot;mi_switch: old proc %p (pid %d)&quot;, p, p-&gt;p_pid);
- ...
- cpu_switch();
- ...
- CTR3(KTR_PROC, &quot;mi_switch: new proc %p (pid %d)&quot;, p, p-&gt;p_pid);
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ktr(4)</a>, <a class="Xr">ktrdump(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The KTR kernel tracing facility first appeared in
- <span class="Ux">BSD/OS 3.0</span> and was imported into
- <span class="Ux">FreeBSD 5.0</span>.</p>
-<p class="Pp">The <code class="Fn">CTR</code>() macro accepting a variable
- number of arguments first appeared in <span class="Ux">FreeBSD
- 14.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Currently there is one global buffer shared among all CPUs. It
- might be profitable at some point in time to use per-CPU buffers instead so
- that if one CPU halts or starts spinning, then the log messages it emitted
- just prior to halting or spinning will not be drowned out by events from the
- other CPUs.</p>
-<p class="Pp">The arguments given in <code class="Fn">CTRx</code>() macros are
- stored as <var class="Vt">u_long</var>, so do not pass arguments larger than
- size of an <var class="Vt">u_long</var> type. For example passing 64bit
- arguments on 32bit architectures will give incorrect results.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/lock.9 4.html b/static/freebsd/man9/lock.9 4.html
deleted file mode 100644
index 2e87a299..00000000
--- a/static/freebsd/man9/lock.9 4.html
+++ /dev/null
@@ -1,431 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">LOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">LOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">lockinit</code>,
- <code class="Nm">lockdestroy</code>, <code class="Nm">lockmgr</code>,
- <code class="Nm">lockmgr_args</code>,
- <code class="Nm">lockmgr_args_rw</code>,
- <code class="Nm">lockmgr_disown</code>,
- <code class="Nm">lockmgr_disowned</code>,
- <code class="Nm">lockmgr_lock_flags</code>,
- <code class="Nm">lockmgr_printinfo</code>,
- <code class="Nm">lockmgr_recursed</code>,
- <code class="Nm">lockmgr_rw</code>, <code class="Nm">lockmgr_slock</code>,
- <code class="Nm">lockmgr_unlock</code>,
- <code class="Nm">lockmgr_xlock</code>, <code class="Nm">lockstatus</code>,
- <code class="Nm">lockmgr_assert</code> &#x2014; <span class="Nd">lockmgr
- family of functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lockmgr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">lockinit</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">int
- prio</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int timo</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">lockdestroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *ilk</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_args</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int prio</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_args_rw</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock
- *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int prio</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">lockmgr_disown</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_disowned</code>(<var class="Fa" style="white-space: nowrap;">const
- struct lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_lock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct lock_object
- *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char
- *file</var>, <var class="Fa" style="white-space: nowrap;">int
- line</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">lockmgr_printinfo</code>(<var class="Fa" style="white-space: nowrap;">const
- struct lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_recursed</code>(<var class="Fa" style="white-space: nowrap;">const
- struct lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_rw</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock
- *ilk</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_slock</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">const char
- *file</var>, <var class="Fa" style="white-space: nowrap;">int
- line</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockmgr_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- flags</var>, <var class="Fa" style="white-space: nowrap;">const char
- *file</var>, <var class="Fa" style="white-space: nowrap;">int
- line</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">lockstatus</code>(<var class="Fa" style="white-space: nowrap;">const
- struct lock *lkp</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">lockmgr_assert</code>(<var class="Fa" style="white-space: nowrap;">const
- struct lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#lockinit"><code class="Fn" id="lockinit">lockinit</code></a>()
- function is used to initialize a lock. It must be called before any
- operation can be performed on a lock. Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">lkp</var></dt>
- <dd>A pointer to the lock to initialize.</dd>
- <dt><var class="Fa">prio</var></dt>
- <dd>The priority passed to <a class="Xr">sleep(9)</a>.</dd>
- <dt><var class="Fa">wmesg</var></dt>
- <dd>The lock message. This is used for both debugging output and
- <a class="Xr">sleep(9)</a>.</dd>
- <dt><var class="Fa">timo</var></dt>
- <dd>The timeout value passed to <a class="Xr">sleep(9)</a>.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The flags the lock is to be initialized with:
- <dl class="Bl-tag">
- <dt id="LK_CANRECURSE"><a class="permalink" href="#LK_CANRECURSE"><code class="Dv">LK_CANRECURSE</code></a></dt>
- <dd>Allow recursive exclusive locks.</dd>
- <dt id="LK_NOPROFILE"><a class="permalink" href="#LK_NOPROFILE"><code class="Dv">LK_NOPROFILE</code></a></dt>
- <dd>Disable lock profiling for this lock.</dd>
- <dt id="LK_NOSHARE"><a class="permalink" href="#LK_NOSHARE"><code class="Dv">LK_NOSHARE</code></a></dt>
- <dd>Allow exclusive locks only.</dd>
- <dt id="LK_NOWITNESS"><a class="permalink" href="#LK_NOWITNESS"><code class="Dv">LK_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd>
- <dt id="LK_NODUP"><a class="permalink" href="#LK_NODUP"><code class="Dv">LK_NODUP</code></a></dt>
- <dd><a class="Xr">witness(4)</a> should log messages about duplicate locks
- being acquired.</dd>
- <dt id="LK_QUIET"><a class="permalink" href="#LK_QUIET"><code class="Dv">LK_QUIET</code></a></dt>
- <dd>Disable <a class="Xr">ktr(4)</a> logging for this lock.</dd>
- </dl>
- </dd>
-</dl>
-<p class="Pp" id="lockdestroy">The
- <a class="permalink" href="#lockdestroy"><code class="Fn">lockdestroy</code></a>()
- function is used to destroy a lock, and while it is called in a number of
- places in the kernel, it currently does nothing.</p>
-<p class="Pp" id="lockmgr">The
- <a class="permalink" href="#lockmgr"><code class="Fn">lockmgr</code></a>()
- and
- <a class="permalink" href="#lockmgr_rw"><code class="Fn" id="lockmgr_rw">lockmgr_rw</code></a>()
- functions handle general locking functionality within the kernel, including
- support for shared and exclusive locks, and recursion.
- <code class="Fn">lockmgr</code>() and <code class="Fn">lockmgr_rw</code>()
- are also able to upgrade and downgrade locks.</p>
-<p class="Pp">Their arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">lkp</var></dt>
- <dd>A pointer to the lock to manipulate.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Flags indicating what action is to be taken.
- <dl class="Bl-tag">
- <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt>
- <dd>Acquire a shared lock. If an exclusive lock is currently held,
- <code class="Dv">EDEADLK</code> will be returned.</dd>
- <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt>
- <dd>Acquire an exclusive lock. If an exclusive lock is already held, and
- <code class="Dv">LK_CANRECURSE</code> is not set, the system will
- <a class="Xr">panic(9)</a>.</dd>
- <dt id="LK_DOWNGRADE"><a class="permalink" href="#LK_DOWNGRADE"><code class="Dv">LK_DOWNGRADE</code></a></dt>
- <dd>Downgrade exclusive lock to a shared lock. Downgrading a shared lock
- is not permitted. If an exclusive lock has been recursed, the system
- will <a class="Xr">panic(9)</a>.</dd>
- <dt id="LK_UPGRADE"><a class="permalink" href="#LK_UPGRADE"><code class="Dv">LK_UPGRADE</code></a></dt>
- <dd>Upgrade a shared lock to an exclusive lock. If this call fails, the
- shared lock is lost, even if the <code class="Dv">LK_NOWAIT</code>
- flag is specified. During the upgrade, the shared lock could be
- temporarily dropped. Attempts to upgrade an exclusive lock will cause
- a <a class="Xr">panic(9)</a>.</dd>
- <dt id="LK_TRYUPGRADE"><a class="permalink" href="#LK_TRYUPGRADE"><code class="Dv">LK_TRYUPGRADE</code></a></dt>
- <dd>Try to upgrade a shared lock to an exclusive lock. The failure to
- upgrade does not result in the dropping of the shared lock
- ownership.</dd>
- <dt id="LK_RELEASE"><a class="permalink" href="#LK_RELEASE"><code class="Dv">LK_RELEASE</code></a></dt>
- <dd>Release the lock. Releasing a lock that is not held can cause a
- <a class="Xr">panic(9)</a>.</dd>
- <dt id="LK_DRAIN"><a class="permalink" href="#LK_DRAIN"><code class="Dv">LK_DRAIN</code></a></dt>
- <dd>Wait for all activity on the lock to end, then mark it decommissioned.
- This is used before freeing a lock that is part of a piece of memory
- that is about to be freed. (As documented in
- <code class="In">&lt;<a class="In">sys/lockmgr.h</a>&gt;</code>.)</dd>
- <dt id="LK_SLEEPFAIL"><a class="permalink" href="#LK_SLEEPFAIL"><code class="Dv">LK_SLEEPFAIL</code></a></dt>
- <dd>Fail if operation has slept.</dd>
- <dt id="LK_NOWAIT"><a class="permalink" href="#LK_NOWAIT"><code class="Dv">LK_NOWAIT</code></a></dt>
- <dd>Do not allow the call to sleep. This can be used to test the
- lock.</dd>
- <dt id="LK_TIMELOCK"><a class="permalink" href="#LK_TIMELOCK"><code class="Dv">LK_TIMELOCK</code></a></dt>
- <dd>Use <var class="Fa">timo</var> during a sleep; otherwise, 0 is
- used.</dd>
- <dt id="LK_NOWITNESS~2"><a class="permalink" href="#LK_NOWITNESS~2"><code class="Dv">LK_NOWITNESS</code></a></dt>
- <dd>Skip the <a class="Xr">witness(4)</a> checks for this instance.</dd>
- <dt id="LK_CANRECURSE~2"><a class="permalink" href="#LK_CANRECURSE~2"><code class="Dv">LK_CANRECURSE</code></a></dt>
- <dd>Allow recursion on an exclusive lock. For every lock there must be a
- release.</dd>
- <dt id="LK_INTERLOCK"><a class="permalink" href="#LK_INTERLOCK"><code class="Dv">LK_INTERLOCK</code></a></dt>
- <dd>Unlock the interlock (which should be locked already).</dd>
- <dt id="LK_NODDLKTREAT"><a class="permalink" href="#LK_NODDLKTREAT"><code class="Dv">LK_NODDLKTREAT</code></a></dt>
- <dd>Normally,
- <a class="permalink" href="#lockmgr~2"><code class="Fn" id="lockmgr~2">lockmgr</code></a>()
- postpones serving further shared requests for shared-locked lock if
- there is exclusive waiter, to avoid exclusive lock starvation. But, if
- the thread requesting the shared lock already owns a shared lockmgr
- lock, the request is granted even in presence of the parallel
- exclusive lock request, which is done to avoid deadlocks with
- recursive shared acquisition.
- <p class="Pp">The <code class="Dv">LK_NODDLKTREAT</code> flag can only
- be used by code which requests shared non-recursive lock. The flag
- allows exclusive requests to preempt the current shared request even
- if the current thread owns shared locks. This is safe since shared
- lock is guaranteed to not recurse, and is used when thread is known
- to held unrelated shared locks, to not cause unnecessary starvation.
- An example is <code class="Dv">vp</code> locking in VFS
- <a class="Xr">lookup(9)</a>, when <code class="Dv">dvp</code> is
- already locked.</p>
- </dd>
- </dl>
- </dd>
- <dt id="lockmgr~3"><var class="Fa">ilk</var></dt>
- <dd>An interlock mutex for controlling group access to the lock. If
- <code class="Dv">LK_INTERLOCK</code> is specified,
- <a class="permalink" href="#lockmgr~3"><code class="Fn">lockmgr</code></a>()
- and
- <a class="permalink" href="#lockmgr_rw~2"><code class="Fn" id="lockmgr_rw~2">lockmgr_rw</code></a>()
- assume <var class="Fa">ilk</var> is currently owned and not recursed, and
- will return it unlocked. See <a class="Xr">mtx_assert(9)</a>.</dd>
-</dl>
-<p class="Pp" id="lockmgr_args">The
- <a class="permalink" href="#lockmgr_args"><code class="Fn">lockmgr_args</code></a>()
- and
- <a class="permalink" href="#lockmgr_args_rw"><code class="Fn" id="lockmgr_args_rw">lockmgr_args_rw</code></a>()
- function work like <code class="Fn">lockmgr</code>() and
- <code class="Fn">lockmgr_rw</code>() but accepting a
- <var class="Fa">wmesg</var>, <var class="Fa">timo</var> and
- <var class="Fa">prio</var> on a per-instance basis. The specified values
- will override the default ones, but this can still be used passing,
- respectively, <code class="Dv">LK_WMESG_DEFAULT</code>,
- <code class="Dv">LK_PRIO_DEFAULT</code> and
- <code class="Dv">LK_TIMO_DEFAULT</code>.</p>
-<p class="Pp" id="lockmgr_lock_flags">The
- <a class="permalink" href="#lockmgr_lock_flags"><code class="Fn">lockmgr_lock_flags</code></a>()
- function works like <code class="Fn">lockmgr</code>() but accepts explicit
- <var class="Fa">file</var> and <var class="Fa">line</var> arguments for lock
- tracing.</p>
-<p class="Pp" id="lockmgr_slock">The
- <a class="permalink" href="#lockmgr_slock"><code class="Fn">lockmgr_slock</code></a>(),
- <a class="permalink" href="#lockmgr_xlock"><code class="Fn" id="lockmgr_xlock">lockmgr_xlock</code></a>(),
- and
- <a class="permalink" href="#lockmgr_unlock"><code class="Fn" id="lockmgr_unlock">lockmgr_unlock</code></a>()
- functions are lightweight entry points that function like
- <code class="Fn">lockmgr</code>() for the <code class="Dv">LK_SHARED</code>,
- <code class="Dv">LK_EXCLUSIVE</code>, and <code class="Dv">LK_RELEASE</code>
- operations respectively. They provide functionality similar to
- <a class="Xr">sx(9)</a> locks in that none of the additional
- <a class="Xr">lockmgr(9)</a> features are supported. Specifically, these
- functions do not support unlocking interlocks, the
- <code class="Dv">LK_SLEEPFAIL</code> flag, or locks with shared locking
- disabled via <code class="Dv">LK_NOSHARE</code>. They also accept explicit
- <var class="Fa">file</var> and <var class="Fa">line</var> arguments for lock
- tracing.</p>
-<p class="Pp" id="lockmgr_disown">The
- <a class="permalink" href="#lockmgr_disown"><code class="Fn">lockmgr_disown</code></a>()
- function switches the owner from the current thread to be
- <code class="Dv">LK_KERNPROC</code>, if the lock is already held.</p>
-<p class="Pp" id="lockmgr_disowned">The
- <a class="permalink" href="#lockmgr_disowned"><code class="Fn">lockmgr_disowned</code></a>()
- function returns true or false according to whether the lock is held by
- <code class="Dv">LK_KERNPROC</code>.</p>
-<p class="Pp" id="lockmgr_printinfo">The
- <a class="permalink" href="#lockmgr_printinfo"><code class="Fn">lockmgr_printinfo</code></a>()
- function prints debugging information about the lock. It is used primarily
- by <a class="Xr">VOP_PRINT(9)</a> functions.</p>
-<p class="Pp" id="lockmgr_recursed">The
- <a class="permalink" href="#lockmgr_recursed"><code class="Fn">lockmgr_recursed</code></a>()
- function returns true if the lock is recursed, 0 otherwise.</p>
-<p class="Pp" id="lockstatus">The
- <a class="permalink" href="#lockstatus"><code class="Fn">lockstatus</code></a>()
- function returns the status of the lock in relation to the current
- thread.</p>
-<p class="Pp" id="lockmgr_assert">When compiled with <code class="Cd">options
- INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>, the
- <a class="permalink" href="#lockmgr_assert"><code class="Fn">lockmgr_assert</code></a>()
- function tests <var class="Fa">lkp</var> for the assertions specified in
- <var class="Fa">what</var>, and panics if they are not met. One of the
- following assertions must be specified:</p>
-<dl class="Bl-tag">
- <dt id="KA_LOCKED"><a class="permalink" href="#KA_LOCKED"><code class="Dv">KA_LOCKED</code></a></dt>
- <dd>Assert that the current thread has either a shared or an exclusive lock on
- the <var class="Vt">lkp</var> lock pointed to by the first argument.</dd>
- <dt id="KA_SLOCKED"><a class="permalink" href="#KA_SLOCKED"><code class="Dv">KA_SLOCKED</code></a></dt>
- <dd>Assert that the current thread has a shared lock on the
- <var class="Vt">lkp</var> lock pointed to by the first argument.</dd>
- <dt id="KA_XLOCKED"><a class="permalink" href="#KA_XLOCKED"><code class="Dv">KA_XLOCKED</code></a></dt>
- <dd>Assert that the current thread has an exclusive lock on the
- <var class="Vt">lkp</var> lock pointed to by the first argument.</dd>
- <dt id="KA_UNLOCKED"><a class="permalink" href="#KA_UNLOCKED"><code class="Dv">KA_UNLOCKED</code></a></dt>
- <dd>Assert that the current thread has no lock on the
- <var class="Vt">lkp</var> lock pointed to by the first argument.</dd>
-</dl>
-<p class="Pp">In addition, one of the following optional assertions can be used
- with either an <code class="Dv">KA_LOCKED</code>,
- <code class="Dv">KA_SLOCKED</code>, or <code class="Dv">KA_XLOCKED</code>
- assertion:</p>
-<dl class="Bl-tag">
- <dt id="KA_RECURSED"><a class="permalink" href="#KA_RECURSED"><code class="Dv">KA_RECURSED</code></a></dt>
- <dd>Assert that the current thread has a recursed lock on
- <var class="Fa">lkp</var>.</dd>
- <dt id="KA_NOTRECURSED"><a class="permalink" href="#KA_NOTRECURSED"><code class="Dv">KA_NOTRECURSED</code></a></dt>
- <dd>Assert that the current thread does not have a recursed lock on
- <var class="Fa">lkp</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">lockmgr</code>() and
- <code class="Fn">lockmgr_rw</code>() functions return 0 on success and
- non-zero on failure.</p>
-<p class="Pp">The <code class="Fn">lockstatus</code>() function returns:</p>
-<dl class="Bl-tag">
- <dt id="LK_EXCLUSIVE~2"><a class="permalink" href="#LK_EXCLUSIVE~2"><code class="Dv">LK_EXCLUSIVE</code></a></dt>
- <dd>An exclusive lock is held by the current thread.</dd>
- <dt id="LK_EXCLOTHER"><a class="permalink" href="#LK_EXCLOTHER"><code class="Dv">LK_EXCLOTHER</code></a></dt>
- <dd>An exclusive lock is held by someone other than the current thread.</dd>
- <dt id="LK_SHARED~2"><a class="permalink" href="#LK_SHARED~2"><code class="Dv">LK_SHARED</code></a></dt>
- <dd>A shared lock is held.</dd>
- <dt id="0"><a class="permalink" href="#0"><code class="Li">0</code></a></dt>
- <dd>The lock is not held by anyone.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">lockmgr</code>() and
- <code class="Fn">lockmgr_rw</code>() fail if:</p>
-<dl class="Bl-tag">
- <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
- <dd><a class="permalink" href="#LK_FORCEUPGRADE"><code class="Dv" id="LK_FORCEUPGRADE">LK_FORCEUPGRADE</code></a>
- was requested and another thread had already requested a lock
- upgrade.</dd>
- <dt id="EBUSY~2">[<a class="permalink" href="#EBUSY~2"><code class="Er">EBUSY</code></a>]</dt>
- <dd><a class="permalink" href="#LK_NOWAIT~2"><code class="Dv" id="LK_NOWAIT~2">LK_NOWAIT</code></a>
- was set, and a sleep would have been required, or
- <code class="Dv">LK_TRYUPGRADE</code> operation was not able to upgrade
- the lock.</dd>
- <dt id="EDEADLK">[<a class="permalink" href="#EDEADLK"><code class="Er">EDEADLK</code></a>]</dt>
- <dd>A shared lock was attempted while the thread already held the exclusive
- lock.</dd>
- <dt id="ENOLCK">[<a class="permalink" href="#ENOLCK"><code class="Er">ENOLCK</code></a>]</dt>
- <dd><a class="permalink" href="#LK_SLEEPFAIL~2"><code class="Dv" id="LK_SLEEPFAIL~2">LK_SLEEPFAIL</code></a>
- was set and <code class="Fn">lockmgr</code>() or
- <code class="Fn">lockmgr_rw</code>() did sleep.</dd>
- <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt>
- <dd><a class="permalink" href="#PCATCH"><code class="Dv" id="PCATCH">PCATCH</code></a>
- was set in the lock priority, and a signal was delivered during a sleep.
- Note the
- <a class="permalink" href="#ERESTART"><code class="Er" id="ERESTART">ERESTART</code></a>
- error below.</dd>
- <dt id="ERESTART~2">[<a class="permalink" href="#ERESTART~2"><code class="Er">ERESTART</code></a>]</dt>
- <dd><a class="permalink" href="#PCATCH~2"><code class="Dv" id="PCATCH~2">PCATCH</code></a>
- was set in the lock priority, a signal was delivered during a sleep, and
- the system call is to be restarted.</dd>
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>a non-zero timeout was given, and the timeout expired.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">If <code class="Dv">LK_INTERLOCK</code> is passed in the
- <var class="Fa">flags</var> argument to
- <a class="permalink" href="#lockmgr~4"><code class="Fn" id="lockmgr~4">lockmgr</code></a>()
- or
- <a class="permalink" href="#lockmgr_rw~3"><code class="Fn" id="lockmgr_rw~3">lockmgr_rw</code></a>(),
- the <var class="Fa">ilk</var> must be held prior to calling
- <code class="Fn">lockmgr</code>() or <code class="Fn">lockmgr_rw</code>(),
- and will be returned unlocked.</p>
-<p class="Pp">Upgrade attempts that fail result in the loss of the lock that is
- currently held. Also, it is invalid to upgrade an exclusive lock, and a
- <a class="Xr">panic(9)</a> will be the result of trying.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">witness(4)</a>, <a class="Xr">condvar(9)</a>,
- <a class="Xr">locking(9)</a>, <a class="Xr">mtx_assert(9)</a>,
- <a class="Xr">mutex(9)</a>, <a class="Xr">panic(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sleep(9)</a>,
- <a class="Xr">sx(9)</a>, <a class="Xr">VOP_PRINT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 21, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/locking.9 3.html b/static/freebsd/man9/locking.9 3.html
deleted file mode 100644
index a983183f..00000000
--- a/static/freebsd/man9/locking.9 3.html
+++ /dev/null
@@ -1,458 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">LOCKING(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">LOCKING(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">locking</code> &#x2014; <span class="Nd">kernel
- synchronization primitives</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#FreeBSD"><i class="Em" id="FreeBSD">FreeBSD</i></a>
- kernel is written to run across multiple CPUs and as such provides several
- different synchronization primitives to allow developers to safely access
- and manipulate many data types.</p>
-<section class="Ss">
-<h2 class="Ss" id="Mutexes"><a class="permalink" href="#Mutexes">Mutexes</a></h2>
-<p class="Pp">Mutexes (also called &quot;blocking mutexes&quot;) are the most
- commonly used synchronization primitive in the kernel. A thread acquires
- (locks) a mutex before accessing data shared with other threads (including
- interrupt threads), and releases (unlocks) it afterwards. If the mutex
- cannot be acquired, the thread requesting it will wait. Mutexes are adaptive
- by default, meaning that if the owner of a contended mutex is currently
- running on another CPU, then a thread attempting to acquire the mutex will
- spin rather than yielding the processor. Mutexes fully support priority
- propagation.</p>
-<p class="Pp">See <a class="Xr">mutex(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Spin_Mutexes"><a class="permalink" href="#Spin_Mutexes">Spin
- Mutexes</a></h2>
-<p class="Pp">Spin mutexes are a variation of basic mutexes; the main difference
- between the two is that spin mutexes never block. Instead, they spin while
- waiting for the lock to be released. To avoid deadlock, a thread that holds
- a spin mutex must never yield its CPU. Unlike ordinary mutexes, spin mutexes
- disable interrupts when acquired. Since disabling interrupts can be
- expensive, they are generally slower to acquire and release. Spin mutexes
- should be used only when absolutely necessary, e.g. to protect data shared
- with interrupt filter code (see <a class="Xr">bus_setup_intr(9)</a> for
- details), or for scheduler internals.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Mutex_Pools"><a class="permalink" href="#Mutex_Pools">Mutex
- Pools</a></h2>
-<p class="Pp">With most synchronization primitives, such as mutexes, the
- programmer must provide memory to hold the primitive. For example, a mutex
- may be embedded inside the structure it protects. Mutex pools provide a
- preallocated set of mutexes to avoid this requirement. Note that mutexes
- from a pool may only be used as leaf locks.</p>
-<p class="Pp">See <a class="Xr">mtx_pool(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Reader/Writer_Locks"><a class="permalink" href="#Reader/Writer_Locks">Reader/Writer
- Locks</a></h2>
-<p class="Pp">Reader/writer locks allow shared access to protected data by
- multiple threads or exclusive access by a single thread. The threads with
- shared access are known as
- <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a>
- since they should only read the protected data. A thread with exclusive
- access is known as a
- <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a>
- since it may modify protected data.</p>
-<p class="Pp">Reader/writer locks can be treated as mutexes (see above and
- <a class="Xr">mutex(9)</a>) with shared/exclusive semantics. Reader/writer
- locks support priority propagation like mutexes, but priority is propagated
- only to an exclusive holder. This limitation comes from the fact that shared
- owners are anonymous.</p>
-<p class="Pp">See <a class="Xr">rwlock(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Read-Mostly_Locks"><a class="permalink" href="#Read-Mostly_Locks">Read-Mostly
- Locks</a></h2>
-<p class="Pp">Read-mostly locks are similar to
- <a class="permalink" href="#reader/writer"><i class="Em" id="reader/writer">reader/writer</i></a>
- locks but optimized for very infrequent write locking.
- <a class="permalink" href="#Read-mostly"><i class="Em" id="Read-mostly">Read-mostly</i></a>
- locks implement full priority propagation by tracking shared owners using a
- caller-supplied
- <a class="permalink" href="#tracker"><i class="Em" id="tracker">tracker</i></a>
- data structure.</p>
-<p class="Pp">See <a class="Xr">rmlock(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Sleepable_Read-Mostly_Locks"><a class="permalink" href="#Sleepable_Read-Mostly_Locks">Sleepable
- Read-Mostly Locks</a></h2>
-<p class="Pp">Sleepable read-mostly locks are a variation on read-mostly locks.
- Threads holding an exclusive lock may sleep, but threads holding a shared
- lock may not. Priority is propagated to shared owners but not to exclusive
- owners.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Shared/exclusive_locks"><a class="permalink" href="#Shared/exclusive_locks">Shared/exclusive
- locks</a></h2>
-<p class="Pp">Shared/exclusive locks are similar to reader/writer locks; the
- main difference between them is that shared/exclusive locks may be held
- during unbounded sleep. Acquiring a contested shared/exclusive lock can
- perform an unbounded sleep. These locks do not support priority
- propagation.</p>
-<p class="Pp">See <a class="Xr">sx(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Lockmanager_locks"><a class="permalink" href="#Lockmanager_locks">Lockmanager
- locks</a></h2>
-<p class="Pp">Lockmanager locks are sleepable shared/exclusive locks used mostly
- in <a class="Xr">VFS(9)</a> (as a <a class="Xr">vnode(9)</a> lock) and in
- the buffer cache (<a class="Xr">BUF_LOCK(9)</a>). They have features other
- lock types do not have such as sleep timeouts, blocking upgrades, writer
- starvation avoidance, draining, and an interlock mutex, but this makes them
- complicated both to use and to implement; for this reason, they should be
- avoided.</p>
-<p class="Pp">See <a class="Xr">lock(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Non-blocking_synchronization"><a class="permalink" href="#Non-blocking_synchronization">Non-blocking
- synchronization</a></h2>
-<p class="Pp">The kernel has two facilities, <a class="Xr">epoch(9)</a> and
- <a class="Xr">smr(9)</a>, which can be used to provide read-only access to a
- data structure while one or more writers are concurrently modifying the data
- structure. Specifically, readers using <a class="Xr">epoch(9)</a> and
- <a class="Xr">smr(9)</a> to synchronize accesses do not block writers, in
- contrast with reader/writer locks, and they help ensure that memory freed by
- writers is not reused until all readers which may be accessing it have
- finished. Thus, they are a useful building block in the construction of
- lock-free data structures.</p>
-<p class="Pp">These facilities are difficult to use correctly and should be
- avoided in preference to traditional mutual exclusion-based synchronization,
- except when performance or non-blocking guarantees are a major concern.</p>
-<p class="Pp">See <a class="Xr">epoch(9)</a> and <a class="Xr">smr(9)</a> for
- details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Counting_semaphores"><a class="permalink" href="#Counting_semaphores">Counting
- semaphores</a></h2>
-<p class="Pp">Counting semaphores provide a mechanism for synchronizing access
- to a pool of resources. Unlike mutexes, semaphores do not have the concept
- of an owner, so they can be useful in situations where one thread needs to
- acquire a resource, and another thread needs to release it. They are largely
- deprecated.</p>
-<p class="Pp">See <a class="Xr">sema(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Condition_variables"><a class="permalink" href="#Condition_variables">Condition
- variables</a></h2>
-<p class="Pp">Condition variables are used in conjunction with locks to wait for
- a condition to become true. A thread must hold the associated lock before
- calling one of the
- <a class="permalink" href="#cv_wait"><code class="Fn" id="cv_wait">cv_wait</code></a>(),
- functions. When a thread waits on a condition, the lock is atomically
- released before the thread yields the processor and reacquired before the
- function call returns. Condition variables may be used with blocking
- mutexes, reader/writer locks, read-mostly locks, and shared/exclusive
- locks.</p>
-<p class="Pp">See <a class="Xr">condvar(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Sleep/Wakeup"><a class="permalink" href="#Sleep/Wakeup">Sleep/Wakeup</a></h2>
-<p class="Pp">The functions
- <a class="permalink" href="#tsleep"><code class="Fn" id="tsleep">tsleep</code></a>(),
- <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(),
- <code class="Fn">pause</code>(), <code class="Fn">wakeup</code>(), and
- <a class="permalink" href="#wakeup_one"><code class="Fn" id="wakeup_one">wakeup_one</code></a>()
- also handle event-based thread blocking. Unlike condition variables,
- arbitrary addresses may be used as wait channels and a dedicated structure
- does not need to be allocated. However, care must be taken to ensure that
- wait channel addresses are unique to an event. If a thread must wait for an
- external event, it is put to sleep by <code class="Fn">tsleep</code>(),
- <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(), or
- <code class="Fn">pause</code>(). Threads may also wait using one of the
- locking primitive sleep routines <a class="Xr">mtx_sleep(9)</a>,
- <a class="Xr">rw_sleep(9)</a>, or <a class="Xr">sx_sleep(9)</a>.</p>
-<p class="Pp" id="wakeup">The parameter <var class="Fa">chan</var> is an
- arbitrary address that uniquely identifies the event on which the thread is
- being put to sleep. All threads sleeping on a single
- <var class="Fa">chan</var> are woken up later by
- <a class="permalink" href="#wakeup"><code class="Fn">wakeup</code></a>()
- (often called from inside an interrupt routine) to indicate that the event
- the thread was blocking on has occurred.</p>
-<p class="Pp" id="msleep">Several of the sleep functions including
- <a class="permalink" href="#msleep"><code class="Fn">msleep</code></a>(),
- <a class="permalink" href="#msleep_spin"><code class="Fn" id="msleep_spin">msleep_spin</code></a>(),
- and the locking primitive sleep routines specify an additional lock
- parameter. The lock will be released before sleeping and reacquired before
- the sleep routine returns. If <var class="Fa">priority</var> includes the
- <code class="Dv">PDROP</code> flag, then the lock will not be reacquired
- before returning. The lock is used to ensure that a condition can be checked
- atomically, and that the current thread can be suspended without missing a
- change to the condition or an associated wakeup. In addition, all of the
- sleep routines will fully drop the <var class="Va">Giant</var> mutex (even
- if recursed) while the thread is suspended and will reacquire the
- <var class="Va">Giant</var> mutex (restoring any recursion) before the
- function returns.</p>
-<p class="Pp" id="pause">The
- <a class="permalink" href="#pause"><code class="Fn">pause</code></a>()
- function is a special sleep function that waits for a specified amount of
- time to pass before the thread resumes execution. This sleep cannot be
- terminated early by either an explicit <code class="Fn">wakeup</code>() or a
- signal.</p>
-<p class="Pp">See <a class="Xr">sleep(9)</a> for details.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Giant"><a class="permalink" href="#Giant">Giant</a></h2>
-<p class="Pp">Giant is a special mutex used to protect data structures that do
- not yet have their own locks. Since it provides semantics akin to the old
- <a class="Xr">spl(9)</a> interface, Giant has special characteristics:</p>
-<ol class="Bl-enum">
- <li>It is recursive.</li>
- <li>Drivers can request that Giant be locked around them by not marking
- themselves MPSAFE. Note that infrastructure to do this is slowly going
- away as non-MPSAFE drivers either became properly locked or
- disappear.</li>
- <li>Giant must be locked before other non-sleepable locks.</li>
- <li>Giant is dropped during unbounded sleeps and reacquired after wakeup.</li>
- <li>There are places in the kernel that drop Giant and pick it back up again.
- Sleep locks will do this before sleeping. Parts of the network or VM code
- may do this as well. This means that you cannot count on Giant keeping
- other code from running if your code sleeps, even if you want it to.</li>
-</ol>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INTERACTIONS"><a class="permalink" href="#INTERACTIONS">INTERACTIONS</a></h1>
-<p class="Pp">The primitives can interact and have a number of rules regarding
- how they can and can not be combined. Many of these rules are checked by
- <a class="Xr">witness(4)</a>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Bounded_vs._Unbounded_Sleep"><a class="permalink" href="#Bounded_vs._Unbounded_Sleep">Bounded
- vs. Unbounded Sleep</a></h2>
-<p class="Pp">In a bounded sleep (also referred to as &#x201C;blocking&#x201D;)
- the only resource needed to resume execution of a thread is CPU time for the
- owner of a lock that the thread is waiting to acquire. In an unbounded sleep
- (often referred to as simply &#x201C;sleeping&#x201D;) a thread waits for an
- external event or for a condition to become true. In particular, a
- dependency chain of threads in bounded sleeps should always make forward
- progress, since there is always CPU time available. This requires that no
- thread in a bounded sleep is waiting for a lock held by a thread in an
- unbounded sleep. To avoid priority inversions, a thread in a bounded sleep
- lends its priority to the owner of the lock that it is waiting for.</p>
-<p class="Pp">The following primitives perform bounded sleeps: mutexes,
- reader/writer locks and read-mostly locks.</p>
-<p class="Pp">The following primitives perform unbounded sleeps: sleepable
- read-mostly locks, shared/exclusive locks, lockmanager locks, counting
- semaphores, condition variables, and sleep/wakeup.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="General_Principles"><a class="permalink" href="#General_Principles">General
- Principles</a></h2>
-<ul class="Bl-bullet">
- <li>It is an error to do any operation that could result in yielding the
- processor while holding a spin mutex.</li>
- <li>It is an error to do any operation that could result in unbounded sleep
- while holding any primitive from the 'bounded sleep' group. For example,
- it is an error to try to acquire a shared/exclusive lock while holding a
- mutex, or to try to allocate memory with M_WAITOK while holding a
- reader/writer lock.
- <p class="Pp" id="sleep">Note that the lock passed to one of the
- <a class="permalink" href="#sleep"><code class="Fn">sleep</code></a>()
- or <code class="Fn">cv_wait</code>() functions is dropped before the
- thread enters the unbounded sleep and does not violate this rule.</p>
- </li>
- <li>It is an error to do any operation that could result in yielding of the
- processor when running inside an interrupt filter.</li>
- <li>It is an error to do any operation that could result in unbounded sleep
- when running inside an interrupt thread.</li>
-</ul>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Interaction_table"><a class="permalink" href="#Interaction_table">Interaction
- table</a></h2>
-<p class="Pp">The following table shows what you can and can not do while
- holding one of the locking primitives discussed. Note that
- &#x201C;sleep&#x201D; includes
- <a class="permalink" href="#sema_wait"><code class="Fn" id="sema_wait">sema_wait</code></a>(),
- <a class="permalink" href="#sema_timedwait"><code class="Fn" id="sema_timedwait">sema_timedwait</code></a>(),
- any of the <code class="Fn">cv_wait</code>() functions, and any of the
- <code class="Fn">sleep</code>() functions.</p>
-<table class="Bl-column Bd-indent">
- <tr>
- <td><i class="Em"> You want:</i></td>
- <td>spin mtx</td>
- <td>mutex/rw</td>
- <td>rmlock</td>
- <td>sleep rm</td>
- <td>sx/lk</td>
- <td>sleep</td>
- </tr>
- <tr id="You">
- <td><a class="permalink" href="#You"><i class="Em">You have:</i></a></td>
- <td>--------</td>
- <td>--------</td>
- <td>------</td>
- <td>--------</td>
- <td>-----</td>
- <td>------</td>
- </tr>
- <tr>
- <td>spin mtx</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no-1</td>
- </tr>
- <tr>
- <td>mutex/rw</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no-1</td>
- </tr>
- <tr>
- <td>rmlock</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no-1</td>
- </tr>
- <tr>
- <td>sleep rm</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok-2</td>
- <td>ok-2</td>
- <td>ok-2/3</td>
- </tr>
- <tr>
- <td>sx</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok-3</td>
- </tr>
- <tr>
- <td>lockmgr</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- </tr>
-</table>
-<p class="Pp" id="*1"><a class="permalink" href="#*1"><i class="Em">*1</i></a>
- There are calls that atomically release this primitive when going to sleep
- and reacquire it on wakeup
- (<a class="permalink" href="#mtx_sleep"><code class="Fn" id="mtx_sleep">mtx_sleep</code></a>(),
- <a class="permalink" href="#rw_sleep"><code class="Fn" id="rw_sleep">rw_sleep</code></a>(),
- <code class="Fn">msleep_spin</code>(), etc.).</p>
-<p class="Pp" id="*2"><a class="permalink" href="#*2"><i class="Em">*2</i></a>
- These cases are only allowed while holding a write lock on a sleepable
- read-mostly lock.</p>
-<p class="Pp" id="*3"><a class="permalink" href="#*3"><i class="Em">*3</i></a>
- Though one can sleep while holding this lock, one can also use a
- <a class="permalink" href="#sleep~2"><code class="Fn" id="sleep~2">sleep</code></a>()
- function to atomically release this primitive when going to sleep and
- reacquire it on wakeup.</p>
-<p class="Pp">Note that non-blocking try operations on locks are always
- permitted.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Context_mode_table"><a class="permalink" href="#Context_mode_table">Context
- mode table</a></h2>
-<p class="Pp">The next table shows what can be used in different contexts. At
- this time this is a rather easy to remember table.</p>
-<table class="Bl-column Bd-indent">
- <tr id="Context:">
- <td><a class="permalink" href="#Context:"><i class="Em">Context:</i></a></td>
- <td>spin mtx</td>
- <td>mutex/rw</td>
- <td>rmlock</td>
- <td>sleep rm</td>
- <td>sx/lk</td>
- <td>sleep</td>
- </tr>
- <tr>
- <td>interrupt filter:</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- </tr>
- <tr>
- <td>interrupt thread:</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- </tr>
- <tr>
- <td>callout:</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- </tr>
- <tr>
- <td>direct callout:</td>
- <td>ok</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- </tr>
- <tr>
- <td>system call:</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- <td>ok</td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">lockstat(1)</a>, <a class="Xr">witness(4)</a>,
- <a class="Xr">atomic(9)</a>, <a class="Xr">BUS_SETUP_INTR(9)</a>,
- <a class="Xr">callout(9)</a>, <a class="Xr">condvar(9)</a>,
- <a class="Xr">epoch(9)</a>, <a class="Xr">lock(9)</a>,
- <a class="Xr">LOCK_PROFILING(9)</a>, <a class="Xr">mtx_pool(9)</a>,
- <a class="Xr">mutex(9)</a>, <a class="Xr">rmlock(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>,
- <a class="Xr">sleep(9)</a>, <a class="Xr">smr(9)</a>,
- <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">There are too many locking primitives to choose from.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 28, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mac.9 3.html b/static/freebsd/man9/mac.9 3.html
deleted file mode 100644
index 87203490..00000000
--- a/static/freebsd/man9/mac.9 3.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MAC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MAC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mac</code> &#x2014; <span class="Nd">TrustedBSD
- Mandatory Access Control framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mac.h</a>&gt;</code></p>
-<p class="Pp">In the kernel configuration file:
- <br/>
- <code class="Cd">options MAC</code>
- <br/>
- <code class="Cd">options MAC_DEBUG</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Introduction"><a class="permalink" href="#Introduction">Introduction</a></h2>
-<p class="Pp">The TrustedBSD mandatory access control framework permits
- dynamically introduced system security modules to modify system security
- functionality. This can be used to support a variety of new security
- services, including traditional labeled mandatory access control models. The
- framework provides a series of entry points which must be called by code
- supporting various kernel services, especially with respects to access
- control points and object creation. The framework then calls out to security
- modules to offer them the opportunity to modify security behavior at those
- MAC API entry points. Both consumers of the API (normal kernel services) and
- security modules must be aware of the semantics of the API calls,
- particularly with respect to synchronization primitives (such as
- locking).</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Kernel_Objects_Supported_by_the_Framework"><a class="permalink" href="#Kernel_Objects_Supported_by_the_Framework">Kernel
- Objects Supported by the Framework</a></h2>
-<p class="Pp">The MAC framework manages labels on a variety of types of
- in-kernel objects, including process credentials, vnodes, devfs_dirents,
- mount points, sockets, mbufs, bpf descriptors, network interfaces, IP
- fragment queues, and pipes. Label data on kernel objects, represented by
- <var class="Vt">struct label</var>, is policy-unaware, and may be used in
- the manner seen fit by policy modules.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="API_for_Consumers"><a class="permalink" href="#API_for_Consumers">API
- for Consumers</a></h2>
-<p class="Pp">The MAC API provides a large set of entry points, too broad to
- specifically document here. In general, these entry points represent an
- access control check or other MAC-relevant operations, accept one or more
- subjects (credentials) authorizing the activity, a set of objects on which
- the operation is to be performed, and a set of operation arguments providing
- information about the type of operation being requested.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking_for_Consumers"><a class="permalink" href="#Locking_for_Consumers">Locking
- for Consumers</a></h2>
-<p class="Pp">Consumers of the MAC API must be aware of the locking requirements
- for each API entry point: generally, appropriate locks must be held over
- each subject or object being passed into the call, so that MAC modules may
- make use of various aspects of the object for access control purposes. For
- example, vnode locks are frequently required in order that the MAC framework
- and modules may retrieve security labels and attributes from the vnodes for
- the purposes of access control. Similarly, the caller must be aware of the
- reference counting semantics of any subject or object passed into the MAC
- API: all calls require that a valid reference to the object be held for the
- duration of the (potentially lengthy) MAC API call. Under some
- circumstances, objects must be held in either a shared or exclusive
- manner.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="API_for_Module_Writers"><a class="permalink" href="#API_for_Module_Writers">API
- for Module Writers</a></h2>
-<p class="Pp">Each module exports a structure describing the MAC API operations
- that the module chooses to implement, including initialization and
- destruction API entry points, a variety of object creation and destruction
- calls, and a large set of access control check points. In the future,
- additional audit entry points will also be present. Module authors may
- choose to only implement a subset of the entry points, setting API function
- pointers in the description structure to <code class="Dv">NULL</code>,
- permitting the framework to avoid calling into the module.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locking_for_Module_Writers"><a class="permalink" href="#Locking_for_Module_Writers">Locking
- for Module Writers</a></h2>
-<p class="Pp">Module writers must be aware of the locking semantics of entry
- points that they implement: MAC API entry points will have specific locking
- or reference counting semantics for each argument, and modules must follow
- the locking and reference counting protocol or risk a variety of failure
- modes (including race conditions, inappropriate pointer dereferences,
- etc).</p>
-<p class="Pp">MAC module writers must also be aware that MAC API entry points
- will frequently be invoked from deep in a kernel stack, and as such must be
- careful to avoid violating more global locking requirements, such as global
- lock order requirements. For example, it may be inappropriate to lock
- additional objects not specifically maintained and ordered by the policy
- module, or the policy module might violate a global ordering requirement
- relating to those additional objects.</p>
-<p class="Pp">Finally, MAC API module implementors must be careful to avoid
- inappropriately calling back into the MAC framework: the framework makes use
- of locking to prevent inconsistencies during policy module attachment and
- detachment. MAC API modules should avoid producing scenarios in which
- deadlocks or inconsistencies might occur.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Adding_New_MAC_Entry_Points"><a class="permalink" href="#Adding_New_MAC_Entry_Points">Adding
- New MAC Entry Points</a></h2>
-<p class="Pp">The MAC API is intended to be easily expandable as new services
- are added to the kernel. In order that policies may be guaranteed the
- opportunity to ubiquitously protect system subjects and objects, it is
- important that kernel developers maintain awareness of when security checks
- or relevant subject or object operations occur in newly written or modified
- kernel code. New entry points must be carefully documented so as to prevent
- any confusion regarding lock orders and semantics. Introducing new entry
- points requires four distinct pieces of work: introducing new MAC API
- entries reflecting the operation arguments, scattering these MAC API entry
- points throughout the new or modified kernel service, extending the
- front-end implementation of the MAC API framework, and modifying appropriate
- modules to take advantage of the new entry points so that they may
- consistently enforce their policies.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ENTRY_POINTS"><a class="permalink" href="#ENTRY_POINTS">ENTRY
- POINTS</a></h1>
-<p class="Pp">System service and module authors should reference the
- <span class="RsT">FreeBSD Architecture Handbook</span> for information on
- the MAC Framework APIs.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">acl(3)</a>, <a class="Xr">mac(3)</a>,
- <a class="Xr">posix1e(3)</a>, <a class="Xr">mac(4)</a>,
- <a class="Xr">ucred(9)</a>, <a class="Xr">vaccess(9)</a>,
- <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">VFS(9)</a>,
- <a class="Xr">VOP_SETLABEL(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsT">The FreeBSD Architecture
- Handbook</span>,
- <a class="RsU" href="https://docs.freebsd.org/en/books/arch-handbook/">https://docs.freebsd.org/en/books/arch-handbook/</a>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The TrustedBSD MAC Framework first appeared in
- <span class="Ux">FreeBSD 5.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span>. This software was contributed to the
- <span class="Ux">FreeBSD</span> Project by Network Associates Laboratories,
- the Security Research Division of Network Associates Inc. under DARPA/SPAWAR
- contract N66001-01-C-8035 (&#x201C;CBOSS&#x201D;), as part of the DARPA
- CHATS research program.</p>
-<p class="Pp">The TrustedBSD MAC Framework was designed by
- <span class="An">Robert Watson</span>, and implemented by the Network
- Associates Laboratories Network Security (NETSEC), Secure Execution
- Environment (SEE), and Adaptive Network Defense research groups. Network
- Associates Laboratory staff contributing to the CBOSS Project include (in
- alphabetical order): <span class="An">Lee Badger</span>,
- <span class="An">Brian Feldman</span>, <span class="An">Hrishikesh
- Dandekar</span>, <span class="An">Tim Fraser</span>, <span class="An">Doug
- Kilpatrick</span>, <span class="An">Suresh Krishnaswamy</span>,
- <span class="An">Adam Migus</span>, <span class="An">Wayne Morrison</span>,
- <span class="An">Andrew Reisse</span>, <span class="An">Chris Vance</span>,
- and <span class="An">Robert Watson</span>.</p>
-<p class="Pp">Sub-contracted staff include: <span class="An">Chris
- Costello</span>, <span class="An">Poul-Henning Kamp</span>,
- <span class="An">Jonathan Lemon</span>, <span class="An">Kirk
- McKusick</span>, <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>.</p>
-<p class="Pp">Additional contributors include: <span class="An">Pawel
- Dawidek</span>, <span class="An">Chris Faulhaber</span>,
- <span class="An">Ilmar Habibulin</span>, <span class="An">Mike
- Halderman</span>, <span class="An">Bosko Milekic</span>,
- <span class="An">Thomas Moestl</span>, <span class="An">Andrew
- Reiter</span>, and <span class="An">Tim Robbins</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">While the MAC Framework design is intended to support the
- containment of the root user, not all attack channels are currently
- protected by entry point checks. As such, MAC Framework policies should not
- be relied on, in isolation, to protect against a malicious privileged
- user.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 20, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/make_dev.9 4.html b/static/freebsd/man9/make_dev.9 4.html
deleted file mode 100644
index 75599e63..00000000
--- a/static/freebsd/man9/make_dev.9 4.html
+++ /dev/null
@@ -1,415 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MAKE_DEV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MAKE_DEV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">make_dev</code>,
- <code class="Nm">make_dev_cred</code>,
- <code class="Nm">make_dev_credf</code>, <code class="Nm">make_dev_p</code>,
- <code class="Nm">make_dev_s</code>, <code class="Nm">make_dev_alias</code>,
- <code class="Nm">make_dev_alias_p</code>,
- <code class="Nm">destroy_dev</code>,
- <code class="Nm">destroy_dev_sched</code>,
- <code class="Nm">destroy_dev_sched_cb</code>,
- <code class="Nm">destroy_dev_drain</code>,
- <code class="Nm">dev_depends</code> &#x2014; <span class="Nd">create and
- destroy character devices including devfs registration</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/conf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">make_dev_args_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- make_dev_args *args</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">make_dev_s</code>(<var class="Fa" style="white-space: nowrap;">struct
- make_dev_args *args</var>,
- <var class="Fa" style="white-space: nowrap;">struct cdev **cdev</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">make_dev_alias_p</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdev
- **cdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdev
- *pdev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">destroy_dev</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">destroy_dev_sched</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">destroy_dev_sched_cb</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">void
- (*cb)(void *)</var>, <var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">destroy_dev_drain</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdevsw *csw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">dev_depends</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *pdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdev
- *cdev</var>);</p>
-<p class="Pp">LEGACY INTERFACES
- <br/>
- <var class="Ft">struct cdev *</var>
- <br/>
- <code class="Fn">make_dev</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdevsw *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>,
- <var class="Fa" style="white-space: nowrap;">gid_t gid</var>,
- <var class="Fa" style="white-space: nowrap;">int perms</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">struct cdev *</var>
- <br/>
- <code class="Fn">make_dev_cred</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdevsw *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cr</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>,
- <var class="Fa" style="white-space: nowrap;">gid_t gid</var>,
- <var class="Fa" style="white-space: nowrap;">int perms</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">struct cdev *</var>
- <br/>
- <code class="Fn">make_dev_credf</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdevsw
- *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>,
- <var class="Fa" style="white-space: nowrap;">struct ucred *cr</var>,
- <var class="Fa" style="white-space: nowrap;">uid_t uid</var>,
- <var class="Fa" style="white-space: nowrap;">gid_t gid</var>,
- <var class="Fa" style="white-space: nowrap;">int perms</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">make_dev_p</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdev
- **cdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdevsw
- *devsw</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cr</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>,
- <var class="Fa" style="white-space: nowrap;">gid_t gid</var>,
- <var class="Fa" style="white-space: nowrap;">int mode</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">struct cdev *</var>
- <br/>
- <code class="Fn">make_dev_alias</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *pdev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#make_dev_s"><code class="Fn" id="make_dev_s">make_dev_s</code></a>()
- function creates a <var class="Fa">cdev</var> structure for a new device,
- which is returned into the <var class="Fa">cdev</var> argument. It also
- notifies <a class="Xr">devfs(4)</a> of the presence of the new device, that
- causes corresponding nodes to be created. Besides this, a
- <a class="Xr">devctl(4)</a> notification is sent. The function takes the
- structure <var class="Va">struct make_dev_args args</var>, which specifies
- the parameters for the device creation:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent Li">
-<pre>struct make_dev_args {
- size_t mda_size;
- int mda_flags;
- struct cdevsw *mda_devsw;
- struct ucred *mda_cr;
- uid_t mda_uid;
- gid_t mda_gid;
- int mda_mode;
- int mda_unit;
- void *mda_si_drv1;
- void *mda_si_drv2;
-};</pre>
-</div>
-<p class="Pp" id="make_dev_args_init">Before use and filling with the desired
- values, the structure must be initialized by the
- <a class="permalink" href="#make_dev_args_init"><code class="Fn">make_dev_args_init</code></a>()
- function, which ensures that future kernel interface expansion does not
- affect driver source code or binary interface.</p>
-<p class="Pp">The created device will be owned by
- <var class="Va">args.mda_uid</var>, with the group ownership as
- <var class="Va">args.mda_gid</var>. The name is the expansion of
- <var class="Va">fmt</var> and following arguments as
- <a class="Xr">printf(9)</a> would print it. The name determines its path
- under <span class="Pa">/dev</span> or other <a class="Xr">devfs(4)</a> mount
- point and may contain slash &#x2018;<code class="Li">/</code>&#x2019;
- characters to denote subdirectories. The permissions of the file specified
- in <var class="Va">args.mda_mode</var> are defined in
- <code class="In">&lt;<a class="In">sys/stat.h</a>&gt;</code>:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent Li">
-<pre>#define S_IRWXU 0000700 /* RWX mask for owner */
-#define S_IRUSR 0000400 /* R for owner */
-#define S_IWUSR 0000200 /* W for owner */
-#define S_IXUSR 0000100 /* X for owner */
-
-#define S_IRWXG 0000070 /* RWX mask for group */
-#define S_IRGRP 0000040 /* R for group */
-#define S_IWGRP 0000020 /* W for group */
-#define S_IXGRP 0000010 /* X for group */
-
-#define S_IRWXO 0000007 /* RWX mask for other */
-#define S_IROTH 0000004 /* R for other */
-#define S_IWOTH 0000002 /* W for other */
-#define S_IXOTH 0000001 /* X for other */
-
-#define S_ISUID 0004000 /* set user id on execution */
-#define S_ISGID 0002000 /* set group id on execution */
-#define S_ISVTX 0001000 /* sticky bit */
-#ifndef _POSIX_SOURCE
-#define S_ISTXT 0001000
-#endif</pre>
-</div>
-<p class="Pp">The <var class="Va">args.mda_cr</var> argument specifies
- credentials that will be stored in the <var class="Fa">si_cred</var> member
- of the initialized <var class="Fa">struct cdev</var>.</p>
-<p class="Pp" id="make_dev_s~2">The <var class="Va">args.mda_flags</var>
- argument alters the operation of
- <a class="permalink" href="#make_dev_s~2"><code class="Fn">make_dev_s</code></a>().
- The following values are currently accepted:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="MAKEDEV_REF"><a class="permalink" href="#MAKEDEV_REF"><code class="Dv">MAKEDEV_REF</code></a></dt>
- <dd>reference the created device</dd>
- <dt id="MAKEDEV_NOWAIT"><a class="permalink" href="#MAKEDEV_NOWAIT"><code class="Dv">MAKEDEV_NOWAIT</code></a></dt>
- <dd>do not sleep, the call may fail</dd>
- <dt id="MAKEDEV_WAITOK"><a class="permalink" href="#MAKEDEV_WAITOK"><code class="Dv">MAKEDEV_WAITOK</code></a></dt>
- <dd>allow the function to sleep to satisfy malloc</dd>
- <dt id="MAKEDEV_ETERNAL"><a class="permalink" href="#MAKEDEV_ETERNAL"><code class="Dv">MAKEDEV_ETERNAL</code></a></dt>
- <dd>created device will be never destroyed</dd>
- <dt id="MAKEDEV_CHECKNAME"><a class="permalink" href="#MAKEDEV_CHECKNAME"><code class="Dv">MAKEDEV_CHECKNAME</code></a></dt>
- <dd>return an error if the device name is invalid or already exists</dd>
-</dl>
-</div>
-<p class="Pp" id="make_dev_alias_p">Only <code class="Dv">MAKEDEV_NOWAIT</code>,
- <code class="Dv">MAKEDEV_WAITOK</code> and
- <code class="Dv">MAKEDEV_CHECKNAME</code> values are accepted for the
- <a class="permalink" href="#make_dev_alias_p"><code class="Fn">make_dev_alias_p</code></a>()
- function.</p>
-<p class="Pp">The <code class="Dv">MAKEDEV_WAITOK</code> flag is assumed if none
- of <code class="Dv">MAKEDEV_WAITOK</code>,
- <code class="Dv">MAKEDEV_NOWAIT</code> is specified.</p>
-<p class="Pp" id="devfs_lookup">The <a class="Xr">dev_clone(9)</a> event handler
- shall specify the <code class="Dv">MAKEDEV_REF</code> flag when creating a
- device in response to lookup, to avoid a race where the created device is
- immediately destroyed after
- <a class="permalink" href="#devfs_lookup"><code class="Fn">devfs_lookup</code></a>()
- drops its reference to <var class="Fa">cdev</var>.</p>
-<p class="Pp" id="destroy_dev">The <code class="Dv">MAKEDEV_ETERNAL</code> flag
- allows the kernel to not acquire some locks when translating system calls
- into the cdevsw methods calls. It is responsibility of the driver author to
- make sure that
- <a class="permalink" href="#destroy_dev"><code class="Fn">destroy_dev</code></a>()
- is never called on the returned cdev. For the convenience, use the
- <code class="Dv">MAKEDEV_ETERNAL_KLD</code> flag for the code that can be
- compiled into kernel or loaded (and unloaded) as loadable module.</p>
-<p class="Pp">A panic will occur if the
- <code class="Dv">MAKEDEV_CHECKNAME</code> flag is not specified and the
- device name is invalid or already exists.</p>
-<p class="Pp" id="make_dev_p">The
- <a class="permalink" href="#make_dev_p"><code class="Fn">make_dev_p</code></a>()
- use of the form:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct cdev *dev;
-int res;
-res = make_dev_p(flags, &amp;dev, cdevsw, cred, uid, gid, perms, name);</pre>
-</div>
-<p class="Pp">is equivalent to the code:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct cdev *dev;
-struct make_dev_args args;
-int res;
-
-make_dev_args_init(&amp;args);
-args.mda_flags = flags;
-args.mda_devsw = cdevsw;
-args.mda_cr = cred;
-args.mda_uid = uid;
-args.mda_gid = gid;
-args.mda_mode = perms;
-res = make_dev_s(&amp;args, &amp;dev, name);</pre>
-</div>
-<p class="Pp" id="make_dev_credf">Similarly, the
- <a class="permalink" href="#make_dev_credf"><code class="Fn">make_dev_credf</code></a>()
- function call is equivalent to:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>(void) make_dev_s(&amp;args, &amp;dev, name);</pre>
-</div>
-<p class="Pp" id="make_dev_credf~2">In other words,
- <a class="permalink" href="#make_dev_credf~2"><code class="Fn">make_dev_credf</code></a>()
- does not allow the caller to obtain the return value, and in kernels
- compiled with the <var class="Va">INVARIANTS</var> options, the function
- asserts that the device creation succeeded.</p>
-<p class="Pp" id="make_dev_cred">The
- <a class="permalink" href="#make_dev_cred"><code class="Fn">make_dev_cred</code></a>()
- function is equivalent to the call:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>make_dev_credf(0, cdevsw, unit, cr, uid, gid, perms, fmt, ...);</pre>
-</div>
-<p class="Pp" id="make_dev">The
- <a class="permalink" href="#make_dev"><code class="Fn">make_dev</code></a>()
- function call is the same as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>make_dev_credf(0, cdevsw, unit, NULL, uid, gid, perms, fmt, ...);</pre>
-</div>
-<p class="Pp" id="make_dev_alias_p~2">The
- <a class="permalink" href="#make_dev_alias_p~2"><code class="Fn">make_dev_alias_p</code></a>()
- function takes the returned <var class="Ft">cdev</var> from
- <code class="Fn">make_dev</code>() and makes another (aliased) name for this
- device. It is an error to call <code class="Fn">make_dev_alias_p</code>()
- prior to calling <code class="Fn">make_dev</code>().</p>
-<p class="Pp" id="make_dev_alias">The
- <a class="permalink" href="#make_dev_alias"><code class="Fn">make_dev_alias</code></a>()
- function is similar to <code class="Fn">make_dev_alias_p</code>() but it
- returns the resulting aliasing <var class="Ft">*cdev</var> and may not
- return an error.</p>
-<p class="Pp" id="make_dev_s~3">The <var class="Fa">cdev</var> returned by
- <a class="permalink" href="#make_dev_s~3"><code class="Fn">make_dev_s</code></a>()
- and <code class="Fn">make_dev_alias_p</code>() has two fields,
- <var class="Fa">si_drv1</var> and <var class="Fa">si_drv2</var>, that are
- available to store state. Both fields are of type <var class="Ft">void
- *</var>, and can be initialized simultaneously with the
- <var class="Va">cdev</var> allocation by filling
- <var class="Va">args.mda_si_drv1</var> and
- <var class="Va">args.mda_si_drv2</var> members of the
- <code class="Fn">make_dev_s</code>() argument structure, or filled after the
- <var class="Va">cdev</var> is allocated, if using legacy interfaces. In the
- latter case, the driver should handle the race of accessing uninitialized
- <var class="Va">si_drv1</var> and <var class="Va">si_drv2</var> itself.
- These are designed to replace the <var class="Fa">unit</var> argument to
- <code class="Fn">make_dev</code>(), which can be obtained with
- <a class="permalink" href="#dev2unit"><code class="Fn" id="dev2unit">dev2unit</code></a>().</p>
-<p class="Pp" id="destroy_dev~2">The
- <a class="permalink" href="#destroy_dev~2"><code class="Fn">destroy_dev</code></a>()
- function takes the returned <var class="Fa">cdev</var> from
- <code class="Fn">make_dev</code>() and destroys the registration for that
- device. The notification is sent to <a class="Xr">devctl(4)</a> about the
- destruction event. Do not call <code class="Fn">destroy_dev</code>() on
- devices that were created with <code class="Fn">make_dev_alias</code>().</p>
-<p class="Pp" id="dev_depends">The
- <a class="permalink" href="#dev_depends"><code class="Fn">dev_depends</code></a>()
- function establishes a parent-child relationship between two devices. The
- net effect is that a <code class="Fn">destroy_dev</code>() of the parent
- device will also result in the destruction of the child device(s), if any
- exist. A device may simultaneously be a parent and a child, so it is
- possible to build a complete hierarchy.</p>
-<p class="Pp" id="destroy_dev_sched_cb">The
- <a class="permalink" href="#destroy_dev_sched_cb"><code class="Fn">destroy_dev_sched_cb</code></a>()
- function schedules execution of the <code class="Fn">destroy_dev</code>()
- for the specified <var class="Fa">cdev</var> in the safe context. After
- <code class="Fn">destroy_dev</code>() is finished, and if the supplied
- <var class="Fa">cb</var> is not <code class="Dv">NULL</code>, the callback
- <var class="Fa">cb</var> is called, with argument <var class="Fa">arg</var>.
- The <code class="Fn">destroy_dev_sched</code>() function is the same as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>destroy_dev_sched_cb(cdev, NULL, NULL);</pre>
-</div>
-<p class="Pp" id="d_close">Neither the
- <a class="permalink" href="#d_close"><code class="Fn">d_close</code></a>()
- driver method, nor a <a class="Xr">devfs_cdevpriv(9)</a>
- <var class="Fa">dtr</var> method can <code class="Fn">destroy_dev</code>()
- directly. Doing so causes deadlock when
- <code class="Fn">destroy_dev</code>() waits for all threads to leave the
- driver methods and finish executing any per-open destructors. Also, because
- <code class="Fn">destroy_dev</code>() sleeps, no non-sleepable locks may be
- held over the call. The <code class="Fn">destroy_dev_sched</code>() family
- of functions overcome these issues.</p>
-<p class="Pp" id="destroy_dev_drain">The device driver may call the
- <a class="permalink" href="#destroy_dev_drain"><code class="Fn">destroy_dev_drain</code></a>()
- function to wait until all devices that have supplied
- <var class="Fa">csw</var> as cdevsw, are destroyed. This is useful when
- driver knows that
- <a class="permalink" href="#destroy_dev_sched"><code class="Fn" id="destroy_dev_sched">destroy_dev_sched</code></a>()
- is called for all instantiated devices, but need to postpone module unload
- until <code class="Fn">destroy_dev</code>() is actually finished for all of
- them.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, <code class="Fn">make_dev_s</code>() and
- <code class="Fn">make_dev_p</code>() will return 0, otherwise they will
- return an error. If successful, <code class="Fn">make_dev_credf</code>()
- will return a valid <var class="Fa">cdev</var> pointer, otherwise it will
- return <code class="Dv">NULL</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">make_dev_s</code>(),
- <code class="Fn">make_dev_p</code>() and
- <code class="Fn">make_dev_alias_p</code>() calls will fail and the device
- will be not registered if:</p>
-<dl class="Bl-tag">
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The <code class="Dv">MAKEDEV_NOWAIT</code> flag was specified and a memory
- allocation request could not be satisfied.</dd>
- <dt id="ENAMETOOLONG">[<a class="permalink" href="#ENAMETOOLONG"><code class="Er">ENAMETOOLONG</code></a>]</dt>
- <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the
- provided device name is longer than
- <code class="Dv">SPECNAMELEN</code>.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the
- provided device name is empty, contains a &quot;.&quot; or &quot;..&quot;
- path component or ends with
- &#x2018;<code class="Li">/</code>&#x2019;.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the
- provided device name contains invalid characters.</dd>
- <dt id="EEXIST">[<a class="permalink" href="#EEXIST"><code class="Er">EEXIST</code></a>]</dt>
- <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the
- provided device name already exists.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">devctl(4)</a>, <a class="Xr">devfs(4)</a>,
- <a class="Xr">dev_clone(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">make_dev</code>() and
- <code class="Fn">destroy_dev</code>() functions first appeared in
- <span class="Ux">FreeBSD 4.0</span>. The function
- <code class="Fn">make_dev_alias</code>() first appeared in
- <span class="Ux">FreeBSD 4.1</span>. The function
- <code class="Fn">dev_depends</code>() first appeared in
- <span class="Ux">FreeBSD 5.0</span>. The functions
- <code class="Fn">make_dev_credf</code>(),
- <code class="Fn">destroy_dev_sched</code>(),
- <code class="Fn">destroy_dev_sched_cb</code>() first appeared in
- <span class="Ux">FreeBSD 7.0</span>. The function
- <code class="Fn">make_dev_p</code>() first appeared in
- <span class="Ux">FreeBSD 8.2</span>. The function
- <code class="Fn">make_dev_s</code>() first appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 4, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/malloc.9 4.html b/static/freebsd/man9/malloc.9 4.html
deleted file mode 100644
index 2676cb88..00000000
--- a/static/freebsd/man9/malloc.9 4.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MALLOC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MALLOC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">malloc</code>,
- <code class="Nm">mallocarray</code>, <code class="Nm">free</code>,
- <code class="Nm">zfree</code>, <code class="Nm">realloc</code>,
- <code class="Nm">reallocf</code>,
- <code class="Nm">malloc_usable_size</code>,
- <code class="Nm">malloc_aligned</code>, <code class="Nm">malloc_exec</code>,
- <code class="Nm">MALLOC_DECLARE</code>,
- <code class="Nm">MALLOC_DEFINE</code>,
- <code class="Nm">malloc_domainset</code>,
- <code class="Nm">malloc_domainset_aligned</code>,
- <code class="Nm">malloc_domainset_exec</code>,
- <code class="Nm">mallocarray_domainset</code> &#x2014;
- <span class="Nd">kernel memory management routines</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/malloc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc</code>(<var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">mallocarray</code>(<var class="Fa" style="white-space: nowrap;">size_t
- nmemb</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>,
- <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">free</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">zfree</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">realloc</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>,
- <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">reallocf</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>,
- <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">size_t</var>
- <br/>
- <code class="Fn">malloc_usable_size</code>(<var class="Fa" style="white-space: nowrap;">const
- void *addr</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc_aligned</code>(<var class="Fa">size_t size</var>,
- <var class="Fa">size_t align</var>, <var class="Fa">struct malloc_type
- *type</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc_exec</code>(<var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><code class="Fn">MALLOC_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">type</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/malloc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MALLOC_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">type</var>,
- <var class="Fa" style="white-space: nowrap;">shortdesc</var>,
- <var class="Fa" style="white-space: nowrap;">longdesc</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/domainset.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/malloc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc_domainset</code>(<var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>, <var class="Fa" style="white-space: nowrap;">struct domainset
- *ds</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc_domainset_aligned</code>(<var class="Fa">size_t
- size</var>, <var class="Fa">size_t align</var>, <var class="Fa">struct
- malloc_type *type</var>, <var class="Fa">struct domainset *ds</var>,
- <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">malloc_domainset_exec</code>(<var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type
- *type</var>, <var class="Fa" style="white-space: nowrap;">struct domainset
- *ds</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">mallocarray_domainset</code>(<var class="Fa" style="white-space: nowrap;">size_t
- nmemb</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>,
- <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>,
- <var class="Fa" style="white-space: nowrap;">struct domainset *ds</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#malloc"><code class="Fn" id="malloc">malloc</code></a>()
- function allocates uninitialized memory in kernel address space for an
- object whose size is specified by <var class="Fa">size</var>.</p>
-<p class="Pp" id="malloc_domainset">The
- <a class="permalink" href="#malloc_domainset"><code class="Fn">malloc_domainset</code></a>()
- variant allocates memory from a specific <a class="Xr">numa(4)</a> domain
- using the specified domain selection policy. See
- <a class="Xr">domainset(9)</a> for some example policies.</p>
-<p class="Pp" id="malloc_aligned">The
- <a class="permalink" href="#malloc_aligned"><code class="Fn">malloc_aligned</code></a>()
- and
- <a class="permalink" href="#malloc_domainset_aligned"><code class="Fn" id="malloc_domainset_aligned">malloc_domainset_aligned</code></a>()
- variants return allocations aligned as specified by
- <var class="Fa">align</var>, which must be non-zero, a power of two, and
- less than or equal to the page size.</p>
-<p class="Pp" id="malloc_exec">Both
- <a class="permalink" href="#malloc_exec"><code class="Fn">malloc_exec</code></a>()
- and
- <a class="permalink" href="#malloc_domainset_exec"><code class="Fn" id="malloc_domainset_exec">malloc_domainset_exec</code></a>()
- can be used to return executable memory. Not all platforms enforce a
- distinction between executable and non-executable memory.</p>
-<p class="Pp" id="mallocarray">The
- <a class="permalink" href="#mallocarray"><code class="Fn">mallocarray</code></a>()
- function allocates uninitialized memory in kernel address space for an array
- of <var class="Fa">nmemb</var> entries whose size is specified by
- <var class="Fa">size</var>.</p>
-<p class="Pp" id="mallocarray_domainset">The
- <a class="permalink" href="#mallocarray_domainset"><code class="Fn">mallocarray_domainset</code></a>()
- variant allocates memory from a specific <a class="Xr">numa(4)</a> domain
- using the specified domain selection policy. See
- <a class="Xr">domainset(9)</a> for some example policies.</p>
-<p class="Pp" id="free">The
- <a class="permalink" href="#free"><code class="Fn">free</code></a>()
- function releases memory at address <var class="Fa">addr</var> that was
- previously allocated by <code class="Fn">malloc</code>() for re-use. The
- memory is not zeroed. If <var class="Fa">addr</var> is
- <code class="Dv">NULL</code>, then <code class="Fn">free</code>() does
- nothing.</p>
-<p class="Pp" id="free~2">Like
- <a class="permalink" href="#free~2"><code class="Fn">free</code></a>(), the
- <a class="permalink" href="#zfree"><code class="Fn" id="zfree">zfree</code></a>()
- function releases memory at address <var class="Fa">addr</var> that was
- previously allocated by <code class="Fn">malloc</code>() for re-use.
- However, <code class="Fn">zfree</code>() will zero the memory before it is
- released.</p>
-<p class="Pp" id="realloc">The
- <a class="permalink" href="#realloc"><code class="Fn">realloc</code></a>()
- function changes the size of the previously allocated memory referenced by
- <var class="Fa">addr</var> to <var class="Fa">size</var> bytes. The contents
- of the memory are unchanged up to the lesser of the new and old sizes. Note
- that the returned value may differ from <var class="Fa">addr</var>. If the
- requested memory cannot be allocated, <code class="Dv">NULL</code> is
- returned and the memory referenced by <var class="Fa">addr</var> is valid
- and unchanged. If <var class="Fa">addr</var> is
- <code class="Dv">NULL</code>, the <code class="Fn">realloc</code>() function
- behaves identically to <code class="Fn">malloc</code>() for the specified
- size.</p>
-<p class="Pp" id="reallocf">The
- <a class="permalink" href="#reallocf"><code class="Fn">reallocf</code></a>()
- function is identical to <code class="Fn">realloc</code>() except that it
- will free the passed pointer when the requested memory cannot be
- allocated.</p>
-<p class="Pp" id="malloc_usable_size">The
- <a class="permalink" href="#malloc_usable_size"><code class="Fn">malloc_usable_size</code></a>()
- function returns the usable size of the allocation pointed to by
- <var class="Fa">addr</var>. The return value may be larger than the size
- that was requested during allocation.</p>
-<p class="Pp" id="malloc~2">Unlike its standard C library counterpart
- (<a class="Xr">malloc(3)</a>), the kernel version takes two more arguments.
- The <var class="Fa">flags</var> argument further qualifies
- <a class="permalink" href="#malloc~2"><code class="Fn">malloc</code></a>()'s
- operational characteristics as follows:</p>
-<dl class="Bl-tag">
- <dt id="M_ZERO"><a class="permalink" href="#M_ZERO"><code class="Dv">M_ZERO</code></a></dt>
- <dd>Causes the allocated memory to be set to all zeros.</dd>
- <dt id="M_NODUMP"><a class="permalink" href="#M_NODUMP"><code class="Dv">M_NODUMP</code></a></dt>
- <dd>For allocations greater than page size, causes the allocated memory to be
- excluded from kernel core dumps.</dd>
- <dt id="M_NOWAIT"><a class="permalink" href="#M_NOWAIT"><code class="Dv">M_NOWAIT</code></a></dt>
- <dd>Causes <code class="Fn">malloc</code>(),
- <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>()
- to return <code class="Dv">NULL</code> if the request cannot be
- immediately fulfilled due to resource shortage. Note that
- <code class="Dv">M_NOWAIT</code> is required when running in an interrupt
- context.</dd>
- <dt id="M_WAITOK"><a class="permalink" href="#M_WAITOK"><code class="Dv">M_WAITOK</code></a></dt>
- <dd>Indicates that it is OK to wait for resources. If the request cannot be
- immediately fulfilled, the current process is put to sleep to wait for
- resources to be released by other processes. The
- <code class="Fn">malloc</code>(), <code class="Fn">mallocarray</code>(),
- <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>()
- functions cannot return <code class="Dv">NULL</code> if
- <code class="Dv">M_WAITOK</code> is specified. If the multiplication of
- <var class="Fa">nmemb</var> and <var class="Fa">size</var> would cause an
- integer overflow, the <code class="Fn">mallocarray</code>() function
- induces a panic.</dd>
- <dt id="M_USE_RESERVE"><a class="permalink" href="#M_USE_RESERVE"><code class="Dv">M_USE_RESERVE</code></a></dt>
- <dd>Indicates that the system can use its reserve of memory to satisfy the
- request. This option should only be used in combination with
- <code class="Dv">M_NOWAIT</code> when an allocation failure cannot be
- tolerated by the caller without catastrophic effects on the system.</dd>
- <dt id="M_NEVERFREED"><a class="permalink" href="#M_NEVERFREED"><code class="Dv">M_NEVERFREED</code></a></dt>
- <dd>This is an internal flag used by the <a class="Xr">uma(9)</a> allocator
- and should not be used in regular <code class="Fn">malloc</code>()
- invocations. See the description of VM_ALLOC_NOFREE in
- <a class="Xr">vm_page_alloc(9)</a> for more details.</dd>
-</dl>
-<p class="Pp">Exactly one of either <code class="Dv">M_WAITOK</code> or
- <code class="Dv">M_NOWAIT</code> must be specified.</p>
-<p class="Pp">The <var class="Fa">type</var> argument is used to perform
- statistics on memory usage, and for basic sanity checks. It can be used to
- identify multiple allocations. The statistics can be examined by
- &#x2018;vmstat -m&#x2019;.</p>
-<p class="Pp" id="MALLOC_DECLARE">A <var class="Fa">type</var> is defined using
- <var class="Vt">struct malloc_type</var> via the
- <a class="permalink" href="#MALLOC_DECLARE"><code class="Fn">MALLOC_DECLARE</code></a>()
- and <code class="Fn">MALLOC_DEFINE</code>() macros.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>/* sys/something/foo_extern.h */
-
-MALLOC_DECLARE(M_FOOBUF);
-
-/* sys/something/foo_main.c */
-
-MALLOC_DEFINE(M_FOOBUF, &quot;foobuffers&quot;, &quot;Buffers to foo data into the ether&quot;);
-
-/* sys/something/foo_subr.c */
-
-...
-buf = malloc(sizeof(*buf), M_FOOBUF, M_NOWAIT);
-
-</pre>
-</div>
-<p class="Pp" id="MALLOC_DEFINE">In order to use
- <a class="permalink" href="#MALLOC_DEFINE"><code class="Fn">MALLOC_DEFINE</code></a>(),
- one must include
- <code class="In">&lt;<a class="In">sys/param.h</a>&gt;</code> (instead of
- <code class="In">&lt;<a class="In">sys/types.h</a>&gt;</code>) and
- <code class="In">&lt;<a class="In">sys/kernel.h</a>&gt;</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1>
-<p class="Pp"><code class="Fn">malloc</code>(),
- <code class="Fn">realloc</code>() and <code class="Fn">reallocf</code>() may
- not be called from fast interrupts handlers. When called from threaded
- interrupts, <var class="Fa">flags</var> must contain
- <code class="Dv">M_NOWAIT</code>.</p>
-<p class="Pp"><code class="Fn">malloc</code>(),
- <code class="Fn">realloc</code>() and <code class="Fn">reallocf</code>() may
- sleep when called with <code class="Dv">M_WAITOK</code>.
- <code class="Fn">free</code>() never sleeps. However,
- <code class="Fn">malloc</code>(), <code class="Fn">realloc</code>(),
- <code class="Fn">reallocf</code>() and <code class="Fn">free</code>() may
- not be called in a critical section or while holding a spin lock.</p>
-<p class="Pp">Any calls to <code class="Fn">malloc</code>() (even with
- <code class="Dv">M_NOWAIT</code>) or <code class="Fn">free</code>() when
- holding a <a class="Xr">vnode(9)</a> interlock, will cause a LOR (Lock Order
- Reversal) due to the intertwining of VM Objects and Vnodes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The memory allocator allocates memory in chunks that have size a
- power of two for requests up to the size of a page of memory. For larger
- requests, one or more pages is allocated. While it should not be relied
- upon, this information may be useful for optimizing the efficiency of memory
- use.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">malloc</code>(),
- <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>()
- functions return a kernel virtual address that is suitably aligned for
- storage of any type of object, or <code class="Dv">NULL</code> if the
- request could not be satisfied (implying that
- <code class="Dv">M_NOWAIT</code> was set).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-<p class="Pp">A kernel compiled with the <code class="Dv">INVARIANTS</code>
- configuration option attempts to detect memory corruption caused by such
- things as writing outside the allocated area and imbalanced calls to the
- <code class="Fn">malloc</code>() and <code class="Fn">free</code>()
- functions. Failing consistency checks will cause a panic or a system console
- message.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">vmstat(8)</a>,
- <a class="Xr">contigmalloc(9)</a>, <a class="Xr">domainset(9)</a>,
- <a class="Xr">memguard(9)</a>, <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Fn">zfree</code>() first appeared in
- <span class="Ux">FreeBSD 13.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mbchain.9 4.html b/static/freebsd/man9/mbchain.9 4.html
deleted file mode 100644
index 8fec949c..00000000
--- a/static/freebsd/man9/mbchain.9 4.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MBCHAIN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MBCHAIN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mbchain</code>, <code class="Nm">mb_init</code>,
- <code class="Nm">mb_initm</code>, <code class="Nm">mb_done</code>,
- <code class="Nm">mb_detach</code>, <code class="Nm">mb_fixhdr</code>,
- <code class="Nm">mb_reserve</code>, <code class="Nm">mb_put_uint8</code>,
- <code class="Nm">mb_put_uint16be</code>,
- <code class="Nm">mb_put_uint16le</code>,
- <code class="Nm">mb_put_uint32be</code>,
- <code class="Nm">mb_put_uint32le</code>,
- <code class="Nm">mb_put_int64be</code>,
- <code class="Nm">mb_put_int64le</code>, <code class="Nm">mb_put_mem</code>,
- <code class="Nm">mb_put_mbuf</code>, <code class="Nm">mb_put_uio</code>
- &#x2014; <span class="Nd">set of functions to build an mbuf chain from
- various data types</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options LIBMCHAIN</code> <code class="Li">kldload
- libmchain</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mchain.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mb_initm</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mb_done</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">mb_detach</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_fixhdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>);</p>
-<p class="Pp"><var class="Ft">caddr_t</var>
- <br/>
- <code class="Fn">mb_reserve</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uint8</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uint16be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uint16le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uint32be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uint32le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_int64be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_int64le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_mem</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">c_caddr_t
- source</var>, <var class="Fa" style="white-space: nowrap;">int size</var>,
- <var class="Fa" style="white-space: nowrap;">int type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mb_put_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uiop</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions are used to compose mbuf chains from various data
- types. The <var class="Vt">mbchain</var> structure is used as a working
- context and should be initialized with a call to either
- <a class="permalink" href="#mb_init"><code class="Fn" id="mb_init">mb_init</code></a>()
- or
- <a class="permalink" href="#mb_initm"><code class="Fn" id="mb_initm">mb_initm</code></a>().
- It has the following fields:</p>
-<dl class="Bl-tag">
- <dt id="mb_top"><var class="Va">mb_top</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the top of constructed
- mbuf chain.</dd>
- <dt id="mb_cur"><var class="Va">mb_cur</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the currently filled
- mbuf.</dd>
- <dt id="mb_mleft"><var class="Va">mb_mleft</var></dt>
- <dd>(<var class="Vt">int</var>) Number of bytes left in the current mbuf.</dd>
- <dt id="mb_count"><var class="Va">mb_count</var></dt>
- <dd>(<var class="Vt">int</var>) Total number of bytes placed in the mbuf
- chain.</dd>
- <dt id="mb_copy"><var class="Va">mb_copy</var></dt>
- <dd>(<var class="Vt">mb_copy_t *</var>) User-defined function to perform a
- copy into mbuf; useful if any unusual data conversion is necessary.</dd>
- <dt id="mb_udata"><var class="Va">mb_udata</var></dt>
- <dd>(<var class="Vt">void *</var>) User-supplied data which can be used in the
- <var class="Va">mb_copy</var> function.</dd>
-</dl>
-<p class="Pp" id="mb_done"><a class="permalink" href="#mb_done"><code class="Fn">mb_done</code></a>()
- function disposes an mbuf chain pointed to by
- <var class="Fa">mbp-&gt;mb_top</var> field and sets the field to
- <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="mb_detach"><a class="permalink" href="#mb_detach"><code class="Fn">mb_detach</code></a>()
- function returns the value of <var class="Fa">mbp-&gt;mb_top</var> field and
- sets its value to <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="mb_fixhdr"><a class="permalink" href="#mb_fixhdr"><code class="Fn">mb_fixhdr</code></a>()
- recalculates the length of an mbuf chain and updates the
- <var class="Va">m_pkthdr.len</var> field of the first mbuf in the chain. It
- returns the calculated length.</p>
-<p class="Pp" id="mb_reserve"><a class="permalink" href="#mb_reserve"><code class="Fn">mb_reserve</code></a>()
- ensures that the object of the length specified by the
- <var class="Fa">size</var> argument will fit in the current mbuf (mbuf
- allocation is performed if necessary), and advances all pointers as if the
- real data was placed. Returned value will point to the beginning of the
- reserved space. Note that the size of the object should not exceed
- <code class="Dv">MLEN</code> bytes.</p>
-<p class="Pp" id="mb_put_*">All
- <a class="permalink" href="#mb_put_*"><code class="Fn">mb_put_*</code></a>()
- functions perform an actual copy of the data into mbuf chain. Functions
- which have <code class="Cm">le</code> or <code class="Cm">be</code> suffixes
- will perform conversion to the little- or big-endian data formats.</p>
-<p class="Pp" id="mb_put_mem"><a class="permalink" href="#mb_put_mem"><code class="Fn">mb_put_mem</code></a>()
- function copies <var class="Fa">size</var> bytes of data specified by the
- <var class="Fa">source</var> argument to an mbuf chain. The
- <var class="Fa">type</var> argument specifies the method used to perform a
- copy, and can be one of the following:</p>
-<dl class="Bl-tag">
- <dt id="MB_MSYSTEM"><a class="permalink" href="#MB_MSYSTEM"><code class="Dv">MB_MSYSTEM</code></a></dt>
- <dd>Use
- <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>()
- function.</dd>
- <dt id="MB_MUSER"><a class="permalink" href="#MB_MUSER"><code class="Dv">MB_MUSER</code></a></dt>
- <dd>Use <a class="Xr">copyin(9)</a> function.</dd>
- <dt id="MB_MINLINE"><a class="permalink" href="#MB_MINLINE"><code class="Dv">MB_MINLINE</code></a></dt>
- <dd>Use an &#x201C;inline&#x201D; loop which does not call any function.</dd>
- <dt id="MB_MZERO"><a class="permalink" href="#MB_MZERO"><code class="Dv">MB_MZERO</code></a></dt>
- <dd>Do not copy any data, but just fill the destination with zero bytes.</dd>
- <dt id="MB_MCUSTOM"><a class="permalink" href="#MB_MCUSTOM"><code class="Dv">MB_MCUSTOM</code></a></dt>
- <dd>Call function specified by the <var class="Fa">mbp-&gt;mb_copy</var>
- field.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">All <var class="Ft">int</var> functions except
- <code class="Fn">mb_fixhdr</code>() return zero if successful and an error
- code otherwise.</p>
-<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>:
- after failure of any function, an mbuf chain is left in the broken state,
- and only <code class="Fn">mb_done</code>() function can safely be called to
- destroy it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>struct mbchain *mbp;
-struct mbuf *m;
-
-mb_init(mbp);
-mb_put_uint8(mbp, 33);
-mb_put_uint16le(mbp, length);
-m = m_copym(mbp-&gt;mb_top, 0, M_COPYALL, M_WAIT);
-send(m);
-mb_done(mbp);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mbuf(9)</a>, <a class="Xr">mdchain(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Boris
- Popov</span>
- &lt;<a class="Mt" href="mailto:bp@FreeBSD.org">bp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 20, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mbuf.9 4.html b/static/freebsd/man9/mbuf.9 4.html
deleted file mode 100644
index de9adb99..00000000
--- a/static/freebsd/man9/mbuf.9 4.html
+++ /dev/null
@@ -1,1032 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MBUF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MBUF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mbuf</code> &#x2014; <span class="Nd">memory
- management in the kernel IPC subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mbuf.h</a>&gt;</code></p>
-<section class="Ss">
-<h2 class="Ss" id="Mbuf_allocation_macros"><a class="permalink" href="#Mbuf_allocation_macros">Mbuf
- allocation macros</a></h2>
-<p class="Pp"><code class="Fn">MGET</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short
- type</var>);</p>
-<p class="Pp"><code class="Fn">MGETHDR</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short
- type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">MCLGET</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><code class="Fn">MEXTADD</code>(<var class="Fa">struct mbuf
- *mbuf</var>, <var class="Fa">char *buf</var>, <var class="Fa">u_int
- size</var>, <var class="Fa">void (*free)(struct mbuf *)</var>,
- <var class="Fa">void *opt_arg1</var>, <var class="Fa">void *opt_arg2</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int type</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Mbuf_utility_macros"><a class="permalink" href="#Mbuf_utility_macros">Mbuf
- utility macros</a></h2>
-<p class="Pp"><var class="Ft">type</var>
- <br/>
- <code class="Fn">mtod</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>,
- <var class="Fa" style="white-space: nowrap;">type</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">mtodo</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>,
- <var class="Fa" style="white-space: nowrap;">offset</var>);</p>
-<p class="Pp"><code class="Fn">M_ALIGN</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">u_int
- len</var>);</p>
-<p class="Pp"><code class="Fn">MH_ALIGN</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">u_int
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">M_LEADINGSPACE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">M_TRAILINGSPACE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-<p class="Pp"><code class="Fn">M_MOVE_PKTHDR</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *from</var>);</p>
-<p class="Pp"><code class="Fn">M_PREPEND</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><code class="Fn">MCHTYPE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">short
- type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">M_WRITABLE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Mbuf_allocation_functions"><a class="permalink" href="#Mbuf_allocation_functions">Mbuf
- allocation functions</a></h2>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_get</code>(<var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short
- type</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_get2</code>(<var class="Fa" style="white-space: nowrap;">int
- size</var>, <var class="Fa" style="white-space: nowrap;">int how</var>,
- <var class="Fa" style="white-space: nowrap;">short type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_get3</code>(<var class="Fa" style="white-space: nowrap;">int
- size</var>, <var class="Fa" style="white-space: nowrap;">int how</var>,
- <var class="Fa" style="white-space: nowrap;">short type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_getm</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *orig</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>,
- <var class="Fa" style="white-space: nowrap;">short type</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_getjcl</code>(<var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_getcl</code>(<var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short type</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_gethdr</code>(<var class="Fa" style="white-space: nowrap;">int
- how</var>, <var class="Fa" style="white-space: nowrap;">short
- type</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_freem</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Mbuf_utility_functions"><a class="permalink" href="#Mbuf_utility_functions">Mbuf
- utility functions</a></h2>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_adj</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_align</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">m_append</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">c_caddr_t
- cp</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_prepend</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_copyup</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">int
- dstoff</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_pullup</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_pulldown</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int *offsetp</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_copym</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_copypacket</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_dup</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_copydata</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">caddr_t buf</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_copyback</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">caddr_t buf</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_devget</code>(<var class="Fa">char *buf</var>,
- <var class="Fa">int len</var>, <var class="Fa">int offset</var>,
- <var class="Fa">struct ifnet *ifp</var>, <var class="Fa">void (*copy)(char
- *from, caddr_t to, u_int len)</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_cat</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *n</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_catpkt</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *n</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">m_fixhdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">m_dup_pkthdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">const struct
- mbuf *from</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_move_pkthdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *from</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">m_length</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- **last</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_split</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">m_apply</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- off</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int (*f)(void *arg, void *data,
- u_int len)</var>, <var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_getptr</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int
- loc</var>, <var class="Fa" style="white-space: nowrap;">int *off</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_defrag</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_collapse</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int how</var>,
- <var class="Fa" style="white-space: nowrap;">int maxfrags</var>);</p>
-<p class="Pp"><var class="Ft">struct mbuf *</var>
- <br/>
- <code class="Fn">m_unshare</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">An <var class="Vt">mbuf</var> is a basic unit of memory management
- in the kernel IPC subsystem. Network packets and socket buffers are stored
- in <var class="Vt">mbufs</var>. A network packet may span multiple
- <var class="Vt">mbufs</var> arranged into a <var class="Vt">mbuf chain</var>
- (linked list), which allows adding or trimming network headers with little
- overhead.</p>
-<p class="Pp">While a developer should not bother with
- <var class="Vt">mbuf</var> internals without serious reason in order to
- avoid incompatibilities with future changes, it is useful to understand the
- general structure of an <var class="Vt">mbuf</var>.</p>
-<p class="Pp">An <var class="Vt">mbuf</var> consists of a variable-sized header
- and a small internal buffer for data. The total size of an
- <var class="Vt">mbuf</var>, <code class="Dv">MSIZE</code>, is a constant
- defined in <code class="In">&lt;<a class="In">sys/param.h</a>&gt;</code>.
- The <var class="Vt">mbuf</var> header includes:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="m_next"><var class="Va">m_next</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the next
- <var class="Vt">mbuf</var> in the <var class="Vt">mbuf chain</var>.</dd>
- <dt id="m_nextpkt"><var class="Va">m_nextpkt</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the next
- <var class="Vt">mbuf chain</var> in the queue.</dd>
- <dt id="m_data"><var class="Va">m_data</var></dt>
- <dd>(<var class="Vt">caddr_t</var>) A pointer to data attached to this
- <var class="Vt">mbuf</var>.</dd>
- <dt id="m_len"><var class="Va">m_len</var></dt>
- <dd>(<var class="Vt">int</var>) The length of the data.</dd>
- <dt id="m_type"><var class="Va">m_type</var></dt>
- <dd>(<var class="Vt">short</var>) The type of the data.</dd>
- <dt id="m_flags"><var class="Va">m_flags</var></dt>
- <dd>(<var class="Vt">int</var>) The <var class="Vt">mbuf</var> flags.</dd>
-</dl>
-</div>
-<p class="Pp">The <var class="Vt">mbuf</var> flag bits are defined as
- follows:</p>
-<div class="Bd Pp Li">
-<pre>#define M_EXT 0x00000001 /* has associated external storage */
-#define M_PKTHDR 0x00000002 /* start of record */
-#define M_EOR 0x00000004 /* end of record */
-#define M_RDONLY 0x00000008 /* associated data marked read-only */
-#define M_BCAST 0x00000010 /* send/received as link-level broadcast */
-#define M_MCAST 0x00000020 /* send/received as link-level multicast */
-#define M_PROMISC 0x00000040 /* packet was not for us */
-#define M_VLANTAG 0x00000080 /* ether_vtag is valid */
-#define M_EXTPG 0x00000100 /* has array of unmapped pages and TLS */
-#define M_NOFREE 0x00000200 /* do not free mbuf, embedded in cluster */
-#define M_TSTMP 0x00000400 /* rcv_tstmp field is valid */
-#define M_TSTMP_HPREC 0x00000800 /* rcv_tstmp is high-prec, typically
- hw-stamped on port (useful for IEEE 1588
- and 802.1AS) */
-
-#define M_PROTO1 0x00001000 /* protocol-specific */
-#define M_PROTO2 0x00002000 /* protocol-specific */
-#define M_PROTO3 0x00004000 /* protocol-specific */
-#define M_PROTO4 0x00008000 /* protocol-specific */
-#define M_PROTO5 0x00010000 /* protocol-specific */
-#define M_PROTO6 0x00020000 /* protocol-specific */
-#define M_PROTO7 0x00040000 /* protocol-specific */
-#define M_PROTO8 0x00080000 /* protocol-specific */
-#define M_PROTO9 0x00100000 /* protocol-specific */
-#define M_PROTO10 0x00200000 /* protocol-specific */
-#define M_PROTO11 0x00400000 /* protocol-specific */
-#define M_PROTO12 0x00800000 /* protocol-specific */</pre>
-</div>
-<p class="Pp">The available <var class="Vt">mbuf</var> types are defined as
- follows:</p>
-<div class="Bd Pp Li">
-<pre>#define MT_DATA 1 /* dynamic (data) allocation */
-#define MT_HEADER MT_DATA /* packet header */
-
-#define MT_VENDOR1 4 /* for vendor-internal use */
-#define MT_VENDOR2 5 /* for vendor-internal use */
-#define MT_VENDOR3 6 /* for vendor-internal use */
-#define MT_VENDOR4 7 /* for vendor-internal use */
-
-#define MT_SONAME 8 /* socket name */
-
-#define MT_EXP1 9 /* for experimental use */
-#define MT_EXP2 10 /* for experimental use */
-#define MT_EXP3 11 /* for experimental use */
-#define MT_EXP4 12 /* for experimental use */
-
-#define MT_CONTROL 14 /* extra-data protocol message */
-#define MT_EXTCONTROL 15 /* control message with externalized contents */
-#define MT_OOBDATA 16 /* expedited data */</pre>
-</div>
-<p class="Pp">The available external buffer types are defined as follows:</p>
-<div class="Bd Pp Li">
-<pre>#define EXT_CLUSTER 1 /* mbuf cluster */
-#define EXT_SFBUF 2 /* sendfile(2)'s sf_bufs */
-#define EXT_JUMBOP 3 /* jumbo cluster 4096 bytes */
-#define EXT_JUMBO9 4 /* jumbo cluster 9216 bytes */
-#define EXT_JUMBO16 5 /* jumbo cluster 16184 bytes */
-#define EXT_PACKET 6 /* mbuf+cluster from packet zone */
-#define EXT_MBUF 7 /* external mbuf reference */
-#define EXT_RXRING 8 /* data in NIC receive ring */
-#define EXT_PGS 9 /* array of unmapped pages */
-
-#define EXT_VENDOR1 224 /* for vendor-internal use */
-#define EXT_VENDOR2 225 /* for vendor-internal use */
-#define EXT_VENDOR3 226 /* for vendor-internal use */
-#define EXT_VENDOR4 227 /* for vendor-internal use */
-
-#define EXT_EXP1 244 /* for experimental use */
-#define EXT_EXP2 245 /* for experimental use */
-#define EXT_EXP3 246 /* for experimental use */
-#define EXT_EXP4 247 /* for experimental use */
-
-#define EXT_NET_DRV 252 /* custom ext_buf provided by net driver(s) */
-#define EXT_MOD_TYPE 253 /* custom module's ext_buf type */
-#define EXT_DISPOSABLE 254 /* can throw this buffer away w/page flipping */
-#define EXT_EXTREF 255 /* has externally maintained ref_cnt ptr */</pre>
-</div>
-<p class="Pp">If the <code class="Dv">M_PKTHDR</code> flag is set, a
- <var class="Vt">struct pkthdr</var> <var class="Va">m_pkthdr</var> is added
- to the <var class="Vt">mbuf</var> header. It contains a pointer to the
- interface the packet has been received from (<var class="Vt">struct
- ifnet</var> <var class="Va">*rcvif</var>), and the total packet length
- (<var class="Vt">int</var> <var class="Va">len</var>). Optionally, it may
- also contain an attached list of packet tags (<var class="Vt">struct
- m_tag</var>). See <a class="Xr">mbuf_tags(9)</a> for details. Fields used in
- offloading checksum calculation to the hardware are kept in
- <var class="Va">m_pkthdr</var> as well. See
- <a class="Sx" href="#HARDWARE_ASSISTED_CHECKSUM_CALCULATION">HARDWARE-ASSISTED
- CHECKSUM CALCULATION</a> for details.</p>
-<p class="Pp">If small enough, data is stored in the internal data buffer of an
- <var class="Vt">mbuf</var>. If the data is sufficiently large, another
- <var class="Vt">mbuf</var> may be added to the <var class="Vt">mbuf
- chain</var>, or external storage may be associated with the
- <var class="Vt">mbuf</var>. <code class="Dv">MHLEN</code> bytes of data can
- fit into an <var class="Vt">mbuf</var> with the
- <code class="Dv">M_PKTHDR</code> flag set, <code class="Dv">MLEN</code>
- bytes can otherwise.</p>
-<p class="Pp">If external storage is being associated with an
- <var class="Vt">mbuf</var>, the <var class="Va">m_ext</var> header is added
- at the cost of losing the internal data buffer. It includes a pointer to
- external storage, the size of the storage, a pointer to a function used for
- freeing the storage, a pointer to an optional argument that can be passed to
- the function, and a pointer to a reference counter. An
- <var class="Vt">mbuf</var> using external storage has the
- <code class="Dv">M_EXT</code> flag set.</p>
-<p class="Pp">The system supplies a macro for allocating the desired external
- storage buffer, <code class="Dv">MEXTADD</code>.</p>
-<p class="Pp">The allocation and management of the reference counter is handled
- by the subsystem.</p>
-<p class="Pp">The system also supplies a default type of external storage buffer
- called an <var class="Vt">mbuf cluster</var>. <var class="Vt">Mbuf
- clusters</var> can be allocated and configured with the use of the
- <code class="Dv">MCLGET</code> macro. Each <var class="Vt">mbuf
- cluster</var> is <code class="Dv">MCLBYTES</code> in size, where MCLBYTES is
- a machine-dependent constant. The system defines an advisory macro
- <code class="Dv">MINCLSIZE</code>, which is the smallest amount of data to
- put into an <var class="Vt">mbuf cluster</var>. It is equal to
- <code class="Dv">MHLEN</code> plus one. It is typically preferable to store
- data into the data region of an <var class="Vt">mbuf</var>, if size permits,
- as opposed to allocating a separate <var class="Vt">mbuf cluster</var> to
- hold the same data.</p>
-<section class="Ss">
-<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros
- and Functions</a></h2>
-<p class="Pp">There are numerous predefined macros and functions that provide
- the developer with common utilities.</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="mtod"><a class="permalink" href="#mtod"><code class="Fn">mtod</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">type</var>)</dt>
- <dd>Convert an <var class="Fa">mbuf</var> pointer to a data pointer. The macro
- expands to the data pointer cast to the specified
- <var class="Fa">type</var>. <b class="Sy">Note</b>: It is advisable to
- ensure that there is enough contiguous data in <var class="Fa">mbuf</var>.
- See
- <a class="permalink" href="#m_pullup"><code class="Fn" id="m_pullup">m_pullup</code></a>()
- for details.</dd>
- <dt id="mtodo"><a class="permalink" href="#mtodo"><code class="Fn">mtodo</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">offset</var>)</dt>
- <dd>Return a data pointer at an offset (in bytes) into the data attached to
- <var class="Fa">mbuf</var>. Returns a <var class="Ft">void *</var> pointer
- . <b class="Sy">Note</b>: The caller must ensure that the offset is in
- bounds of the attached data.</dd>
- <dt><code class="Fn">MGET</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">how</var>, <var class="Fa">type</var>)</dt>
- <dd>Allocate an <var class="Vt">mbuf</var> and initialize it to contain
- internal data. <var class="Fa">mbuf</var> will point to the allocated
- <var class="Vt">mbuf</var> on success, or be set to
- <code class="Dv">NULL</code> on failure. The <var class="Fa">how</var>
- argument is to be set to <code class="Dv">M_WAITOK</code> or
- <code class="Dv">M_NOWAIT</code>. It specifies whether the caller is
- willing to block if necessary. A number of other functions and macros
- related to <var class="Vt">mbufs</var> have the same argument because they
- may at some point need to allocate new <var class="Vt">mbufs</var>.</dd>
- <dt id="MGETHDR"><a class="permalink" href="#MGETHDR"><code class="Fn">MGETHDR</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">how</var>, <var class="Fa">type</var>)</dt>
- <dd>Allocate an <var class="Vt">mbuf</var> and initialize it to contain a
- packet header and internal data. See <code class="Fn">MGET</code>() for
- details.</dd>
- <dt id="MEXTADD"><a class="permalink" href="#MEXTADD"><code class="Fn">MEXTADD</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">buf</var>, <var class="Fa">size</var>,
- <var class="Fa">free</var>, <var class="Fa">opt_arg1</var>,
- <var class="Fa">opt_arg2</var>, <var class="Fa">flags</var>,
- <var class="Fa">type</var>)</dt>
- <dd>Associate externally managed data with <var class="Fa">mbuf</var>. Any
- internal data contained in the mbuf will be discarded, and the
- <code class="Dv">M_EXT</code> flag will be set. The
- <var class="Fa">buf</var> and <var class="Fa">size</var> arguments are the
- address and length, respectively, of the data. The
- <var class="Fa">free</var> argument points to a function which will be
- called to free the data when the mbuf is freed; it is only used if
- <var class="Fa">type</var> is <code class="Dv">EXT_EXTREF</code>. The
- <var class="Fa">opt_arg1</var> and <var class="Fa">opt_arg2</var>
- arguments will be saved in <var class="Va">ext_arg1</var> and
- <var class="Va">ext_arg2</var> fields of the <var class="Va">struct
- m_ext</var> of the mbuf. The <var class="Fa">flags</var> argument
- specifies additional <var class="Vt">mbuf</var> flags; it is not necessary
- to specify <code class="Dv">M_EXT</code>. Finally, the
- <var class="Fa">type</var> argument specifies the type of external data,
- which controls how it will be disposed of when the
- <var class="Vt">mbuf</var> is freed. In most cases, the correct value is
- <code class="Dv">EXT_EXTREF</code>.</dd>
- <dt id="MCLGET"><a class="permalink" href="#MCLGET"><code class="Fn">MCLGET</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Allocate and attach an <var class="Vt">mbuf cluster</var> to
- <var class="Fa">mbuf</var>. On success, a non-zero value returned;
- otherwise, 0. Historically, consumers would check for success by testing
- the <code class="Dv">M_EXT</code> flag on the mbuf, but this is now
- discouraged to avoid unnecessary awareness of the implementation of
- external storage in protocol stacks and device drivers.</dd>
- <dt id="M_ALIGN"><a class="permalink" href="#M_ALIGN"><code class="Fn">M_ALIGN</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>)</dt>
- <dd>Set the pointer <var class="Fa">mbuf-&gt;m_data</var> to place an object
- of the size <var class="Fa">len</var> at the end of the internal data area
- of <var class="Fa">mbuf</var>, long word aligned. Applicable only if
- <var class="Fa">mbuf</var> is newly allocated with
- <code class="Fn">MGET</code>() or <code class="Fn">m_get</code>().</dd>
- <dt id="MH_ALIGN"><a class="permalink" href="#MH_ALIGN"><code class="Fn">MH_ALIGN</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>)</dt>
- <dd>Serves the same purpose as <code class="Fn">M_ALIGN</code>() does, but
- only for <var class="Fa">mbuf</var> newly allocated with
- <code class="Fn">MGETHDR</code>() or <code class="Fn">m_gethdr</code>(),
- or initialized by
- <a class="permalink" href="#m_dup_pkthdr"><code class="Fn" id="m_dup_pkthdr">m_dup_pkthdr</code></a>()
- or
- <a class="permalink" href="#m_move_pkthdr"><code class="Fn" id="m_move_pkthdr">m_move_pkthdr</code></a>().</dd>
- <dt id="m_align"><a class="permalink" href="#m_align"><code class="Fn">m_align</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>)</dt>
- <dd>Services the same purpose as <code class="Fn">M_ALIGN</code>() but handles
- any type of mbuf.</dd>
- <dt id="M_LEADINGSPACE"><a class="permalink" href="#M_LEADINGSPACE"><code class="Fn">M_LEADINGSPACE</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Returns the number of bytes available before the beginning of data in
- <var class="Fa">mbuf</var>.</dd>
- <dt id="M_TRAILINGSPACE"><a class="permalink" href="#M_TRAILINGSPACE"><code class="Fn">M_TRAILINGSPACE</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Returns the number of bytes available after the end of data in
- <var class="Fa">mbuf</var>.</dd>
- <dt id="M_PREPEND"><a class="permalink" href="#M_PREPEND"><code class="Fn">M_PREPEND</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>, <var class="Fa">how</var>)</dt>
- <dd>This macro operates on an <var class="Vt">mbuf chain</var>. It is an
- optimized wrapper for <code class="Fn">m_prepend</code>() that can make
- use of possible empty space before data (e.g. left after trimming of a
- link-layer header). The new <var class="Vt">mbuf chain</var> pointer or
- <code class="Dv">NULL</code> is in <var class="Fa">mbuf</var> after the
- call.</dd>
- <dt id="M_MOVE_PKTHDR"><a class="permalink" href="#M_MOVE_PKTHDR"><code class="Fn">M_MOVE_PKTHDR</code></a>(<var class="Fa">to</var>,
- <var class="Fa">from</var>)</dt>
- <dd>Using this macro is equivalent to calling
- <code class="Fn">m_move_pkthdr</code>(<var class="Fa">to</var>,
- <var class="Fa">from</var>).</dd>
- <dt id="M_WRITABLE"><a class="permalink" href="#M_WRITABLE"><code class="Fn">M_WRITABLE</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>This macro will evaluate true if <var class="Fa">mbuf</var> is not marked
- <code class="Dv">M_RDONLY</code> and if either <var class="Fa">mbuf</var>
- does not contain external storage or, if it does, then if the reference
- count of the storage is not greater than 1. The
- <code class="Dv">M_RDONLY</code> flag can be set in
- <var class="Fa">mbuf-&gt;m_flags</var>. This can be achieved during setup
- of the external storage, by passing the <code class="Dv">M_RDONLY</code>
- bit as a <var class="Fa">flags</var> argument to the
- <code class="Fn">MEXTADD</code>() macro, or can be directly set in
- individual <var class="Vt">mbufs</var>.</dd>
- <dt id="MCHTYPE"><a class="permalink" href="#MCHTYPE"><code class="Fn">MCHTYPE</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">type</var>)</dt>
- <dd>Change the type of <var class="Fa">mbuf</var> to
- <var class="Fa">type</var>. This is a relatively expensive operation and
- should be avoided.</dd>
-</dl>
-<p class="Pp">The functions are:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="m_get"><a class="permalink" href="#m_get"><code class="Fn">m_get</code></a>(<var class="Fa">how</var>,
- <var class="Fa">type</var>)</dt>
- <dd>A function version of
- <a class="permalink" href="#MGET"><code class="Fn" id="MGET">MGET</code></a>()
- for non-critical paths.</dd>
- <dt id="m_get2"><a class="permalink" href="#m_get2"><code class="Fn">m_get2</code></a>(<var class="Fa">size</var>,
- <var class="Fa">how</var>, <var class="Fa">type</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Allocate an <var class="Vt">mbuf</var> with enough space to hold specified
- amount of data. If the size is larger than
- <code class="Dv">MJUMPAGESIZE</code>, <code class="Dv">NULL</code> will be
- returned.</dd>
- <dt id="m_get3"><a class="permalink" href="#m_get3"><code class="Fn">m_get3</code></a>(<var class="Fa">size</var>,
- <var class="Fa">how</var>, <var class="Fa">type</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Allocate an <var class="Vt">mbuf</var> with enough space to hold specified
- amount of data. If the size is larger than <code class="Dv">MJUM16BYTES,
- NULL</code> will be returned.</dd>
- <dt id="m_getm"><a class="permalink" href="#m_getm"><code class="Fn">m_getm</code></a>(<var class="Fa">orig</var>,
- <var class="Fa">len</var>, <var class="Fa">how</var>,
- <var class="Fa">type</var>)</dt>
- <dd>Allocate <var class="Fa">len</var> bytes worth of
- <var class="Vt">mbufs</var> and <var class="Vt">mbuf clusters</var> if
- necessary and append the resulting allocated <var class="Vt">mbuf
- chain</var> to the <var class="Vt">mbuf chain</var>
- <var class="Fa">orig</var>, if it is
- <span class="No">non-</span><code class="Dv">NULL</code>. If the
- allocation fails at any point, free whatever was allocated and return
- <code class="Dv">NULL</code>. If <var class="Fa">orig</var> is
- <span class="No">non-</span><code class="Dv">NULL</code>, it will not be
- freed. It is possible to use <code class="Fn">m_getm</code>() to either
- append <var class="Fa">len</var> bytes to an existing
- <var class="Vt">mbuf</var> or <var class="Vt">mbuf chain</var> (for
- example, one which may be sitting in a pre-allocated ring) or to simply
- perform an all-or-nothing <var class="Vt">mbuf</var> and
- <var class="Vt">mbuf cluster</var> allocation.</dd>
- <dt id="m_gethdr"><a class="permalink" href="#m_gethdr"><code class="Fn">m_gethdr</code></a>(<var class="Fa">how</var>,
- <var class="Fa">type</var>)</dt>
- <dd>A function version of <code class="Fn">MGETHDR</code>() for non-critical
- paths.</dd>
- <dt id="m_getcl"><a class="permalink" href="#m_getcl"><code class="Fn">m_getcl</code></a>(<var class="Fa">how</var>,
- <var class="Fa">type</var>, <var class="Fa">flags</var>)</dt>
- <dd>Fetch an <var class="Vt">mbuf</var> with a <var class="Vt">mbuf
- cluster</var> attached to it. If one of the allocations fails, the entire
- allocation fails. This routine is the preferred way of fetching both the
- <var class="Vt">mbuf</var> and <var class="Vt">mbuf cluster</var>
- together, as it avoids having to unlock/relock between allocations.
- Returns <code class="Dv">NULL</code> on failure.</dd>
- <dt id="m_getjcl"><a class="permalink" href="#m_getjcl"><code class="Fn">m_getjcl</code></a>(<var class="Fa">how</var>,
- <var class="Fa">type</var>, <var class="Fa">flags</var>,
- <var class="Fa">size</var>)</dt>
- <dd>This is like <code class="Fn">m_getcl</code>() but the specified
- <var class="Fa">size</var> of the cluster to be allocated must be one of
- <code class="Dv">MCLBYTES</code>, <code class="Dv">MJUMPAGESIZE</code>,
- <code class="Dv">MJUM9BYTES</code>, or
- <code class="Dv">MJUM16BYTES</code>.</dd>
- <dt id="m_free"><a class="permalink" href="#m_free"><code class="Fn">m_free</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Frees <var class="Vt">mbuf</var>. Returns <var class="Va">m_next</var> of
- the freed <var class="Vt">mbuf</var>.</dd>
-</dl>
-<p class="Pp">The functions below operate on <var class="Vt">mbuf
- chains</var>.</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="m_freem"><a class="permalink" href="#m_freem"><code class="Fn">m_freem</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Free an entire <var class="Vt">mbuf chain</var>, including any external
- storage.</dd>
- <dt id="m_adj"><a class="permalink" href="#m_adj"><code class="Fn">m_adj</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>)</dt>
- <dd>Trim <var class="Fa">len</var> bytes from the head of an
- <var class="Vt">mbuf chain</var> if <var class="Fa">len</var> is positive,
- from the tail otherwise.</dd>
- <dt id="m_append"><a class="permalink" href="#m_append"><code class="Fn">m_append</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>, <var class="Fa">cp</var>)</dt>
- <dd>Append <var class="Vt">len</var> bytes of data <var class="Vt">cp</var> to
- the <var class="Vt">mbuf chain</var>. Extend the mbuf chain if the new
- data does not fit in existing space.</dd>
- <dt id="m_prepend"><a class="permalink" href="#m_prepend"><code class="Fn">m_prepend</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>, <var class="Fa">how</var>)</dt>
- <dd>Allocate a new <var class="Vt">mbuf</var> and prepend it to the
- <var class="Vt">mbuf chain</var>, handle <code class="Dv">M_PKTHDR</code>
- properly. <b class="Sy">Note</b>: It does not allocate any
- <var class="Vt">mbuf clusters</var>, so <var class="Fa">len</var> must be
- less than <code class="Dv">MLEN</code> or <code class="Dv">MHLEN</code>,
- depending on the <code class="Dv">M_PKTHDR</code> flag setting.</dd>
- <dt id="m_copyup"><a class="permalink" href="#m_copyup"><code class="Fn">m_copyup</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>, <var class="Fa">dstoff</var>)</dt>
- <dd>Similar to <code class="Fn">m_pullup</code>() but copies
- <var class="Fa">len</var> bytes of data into a new mbuf at
- <var class="Fa">dstoff</var> bytes into the mbuf. The
- <var class="Fa">dstoff</var> argument aligns the data and leaves room for
- a link layer header. Returns the new <var class="Vt">mbuf chain</var> on
- success, and frees the <var class="Vt">mbuf chain</var> and returns
- <code class="Dv">NULL</code> on failure. <b class="Sy">Note</b>: The
- function does not allocate <var class="Vt">mbuf clusters</var>, so
- <var class="Fa">len + dstoff</var> must be less than
- <code class="Dv">MHLEN</code>.</dd>
- <dt><code class="Fn">m_pullup</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>)</dt>
- <dd>Arrange that the first <var class="Fa">len</var> bytes of an
- <var class="Vt">mbuf chain</var> are contiguous and lay in the data area
- of <var class="Fa">mbuf</var>, so they are accessible with
- <code class="Fn">mtod</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">type</var>). It is important to remember that this may
- involve reallocating some mbufs and moving data so all pointers
- referencing data within the old mbuf chain must be recalculated or made
- invalid. Return the new <var class="Vt">mbuf chain</var> on success,
- <code class="Dv">NULL</code> on failure (the <var class="Vt">mbuf
- chain</var> is freed in this case). <b class="Sy">Note</b>: It does not
- allocate any <var class="Vt">mbuf clusters</var>, so
- <var class="Fa">len</var> must be less than or equal to
- <code class="Dv">MHLEN</code>.</dd>
- <dt id="m_pulldown"><a class="permalink" href="#m_pulldown"><code class="Fn">m_pulldown</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">offset</var>, <var class="Fa">len</var>,
- <var class="Fa">offsetp</var>)</dt>
- <dd>Arrange that <var class="Fa">len</var> bytes between
- <var class="Fa">offset</var> and <var class="Fa">offset + len</var> in the
- <var class="Vt">mbuf chain</var> are contiguous and lay in the data area
- of <var class="Fa">mbuf</var>, so they are accessible with
- <code class="Fn">mtod</code>() or <code class="Fn">mtodo</code>().
- <var class="Fa">len</var> must be smaller than, or equal to, the size of
- an <var class="Vt">mbuf cluster</var>. Return a pointer to an intermediate
- <var class="Vt">mbuf</var> in the chain containing the requested region;
- the offset in the data region of the <var class="Vt">mbuf chain</var> to
- the data contained in the returned mbuf is stored in
- <var class="Fa">*offsetp</var>. If <var class="Fa">offsetp</var> is NULL,
- the region may be accessed using
- <code class="Fn">mtod</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">type</var>) or
- <code class="Fn">mtodo</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">0</var>). If <var class="Fa">offsetp</var> is non-NULL,
- the region may be accessed using
- <code class="Fn">mtodo</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">*offsetp</var>). The region of the mbuf chain between its
- beginning and <var class="Fa">offset</var> is not modified, therefore it
- is safe to hold pointers to data within this region before calling
- <code class="Fn">m_pulldown</code>().</dd>
- <dt id="m_copym"><a class="permalink" href="#m_copym"><code class="Fn">m_copym</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">offset</var>, <var class="Fa">len</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Make a copy of an <var class="Vt">mbuf chain</var> starting
- <var class="Fa">offset</var> bytes from the beginning, continuing for
- <var class="Fa">len</var> bytes. If <var class="Fa">len</var> is
- <code class="Dv">M_COPYALL</code>, copy to the end of the
- <var class="Vt">mbuf chain</var>. <b class="Sy">Note</b>: The copy is
- read-only, because the <var class="Vt">mbuf clusters</var> are not copied,
- only their reference counts are incremented.</dd>
- <dt id="m_copypacket"><a class="permalink" href="#m_copypacket"><code class="Fn">m_copypacket</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Copy an entire packet including header, which must be present. This is an
- optimized version of the common case
- <code class="Fn">m_copym</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">0</var>, <var class="Fa">M_COPYALL</var>,
- <var class="Fa">how</var>). <b class="Sy">Note</b>: the copy is read-only,
- because the <var class="Vt">mbuf clusters</var> are not copied, only their
- reference counts are incremented.</dd>
- <dt id="m_dup"><a class="permalink" href="#m_dup"><code class="Fn">m_dup</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Copy a packet header <var class="Vt">mbuf chain</var> into a completely
- new <var class="Vt">mbuf chain</var>, including copying any
- <var class="Vt">mbuf clusters</var>. Use this instead of
- <code class="Fn">m_copypacket</code>() when you need a writable copy of an
- <var class="Vt">mbuf chain</var>.</dd>
- <dt id="m_copydata"><a class="permalink" href="#m_copydata"><code class="Fn">m_copydata</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">offset</var>, <var class="Fa">len</var>,
- <var class="Fa">buf</var>)</dt>
- <dd>Copy data from an <var class="Vt">mbuf chain</var> starting
- <var class="Fa">off</var> bytes from the beginning, continuing for
- <var class="Fa">len</var> bytes, into the indicated buffer
- <var class="Fa">buf</var>.</dd>
- <dt id="m_copyback"><a class="permalink" href="#m_copyback"><code class="Fn">m_copyback</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">offset</var>, <var class="Fa">len</var>,
- <var class="Fa">buf</var>)</dt>
- <dd>Copy <var class="Fa">len</var> bytes from the buffer
- <var class="Fa">buf</var> back into the indicated <var class="Vt">mbuf
- chain</var>, starting at <var class="Fa">offset</var> bytes from the
- beginning of the <var class="Vt">mbuf chain</var>, extending the
- <var class="Vt">mbuf chain</var> if necessary. <b class="Sy">Note</b>: It
- does not allocate any <var class="Vt">mbuf clusters</var>, just adds
- <var class="Vt">mbufs</var> to the <var class="Vt">mbuf chain</var>. It is
- safe to set <var class="Fa">offset</var> beyond the current
- <var class="Vt">mbuf chain</var> end: zeroed <var class="Vt">mbufs</var>
- will be allocated to fill the space.</dd>
- <dt id="m_length"><a class="permalink" href="#m_length"><code class="Fn">m_length</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">last</var>)</dt>
- <dd>Return the length of the <var class="Vt">mbuf chain</var>, and optionally
- a pointer to the last <var class="Vt">mbuf</var>.</dd>
- <dt><code class="Fn">m_dup_pkthdr</code>(<var class="Fa">to</var>,
- <var class="Fa">from</var>, <var class="Fa">how</var>)</dt>
- <dd>Upon the function's completion, the <var class="Vt">mbuf</var>
- <var class="Fa">to</var> will contain an identical copy of
- <var class="Fa">from-&gt;m_pkthdr</var> and the per-packet attributes
- found in the <var class="Vt">mbuf chain</var> <var class="Fa">from</var>.
- The <var class="Vt">mbuf</var> <var class="Fa">from</var> must have the
- flag <code class="Dv">M_PKTHDR</code> initially set, and
- <var class="Fa">to</var> must be empty on entry.</dd>
- <dt><code class="Fn">m_move_pkthdr</code>(<var class="Fa">to</var>,
- <var class="Fa">from</var>)</dt>
- <dd>Move <var class="Va">m_pkthdr</var> and the per-packet attributes from the
- <var class="Vt">mbuf chain</var> <var class="Fa">from</var> to the
- <var class="Vt">mbuf</var> <var class="Fa">to</var>. The
- <var class="Vt">mbuf</var> <var class="Fa">from</var> must have the flag
- <code class="Dv">M_PKTHDR</code> initially set, and
- <var class="Fa">to</var> must be empty on entry. Upon the function's
- completion, <var class="Fa">from</var> will have the flag
- <code class="Dv">M_PKTHDR</code> and the per-packet attributes
- cleared.</dd>
- <dt id="m_fixhdr"><a class="permalink" href="#m_fixhdr"><code class="Fn">m_fixhdr</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Set the packet-header length to the length of the <var class="Vt">mbuf
- chain</var>.</dd>
- <dt id="m_devget"><a class="permalink" href="#m_devget"><code class="Fn">m_devget</code></a>(<var class="Fa">buf</var>,
- <var class="Fa">len</var>, <var class="Fa">offset</var>,
- <var class="Fa">ifp</var>, <var class="Fa">copy</var>)</dt>
- <dd>Copy data from a device local memory pointed to by
- <var class="Fa">buf</var> to an <var class="Vt">mbuf chain</var>. The copy
- is done using a specified copy routine <var class="Fa">copy</var>, or
- <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>()
- if <var class="Fa">copy</var> is <code class="Dv">NULL</code>.</dd>
- <dt id="m_cat"><a class="permalink" href="#m_cat"><code class="Fn">m_cat</code></a>(<var class="Fa">m</var>,
- <var class="Fa">n</var>)</dt>
- <dd>Concatenate <var class="Fa">n</var> to <var class="Fa">m</var>. Both
- <var class="Vt">mbuf chains</var> must be of the same type.
- <var class="Fa">n</var> is not guaranteed to be valid after
- <code class="Fn">m_cat</code>() returns. <code class="Fn">m_cat</code>()
- does not update any packet header fields or free mbuf tags.</dd>
- <dt id="m_catpkt"><a class="permalink" href="#m_catpkt"><code class="Fn">m_catpkt</code></a>(<var class="Fa">m</var>,
- <var class="Fa">n</var>)</dt>
- <dd>A variant of <code class="Fn">m_cat</code>() that operates on packets.
- Both <var class="Fa">m</var> and <var class="Fa">n</var> must contain
- packet headers. <var class="Fa">n</var> is not guaranteed to be valid
- after <code class="Fn">m_catpkt</code>() returns.</dd>
- <dt id="m_split"><a class="permalink" href="#m_split"><code class="Fn">m_split</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">len</var>, <var class="Fa">how</var>)</dt>
- <dd>Partition an <var class="Vt">mbuf chain</var> in two pieces, returning the
- tail: all but the first <var class="Fa">len</var> bytes. In case of
- failure, it returns <code class="Dv">NULL</code> and attempts to restore
- the <var class="Vt">mbuf chain</var> to its original state.</dd>
- <dt><code class="Fn">m_apply</code>(<var class="Fa">mbuf</var>,
- <var class="Fa">off</var>, <var class="Fa">len</var>,
- <var class="Fa">f</var>, <var class="Fa">arg</var>)</dt>
- <dd>Apply a function to an <var class="Vt">mbuf chain</var>, at offset
- <var class="Fa">off</var>, for length <var class="Fa">len</var> bytes.
- Typically used to avoid calls to <code class="Fn">m_pullup</code>() which
- would otherwise be unnecessary or undesirable. <var class="Fa">arg</var>
- is a convenience argument which is passed to the callback function
- <var class="Fa">f</var>.
- <p class="Pp" id="f">Each time
- <a class="permalink" href="#f"><code class="Fn">f</code></a>() is
- called, it will be passed <var class="Fa">arg</var>, a pointer to the
- <var class="Fa">data</var> in the current mbuf, and the length
- <var class="Fa">len</var> of the data in this mbuf to which the function
- should be applied.</p>
- <p class="Pp" id="m_apply">The function should return zero to indicate
- success; otherwise, if an error is indicated, then
- <a class="permalink" href="#m_apply"><code class="Fn">m_apply</code></a>()
- will return the error and stop iterating through the
- <var class="Vt">mbuf chain</var>.</p>
- </dd>
- <dt id="m_getptr"><a class="permalink" href="#m_getptr"><code class="Fn">m_getptr</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">loc</var>, <var class="Fa">off</var>)</dt>
- <dd>Return a pointer to the mbuf containing the data located at
- <var class="Fa">loc</var> bytes from the beginning of the
- <var class="Vt">mbuf chain</var>. The corresponding offset into the mbuf
- will be stored in <var class="Fa">*off</var>.</dd>
- <dt><code class="Fn">m_defrag</code>(<var class="Fa">m0</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Defragment an mbuf chain, returning the shortest possible chain of mbufs
- and clusters. If allocation fails and this can not be completed,
- <code class="Dv">NULL</code> will be returned and the original chain will
- be unchanged. Upon success, the original chain will be freed and the new
- chain will be returned. <var class="Fa">how</var> should be either
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>,
- depending on the caller's preference.
- <p class="Pp">This function is especially useful in network drivers, where
- certain long mbuf chains must be shortened before being added to TX
- descriptor lists.</p>
- </dd>
- <dt id="m_collapse"><a class="permalink" href="#m_collapse"><code class="Fn">m_collapse</code></a>(<var class="Fa">m0</var>,
- <var class="Fa">how</var>, <var class="Fa">maxfrags</var>)</dt>
- <dd>Defragment an mbuf chain, returning a chain of at most
- <var class="Fa">maxfrags</var> mbufs and clusters. If allocation fails or
- the chain cannot be collapsed as requested, <code class="Dv">NULL</code>
- will be returned, with the original chain possibly modified. As with
- <a class="permalink" href="#m_defrag"><code class="Fn" id="m_defrag">m_defrag</code></a>(),
- <var class="Fa">how</var> should be one of
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</dd>
- <dt id="m_unshare"><a class="permalink" href="#m_unshare"><code class="Fn">m_unshare</code></a>(<var class="Fa">m0</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Create a version of the specified mbuf chain whose contents can be safely
- modified without affecting other users. If allocation fails and this
- operation can not be completed, <code class="Dv">NULL</code> will be
- returned. The original mbuf chain is always reclaimed and the reference
- count of any shared mbuf clusters is decremented.
- <var class="Fa">how</var> should be either
- <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>,
- depending on the caller's preference. As a side-effect of this process the
- returned mbuf chain may be compacted.
- <p class="Pp">This function is especially useful in the transmit path of
- network code, when data must be encrypted or otherwise altered prior to
- transmission.</p>
- </dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HARDWARE-ASSISTED_CHECKSUM_CALCULATION"><a class="permalink" href="#HARDWARE-ASSISTED_CHECKSUM_CALCULATION">HARDWARE-ASSISTED
- CHECKSUM CALCULATION</a></h1>
-<p class="Pp">This section currently applies to SCTP, TCP, and UDP over IP only.
- In order to save the host CPU resources, computing checksums is offloaded to
- the network interface hardware if possible. The
- <var class="Va">m_pkthdr</var> member of the leading
- <var class="Vt">mbuf</var> of a packet contains two fields used for that
- purpose, <var class="Vt">int</var> <var class="Va">csum_flags</var> and
- <var class="Vt">int</var> <var class="Va">csum_data</var>. The meaning of
- those fields depends on whether the packet is fragmented. Henceforth,
- <var class="Va">csum_flags</var> or <var class="Va">csum_data</var> of a
- packet will denote the corresponding field of the
- <var class="Va">m_pkthdr</var> member of the leading
- <var class="Vt">mbuf</var> in the <var class="Vt">mbuf chain</var>
- containing the packet.</p>
-<p class="Pp">When a packet is sent by SCTP, TCP, or UDP, the computation of the
- checksum is delayed until the outgoing interface has been determined for a
- packet. The interface-specific field
- <var class="Va">ifnet.if_data.ifi_hwassist</var> (see
- <a class="Xr">ifnet(9)</a>) is consulted by IP for the capabilities of the
- network interface selected for output to assist in computing checksums. The
- <var class="Va">csum_flags</var> field of the packet header is set to
- indicate which actions the interface is supposed to perform on it. The
- actions unsupported by the network interface are done in the software prior
- to passing the packet down to the interface driver; such actions will never
- be requested through <var class="Va">csum_flags</var>.</p>
-<p class="Pp">The flags demanding a particular action from an interface are as
- follows:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="CSUM_IP"><a class="permalink" href="#CSUM_IP"><code class="Dv">CSUM_IP</code></a></dt>
- <dd>The IP header checksum is to be computed and stored in the corresponding
- field of the packet. The hardware is expected to know the format of an IP
- header to determine the offset of the IP checksum field.</dd>
- <dt id="CSUM_SCTP"><a class="permalink" href="#CSUM_SCTP"><code class="Dv">CSUM_SCTP</code></a></dt>
- <dd>The SCTP checksum is to be computed. (See below.)</dd>
- <dt id="CSUM_TCP"><a class="permalink" href="#CSUM_TCP"><code class="Dv">CSUM_TCP</code></a></dt>
- <dd>The TCP checksum is to be computed. (See below.)</dd>
- <dt id="CSUM_UDP"><a class="permalink" href="#CSUM_UDP"><code class="Dv">CSUM_UDP</code></a></dt>
- <dd>The UDP checksum is to be computed. (See below.)</dd>
-</dl>
-</div>
-<p class="Pp">Should a SCTP, TCP, or UDP checksum be offloaded to the hardware,
- the field <var class="Va">csum_data</var> will contain the byte offset of
- the checksum field relative to the end of the IP header. In the case of TCP
- or UDP, the checksum field will be initially set by the TCP or UDP
- implementation to the checksum of the pseudo header defined by the TCP and
- UDP specifications. In the case of SCTP, the checksum field will be
- initially set by the SCTP implementation to 0.</p>
-<p class="Pp">When a packet is received by an interface, it indicates the
- actions it has performed on a packet by setting one or more of the following
- flags in <var class="Va">csum_flags</var> associated with the packet:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="CSUM_IP_CHECKED"><a class="permalink" href="#CSUM_IP_CHECKED"><code class="Dv">CSUM_IP_CHECKED</code></a></dt>
- <dd>The IP header checksum has been computed.</dd>
- <dt id="CSUM_IP_VALID"><a class="permalink" href="#CSUM_IP_VALID"><code class="Dv">CSUM_IP_VALID</code></a></dt>
- <dd>The IP header has a valid checksum. This flag can appear only in
- combination with <code class="Dv">CSUM_IP_CHECKED</code>.</dd>
- <dt id="CSUM_DATA_VALID"><a class="permalink" href="#CSUM_DATA_VALID"><code class="Dv">CSUM_DATA_VALID</code></a></dt>
- <dd>The checksum of the data portion of the IP packet has been computed and
- stored in the field <var class="Va">csum_data</var> in network byte
- order.</dd>
- <dt id="CSUM_PSEUDO_HDR"><a class="permalink" href="#CSUM_PSEUDO_HDR"><code class="Dv">CSUM_PSEUDO_HDR</code></a></dt>
- <dd>Can be set only along with <code class="Dv">CSUM_DATA_VALID</code> to
- indicate that the IP data checksum found in
- <var class="Va">csum_data</var> allows for the pseudo header defined by
- the TCP and UDP specifications. Otherwise the checksum of the pseudo
- header must be calculated by the host CPU and added to
- <var class="Va">csum_data</var> to obtain the final checksum to be used
- for TCP or UDP validation purposes.</dd>
-</dl>
-</div>
-<p class="Pp">If a particular network interface just indicates success or
- failure of SCTP, TCP, or UDP checksum validation without returning the exact
- value of the checksum to the host CPU, its driver can mark
- <code class="Dv">CSUM_DATA_VALID</code> in <var class="Va">csum_flags</var>
- as well as, for TCP and UDP, <code class="Dv">CSUM_PSEUDO_HDR</code> and set
- <var class="Va">csum_data</var> to <code class="Li">0xFFFF</code>
- hexadecimal to indicate a valid checksum. It is a peculiarity of the
- algorithm used that the Internet checksum calculated over any valid packet
- will be <code class="Li">0xFFFF</code> as long as the original checksum
- field is included. Note that for SCTP the value of
- <var class="Va">csum_data</var> is not relevant and
- <code class="Dv">CSUM_PSEUDO_HDR</code> in <var class="Va">csum_flags</var>
- is not set, since SCTP does not use a pseudo header checksum.</p>
-<p class="Pp">If IP delivers a packet with the flags
- <code class="Dv">CSUM_IP</code>, <code class="Dv">CSUM_SCTP</code>,
- <code class="Dv">CSUM_TCP</code>, or <code class="Dv">CSUM_UDP</code> set in
- <var class="Va">csum_flags</var> to a local IP, SCTP, TCP, or UDP stack, the
- packet will be processed without computing or validating the checksum, since
- the packet has not been on the wire. This can happen if the packet was
- handled by a virtual interface such as <a class="Xr">tap(4)</a> or
- <a class="Xr">epair(4)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STRESS_TESTING"><a class="permalink" href="#STRESS_TESTING">STRESS
- TESTING</a></h1>
-<p class="Pp">When running a kernel compiled with the option
- <code class="Dv">MBUF_STRESS_TEST</code>, the following
- <a class="Xr">sysctl(8)</a>-controlled options may be used to create various
- failure/extreme cases for testing of network drivers and other parts of the
- kernel that rely on <var class="Vt">mbufs</var>.</p>
-<dl class="Bl-tag">
- <dt id="net.inet.ip.mbuf_frag_size"><var class="Va">net.inet.ip.mbuf_frag_size</var></dt>
- <dd>Causes
- <a class="permalink" href="#ip_output"><code class="Fn" id="ip_output">ip_output</code></a>()
- to fragment outgoing <var class="Vt">mbuf chains</var> into fragments of
- the specified size. Setting this variable to 1 is an excellent way to test
- the long <var class="Vt">mbuf chain</var> handling ability of network
- drivers.</dd>
- <dt id="kern.ipc.m_defragrandomfailures"><var class="Va">kern.ipc.m_defragrandomfailures</var></dt>
- <dd>Causes the function
- <a class="permalink" href="#m_defrag~2"><code class="Fn" id="m_defrag~2">m_defrag</code></a>()
- to randomly fail, returning <code class="Dv">NULL</code>. Any piece of
- code which uses <code class="Fn">m_defrag</code>() should be tested with
- this feature.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">See above.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ifnet(9)</a>, <a class="Xr">mbuf_tags(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">S. J. Leffler</span>,
- <span class="RsA">W. N. Joy</span>, <span class="RsA">R. S. Fabry</span>,
- and <span class="RsA">M. J. Karels</span>, <span class="RsT">Networking
- Implementation Notes</span>, <i class="RsB">4.4BSD System Manager's Manual
- (SMM)</i>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><var class="Vt">Mbufs</var> appeared in an early version of
- <span class="Ux">BSD</span>. Besides being used for network packets, they
- were used to store various dynamic structures, such as routing table
- entries, interface addresses, protocol control blocks, etc. In more recent
- <span class="Ux">FreeBSD</span> use of <var class="Vt">mbufs</var> is almost
- entirely limited to packet storage, with <a class="Xr">uma(9)</a> zones
- being used directly to store other network-related memory.</p>
-<p class="Pp">Historically, the <var class="Vt">mbuf</var> allocator has been a
- special-purpose memory allocator able to run in interrupt contexts and
- allocating from a special kernel address space map. As of
- <span class="Ux">FreeBSD 5.3</span>, the <var class="Vt">mbuf</var>
- allocator is a wrapper around <a class="Xr">uma(9)</a>, allowing caching of
- <var class="Vt">mbufs</var>, clusters, and <var class="Vt">mbuf</var> +
- cluster pairs in per-CPU caches, as well as bringing other benefits of slab
- allocation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The original <code class="Nm">mbuf</code> manual page was written
- by <span class="An">Yar Tikhiy</span>. The <a class="Xr">uma(9)</a>
- <var class="Vt">mbuf</var> allocator was written by
- <br/>
- <span class="An">Bosko Milekic</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 20, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mbuf_tags.9 4.html b/static/freebsd/man9/mbuf_tags.9 4.html
deleted file mode 100644
index aac5e5f6..00000000
--- a/static/freebsd/man9/mbuf_tags.9 4.html
+++ /dev/null
@@ -1,262 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MBUF_TAGS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MBUF_TAGS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mbuf_tags</code> &#x2014; <span class="Nd">a
- framework for generic packet attributes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/mbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_alloc</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- cookie</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- type</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int wait</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_copy</code>(<var class="Fa" style="white-space: nowrap;">struct
- m_tag *t</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">m_tag_copy_chain</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">const struct
- mbuf *from</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_delete</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_delete_chain</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_delete_nonpersistent</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_find</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- type</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *start</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_first</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- m_tag *t</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_get</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- type</var>, <var class="Fa" style="white-space: nowrap;">int len</var>,
- <var class="Fa" style="white-space: nowrap;">int wait</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_locate</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- cookie</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- type</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-<p class="Pp"><var class="Ft">struct m_tag *</var>
- <br/>
- <code class="Fn">m_tag_next</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_prepend</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">m_tag_unlink</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag
- *t</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Mbuf tags allow additional meta-data to be associated with
- in-flight packets by providing a mechanism for the tagging of additional
- kernel memory onto packet header mbufs. Tags are maintained in chains off of
- the <a class="Xr">mbuf(9)</a> header, and maintained using a series of API
- calls to allocate, search, and delete tags. Tags are identified using an ID
- and cookie that uniquely identify a class of data tagged onto the packet,
- and may contain an arbitrary amount of additional storage. Typical uses of
- mbuf tags include Mandatory Access Control (MAC) labels as described in
- <a class="Xr">mac(9)</a>, IPsec policy information as described in
- <a class="Xr">ipsec(4)</a>, and packet filter tags used by
- <a class="Xr">pf(4)</a>.</p>
-<p class="Pp" id="M_COPY_PKTHDR">Tags will be maintained across a variety of
- operations, including the copying of packet headers using facilities such as
- <a class="permalink" href="#M_COPY_PKTHDR"><code class="Fn">M_COPY_PKTHDR</code></a>()
- and
- <a class="permalink" href="#M_MOVE_PKTHDR"><code class="Fn" id="M_MOVE_PKTHDR">M_MOVE_PKTHDR</code></a>().
- Any tags associated with an mbuf header will be automatically freed when the
- mbuf is freed, although some subsystems will wish to delete the tags prior
- to that time.</p>
-<p class="Pp">Packet tags are used by different kernel APIs to keep track of
- operations done or scheduled to happen to packets. Each packet tag can be
- distinguished by its type and cookie. The cookie is used to identify a
- specific module or API. The packet tags are attached to mbuf packet
- headers.</p>
-<p class="Pp" id="sizeof">The first
- <a class="permalink" href="#sizeof"><code class="Fn">sizeof</code></a>(<var class="Fa">struct
- m_tag</var>) bytes of a tag contain a <var class="Vt">struct
- m_tag</var>:</p>
-<div class="Bd Pp Li">
-<pre>struct m_tag {
- SLIST_ENTRY(m_tag) m_tag_link; /* List of packet tags */
- uint16_t m_tag_id; /* Tag ID */
- uint16_t m_tag_len; /* Length of data */
- uint32_t m_tag_cookie; /* ABI/Module ID */
- void (*m_tag_free)(struct m_tag *);
-};</pre>
-</div>
-<p class="Pp" id="m_tag_free_default">The <var class="Va">m_tag_link</var> field
- is used to link tags together (see <a class="Xr">queue(3)</a> for more
- details). The <var class="Va">m_tag_id</var>,
- <var class="Va">m_tag_len</var> and <var class="Va">m_tag_cookie</var>
- fields are set to type, length, and cookie, respectively.
- <var class="Va">m_tag_free</var> points to
- <a class="permalink" href="#m_tag_free_default"><code class="Fn">m_tag_free_default</code></a>().
- Following this structure are <var class="Va">m_tag_len</var> bytes of space
- that can be used to store tag-specific information. Addressing this data
- region may be tricky. A safe way is embedding <var class="Vt">struct
- m_tag</var> into a private data structure, as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct foo {
- struct m_tag tag;
- ...
-};
-struct foo *p = (struct foo *)m_tag_alloc(...);
-struct m_tag *mtag = &amp;p-&gt;tag;</pre>
-</div>
-<p class="Pp">Note that <span class="Ux">OpenBSD</span> does not support
- cookies, it needs <var class="Va">m_tag_id</var> to be globally unique. To
- keep compatibility with <span class="Ux">OpenBSD</span>, a cookie
- <code class="Dv">MTAG_ABI_COMPAT</code> is provided along with some
- compatibility functions. When writing an <span class="Ux">OpenBSD</span>
- compatible code, one should be careful not to take already used tag type.
- Tag types are defined in
- <code class="In">&lt;<a class="In">sys/mbuf.h</a>&gt;</code>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Packet_Tag_Manipulation_Functions"><a class="permalink" href="#Packet_Tag_Manipulation_Functions">Packet
- Tag Manipulation Functions</a></h2>
-<dl class="Bl-ohang Bd-indent">
- <dt id="m_tag_alloc"><a class="permalink" href="#m_tag_alloc"><code class="Fn">m_tag_alloc</code></a>(<var class="Fa">cookie</var>,
- <var class="Fa">type</var>, <var class="Fa">len</var>,
- <var class="Fa">wait</var>)</dt>
- <dd>Allocate a new tag of type <var class="Fa">type</var> and cookie
- <var class="Fa">cookie</var> with <var class="Va">len</var> bytes of space
- following the tag header itself. The <var class="Fa">wait</var> argument
- is passed directly to <a class="Xr">malloc(9)</a>. If successful,
- <code class="Fn">m_tag_alloc</code>() returns a memory buffer of
- (<var class="Va">len</var> <span class="No">+</span>
- <code class="Fn">sizeof</code>(<var class="Fa">struct m_tag</var>)) bytes.
- Otherwise, <code class="Dv">NULL</code> is returned. A compatibility
- function
- <a class="permalink" href="#m_tag_get"><code class="Fn" id="m_tag_get">m_tag_get</code></a>()
- is also provided.</dd>
- <dt id="m_tag_copy"><a class="permalink" href="#m_tag_copy"><code class="Fn">m_tag_copy</code></a>(<var class="Fa">tag</var>,
- <var class="Fa">how</var>)</dt>
- <dd>Allocate a copy of <var class="Fa">tag</var>. The
- <var class="Fa">how</var> argument is passed directly to
- <code class="Fn">m_tag_alloc</code>(). The return values are the same as
- in <code class="Fn">m_tag_alloc</code>().</dd>
- <dt id="m_tag_copy_chain"><a class="permalink" href="#m_tag_copy_chain"><code class="Fn">m_tag_copy_chain</code></a>(<var class="Fa">tombuf</var>,
- <var class="Fa">frommbuf</var>, <var class="Fa">how</var>)</dt>
- <dd>Allocate and copy all tags from mbuf <var class="Fa">frommbuf</var> to
- mbuf <var class="Fa">tombuf</var>. Returns 1 on success, and 0 on failure.
- In the latter case, mbuf <var class="Fa">tombuf</var> loses all its tags,
- even previously present.</dd>
- <dt id="m_tag_delete"><a class="permalink" href="#m_tag_delete"><code class="Fn">m_tag_delete</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Remove <var class="Fa">tag</var> from <var class="Fa">mbuf</var>'s list
- and free it.</dd>
- <dt id="m_tag_delete_chain"><a class="permalink" href="#m_tag_delete_chain"><code class="Fn">m_tag_delete_chain</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Remove and free a packet tag chain, starting from
- <var class="Fa">tag</var>. If <var class="Fa">tag</var> is
- <code class="Dv">NULL</code>, all tags are deleted.</dd>
- <dt id="m_tag_delete_nonpersistent"><a class="permalink" href="#m_tag_delete_nonpersistent"><code class="Fn">m_tag_delete_nonpersistent</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Traverse <var class="Fa">mbuf</var>'s tags and delete those which do not
- have the <code class="Dv">MTAG_PERSISTENT</code> flag set.</dd>
- <dt id="m_tag_first"><a class="permalink" href="#m_tag_first"><code class="Fn">m_tag_first</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Return the first tag associated with <var class="Fa">mbuf</var>.</dd>
- <dt id="m_tag_free"><a class="permalink" href="#m_tag_free"><code class="Fn">m_tag_free</code></a>(<var class="Fa">tag</var>)</dt>
- <dd>Free <var class="Fa">tag</var> using its <var class="Va">m_tag_free</var>
- method. The <code class="Fn">m_tag_free_default</code>() function is used
- by default.</dd>
- <dt id="m_tag_init"><a class="permalink" href="#m_tag_init"><code class="Fn">m_tag_init</code></a>(<var class="Fa">mbuf</var>)</dt>
- <dd>Initialize the tag storage for packet <var class="Fa">mbuf</var>.</dd>
- <dt id="m_tag_locate"><a class="permalink" href="#m_tag_locate"><code class="Fn">m_tag_locate</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">cookie</var>, <var class="Fa">type</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Search for a tag defined by <var class="Fa">type</var> and
- <var class="Fa">cookie</var> in <var class="Fa">mbuf</var>, starting from
- position specified by <var class="Fa">tag</var>. If the latter is
- <code class="Dv">NULL</code>, then search through the whole list. Upon
- success, a pointer to the first found tag is returned. In either case,
- <code class="Dv">NULL</code> is returned. A compatibility function
- <a class="permalink" href="#m_tag_find"><code class="Fn" id="m_tag_find">m_tag_find</code></a>()
- is also provided.</dd>
- <dt id="m_tag_next"><a class="permalink" href="#m_tag_next"><code class="Fn">m_tag_next</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Return tag next to <var class="Fa">tag</var> in
- <var class="Fa">mbuf</var>. If absent, <code class="Dv">NULL</code> is
- returned.</dd>
- <dt id="m_tag_prepend"><a class="permalink" href="#m_tag_prepend"><code class="Fn">m_tag_prepend</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Add the new tag <var class="Fa">tag</var> at the head of the tag list for
- packet <var class="Fa">mbuf</var>.</dd>
- <dt id="m_tag_unlink"><a class="permalink" href="#m_tag_unlink"><code class="Fn">m_tag_unlink</code></a>(<var class="Fa">mbuf</var>,
- <var class="Fa">tag</var>)</dt>
- <dd>Remove tag <var class="Fa">tag</var> from the list of tags of packet
- <var class="Fa">mbuf</var>.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
- REFERENCES</a></h1>
-<p class="Pp">The tag-manipulating code is contained in the file
- <span class="Pa">sys/kern/uipc_mbuf2.c</span>. Inlined functions are defined
- in <code class="In">&lt;<a class="In">sys/mbuf.h</a>&gt;</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">queue(3)</a>, <a class="Xr">mbuf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The packet tags first appeared in <span class="Ux">OpenBSD
- 2.9</span> and were written by <span class="An">Angelos D. Keromytis</span>
- &lt;<a class="Mt" href="mailto:angelos@openbsd.org">angelos@openbsd.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 28, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mdchain.9 4.html b/static/freebsd/man9/mdchain.9 4.html
deleted file mode 100644
index 4866652a..00000000
--- a/static/freebsd/man9/mdchain.9 4.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MDCHAIN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MDCHAIN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mdchain</code>, <code class="Nm">md_initm</code>,
- <code class="Nm">md_done</code>, <code class="Nm">md_append_record</code>,
- <code class="Nm">md_next_record</code>,
- <code class="Nm">md_get_uint8</code>, <code class="Nm">md_get_uint16</code>,
- <code class="Nm">md_get_uint16be</code>,
- <code class="Nm">md_get_uint16le</code>,
- <code class="Nm">md_get_uint32</code>,
- <code class="Nm">md_get_uint32be</code>,
- <code class="Nm">md_get_uint32le</code>,
- <code class="Nm">md_get_int64</code>,
- <code class="Nm">md_get_int64be</code>,
- <code class="Nm">md_get_int64le</code>, <code class="Nm">md_get_mem</code>,
- <code class="Nm">md_get_mbuf</code>, <code class="Nm">md_get_uio</code>
- &#x2014; <span class="Nd">set of functions to dissect an mbuf chain to
- various data types</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options LIBMCHAIN</code> <code class="Li">kldload
- libmchain</code></p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mchain.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">md_initm</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">md_done</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">md_append_record</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *top</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_next_record</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint8</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint16</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint16be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint16le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint32</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint32be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uint32le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_int64</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_int64be</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_int64le</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- *x</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_mem</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">caddr_t
- target</var>, <var class="Fa" style="white-space: nowrap;">int size</var>,
- <var class="Fa" style="white-space: nowrap;">int type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- **m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">md_get_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uiop</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions are used to decompose mbuf chains to various data
- types. The <var class="Vt">mdchain</var> structure is used as a working
- context and should be initialized through a call of the
- <a class="permalink" href="#mb_initm"><code class="Fn" id="mb_initm">mb_initm</code></a>()
- function. It has the following fields:</p>
-<dl class="Bl-tag">
- <dt id="md_top"><var class="Va">md_top</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the top of the parsed
- mbuf chain.</dd>
- <dt id="md_cur"><var class="Va">md_cur</var></dt>
- <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the currently parsed
- mbuf.</dd>
- <dt id="md_pas"><var class="Va">md_pas</var></dt>
- <dd>(<var class="Vt">int</var>) Offset in the current mbuf.</dd>
-</dl>
-<p class="Pp" id="md_done">The
- <a class="permalink" href="#md_done"><code class="Fn">md_done</code></a>()
- function disposes of an mbuf chain pointed to by the
- <var class="Fa">mdp-&gt;md_top</var> field and sets the field to
- <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="md_append_record">The
- <a class="permalink" href="#md_append_record"><code class="Fn">md_append_record</code></a>()
- appends a new mbuf chain using <var class="Va">m_nextpkt</var> field to form
- a single linked list of mbuf chains. If the
- <var class="Fa">mdp-&gt;md_top</var> field is <code class="Dv">NULL</code>,
- then this function behaves exactly as the
- <a class="permalink" href="#md_initm"><code class="Fn" id="md_initm">md_initm</code></a>()
- function.</p>
-<p class="Pp" id="md_next_record">The
- <a class="permalink" href="#md_next_record"><code class="Fn">md_next_record</code></a>()
- function extracts the next mbuf chain and disposes the current one, if any.
- For a new mbuf chain it calls the
- <a class="permalink" href="#md_initm~2"><code class="Fn" id="md_initm~2">md_initm</code></a>()
- function. If there is no data left the function returns
- <code class="Er">ENOENT</code>.</p>
-<p class="Pp" id="md_get_*">All
- <a class="permalink" href="#md_get_*"><code class="Fn">md_get_*</code></a>()
- functions perform an actual copy of the data from an mbuf chain. Functions
- which have <code class="Cm">le</code> or <code class="Cm">be</code> suffixes
- will perform conversion to the little- or big-endian data formats.</p>
-<p class="Pp" id="md_get_mem"><a class="permalink" href="#md_get_mem"><code class="Fn">md_get_mem</code></a>()
- function copies <var class="Fa">size</var> bytes of data specified by the
- <var class="Fa">source</var> argument from an mbuf chain. The
- <var class="Fa">type</var> argument specifies the method used to perform a
- copy, and can be one of the following:</p>
-<dl class="Bl-tag">
- <dt id="MB_MSYSTEM"><a class="permalink" href="#MB_MSYSTEM"><code class="Dv">MB_MSYSTEM</code></a></dt>
- <dd>Use the
- <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>()
- function.</dd>
- <dt id="MB_MUSER"><a class="permalink" href="#MB_MUSER"><code class="Dv">MB_MUSER</code></a></dt>
- <dd>Use the <a class="Xr">copyin(9)</a> function.</dd>
- <dt id="MB_MINLINE"><a class="permalink" href="#MB_MINLINE"><code class="Dv">MB_MINLINE</code></a></dt>
- <dd>Use an &#x201C;inline&#x201D; loop which does not call any function.</dd>
-</dl>
-<p class="Pp">If <var class="Fa">target</var> is <code class="Dv">NULL</code>,
- an actual copy is not performed and the function just skips the given number
- of bytes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">All <var class="Ft">int</var> functions return zero if successful,
- otherwise an error code is returned.</p>
-<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>:
- after failure of any function, an mbuf chain is left in the broken state and
- only the <code class="Fn">md_done</code>() function can safely be called to
- destroy it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>struct mdchain *mdp;
-struct mbuf *m;
-uint16_t length;
-uint8_t byte;
-
-receive(so, &amp;m);
-md_initm(mdp, m);
-if (md_get_uint8(mdp, &amp;byte) != 0 ||
- md_get_uint16le(mdp, &amp;length) != 0)
- error = EBADRPC;
-mb_done(mdp);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mbchain(9)</a>, <a class="Xr">mbuf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Boris
- Popov</span>
- &lt;<a class="Mt" href="mailto:bp@FreeBSD.org">bp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 28, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/memcchr.9 4.html b/static/freebsd/man9/memcchr.9 4.html
deleted file mode 100644
index 4dbb5109..00000000
--- a/static/freebsd/man9/memcchr.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MEMCCHR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MEMCCHR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">memcchr</code> &#x2014; <span class="Nd">locate
- the complement of a byte in byte string</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/libkern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">memcchr</code>(<var class="Fa" style="white-space: nowrap;">const
- void *b</var>, <var class="Fa" style="white-space: nowrap;">int c</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#memcchr"><code class="Fn" id="memcchr">memcchr</code></a>()
- function locates the first occurrence of a byte unequal to
- <var class="Fa">c</var> (converted to an <var class="Vt">unsigned
- char</var>) in string <var class="Fa">b</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">memcchr</code>() function returns a pointer
- to the byte located, or NULL if no such byte exists within
- <var class="Fa">len</var> bytes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">memchr(3)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">memcchr</code>() function first appeared in
- <span class="Ux">FreeBSD 10.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 1, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/memguard.9 3.html b/static/freebsd/man9/memguard.9 3.html
deleted file mode 100644
index 8ba31e90..00000000
--- a/static/freebsd/man9/memguard.9 3.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MEMGUARD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MEMGUARD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">MemGuard</code> &#x2014; <span class="Nd">memory
- allocator for debugging purposes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options DEBUG_MEMGUARD</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">MemGuard</code> is a simple and small replacement
- memory allocator designed to help detect tamper-after-free scenarios. These
- problems are more and more common and likely with multithreaded kernels
- where race conditions are more prevalent.</p>
-<p class="Pp" id="malloc"><code class="Nm">MemGuard</code> can take over
- <a class="permalink" href="#malloc"><code class="Fn">malloc</code></a>(),
- <a class="permalink" href="#realloc"><code class="Fn" id="realloc">realloc</code></a>()
- and
- <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>()
- for a single malloc type. Alternatively <code class="Nm">MemGuard</code> can
- take over
- <a class="permalink" href="#uma_zalloc"><code class="Fn" id="uma_zalloc">uma_zalloc</code></a>(),
- <a class="permalink" href="#uma_zalloc_arg"><code class="Fn" id="uma_zalloc_arg">uma_zalloc_arg</code></a>()
- and
- <a class="permalink" href="#uma_free"><code class="Fn" id="uma_free">uma_free</code></a>()
- for a single <a class="Xr">uma(9)</a> zone. Also
- <code class="Nm">MemGuard</code> can guard all allocations larger than
- <code class="Dv">PAGE_SIZE</code>, and can guard a random fraction of all
- allocations. There is also a knob to prevent allocations smaller than a
- specified size from being guarded, to limit memory waste.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">To use <code class="Nm">MemGuard</code> for a memory type, either
- add an entry to <span class="Pa">/boot/loader.conf</span>:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>vm.memguard.desc=&lt;memory_type&gt;</pre>
-</div>
-<p class="Pp">Or set the <var class="Va">vm.memguard.desc</var>
- <a class="Xr">sysctl(8)</a> variable at run-time:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>sysctl vm.memguard.desc=&lt;memory_type&gt;</pre>
-</div>
-<p class="Pp">Where <var class="Ar">memory_type</var> can be either a short
- description of the memory type to monitor, either name of
- <a class="Xr">uma(9)</a> zone. Only allocations from that
- <var class="Ar">memory_type</var> made after
- <var class="Va">vm.memguard.desc</var> is set will potentially be guarded.
- If <var class="Va">vm.memguard.desc</var> is modified at run-time then only
- allocations of the new <var class="Ar">memory_type</var> will potentially be
- guarded once the <a class="Xr">sysctl(8)</a> is set. Existing guarded
- allocations will still be properly released by either
- <a class="Xr">free(9)</a> or <a class="Xr">uma_zfree(9)</a>, depending on
- what kind of allocation was taken over.</p>
-<p class="Pp">To determine short description of a <a class="Xr">malloc(9)</a>
- type one can either take it from the first column of
- <a class="Xr">vmstat(8)</a> <code class="Fl">-m</code> output, or to find it
- in the kernel source. It is the second argument to
- <a class="Xr">MALLOC_DEFINE(9)</a> macro. To determine name of
- <a class="Xr">uma(9)</a> zone one can either take it from the first column
- of <a class="Xr">vmstat(8)</a> <code class="Fl">-z</code> output, or to find
- it in the kernel source. It is the first argument to the
- <a class="Xr">uma_zcreate(9)</a> function.</p>
-<p class="Pp">The <var class="Va">vm.memguard.divisor</var> boot-time tunable is
- used to scale how much of the system's physical memory
- <code class="Nm">MemGuard</code> is allowed to consume. The default is 10,
- so up to <var class="Va">vm_cnt.v_page_count</var>/10 pages can be used.
- <code class="Nm">MemGuard</code> will reserve
- <var class="Va">vm_kmem_max</var> /
- <var class="Va">vm.memguard.divisor</var> bytes of virtual address space,
- limited by twice the physical memory size. The physical limit is reported as
- <var class="Va">vm.memguard.phys_limit</var> and the virtual space reserved
- for <code class="Nm">MemGuard</code> is reported as
- <var class="Va">vm.memguard.mapsize</var>.</p>
-<p class="Pp"><code class="Nm">MemGuard</code> will not do page promotions for
- any allocation smaller than <var class="Va">vm.memguard.minsize</var> bytes.
- The default is 0, meaning all allocations can potentially be guarded.
- <code class="Nm">MemGuard</code> can guard sufficiently large allocations
- randomly, with average frequency of every one in 100000 /
- <var class="Va">vm.memguard.frequency</var> allocations. The default is 0,
- meaning no allocations are randomly guarded.</p>
-<p class="Pp"><code class="Nm">MemGuard</code> can optionally add unmapped guard
- pages around each allocation to detect overflow and underflow, if
- <var class="Va">vm.memguard.options</var> has the 1 bit set. This option is
- enabled by default. <code class="Nm">MemGuard</code> will optionally guard
- all allocations of <code class="Dv">PAGE_SIZE</code> or larger if
- <var class="Va">vm.memguard.options</var> has the 2 bit set. This option is
- off by default. By default <code class="Nm">MemGuard</code> does not guard
- <a class="Xr">uma(9)</a> zones that have been initialized with the
- <code class="Dv">UMA_ZONE_NOFREE</code> flag set, since it can produce false
- positives on them. However, this safety measure can be turned off by setting
- bit 3 of the <var class="Va">vm.memguard.options</var> tunable.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">vmstat(8)</a>,
- <a class="Xr">contigmalloc(9)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">redzone(9)</a>, <a class="Xr">uma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">MemGuard</code> first appeared in
- <span class="Ux">FreeBSD 6.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><code class="Nm">MemGuard</code> was originally written by
- <span class="An">Bosko Milekic</span>
- &lt;<a class="Mt" href="mailto:bmilekic@FreeBSD.org">bmilekic@FreeBSD.org</a>&gt;.
- This manual page was originally written by <span class="An">Christian
- Brueffer</span>
- &lt;<a class="Mt" href="mailto:brueffer@FreeBSD.org">brueffer@FreeBSD.org</a>&gt;.
- Additions have been made by <span class="An">Matthew Fleming</span>
- &lt;<a class="Mt" href="mailto:mdf@FreeBSD.org">mdf@FreeBSD.org</a>&gt; and
- <span class="An">Gleb Smirnoff</span>
- &lt;<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>&gt;
- to both the implementation and the documentation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 22, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mi_switch.9 3.html b/static/freebsd/man9/mi_switch.9 3.html
deleted file mode 100644
index bbd5d65c..00000000
--- a/static/freebsd/man9/mi_switch.9 3.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MI_SWITCH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MI_SWITCH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mi_switch</code> &#x2014; <span class="Nd">switch
- to another thread context</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mi_switch</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#mi_switch"><code class="Fn" id="mi_switch">mi_switch</code></a>()
- function implements the machine-independent prelude to a thread context
- switch. It is the single entry point for every context switch and is called
- from only a few distinguished places in the kernel. The context switch is,
- by necessity, always performed by the switched thread, even when the switch
- is initiated from elsewhere; e.g. preemption requested via Inter-Processor
- Interrupt (IPI).</p>
-<p class="Pp" id="mi_switch~2">The various major uses of
- <a class="permalink" href="#mi_switch~2"><code class="Fn">mi_switch</code></a>()
- can be enumerated as follows:</p>
-<ol class="Bl-enum Bd-indent">
- <li id="turnstile_wait">From within a function such as
- <a class="Xr">sleepq_wait(9)</a> or
- <a class="permalink" href="#turnstile_wait"><code class="Fn">turnstile_wait</code></a>()
- when the current thread voluntarily relinquishes the CPU to wait for some
- resource or lock to become available.</li>
- <li>Involuntary preemption due to arrival of a higher-priority thread.</li>
- <li>At the tail end of <a class="Xr">critical_exit(9)</a>, if preemption was
- deferred due to the critical section.</li>
- <li id="sched_clock">Within the TDA_SCHED AST handler, when rescheduling
- before the return to usermode was requested. There are several reasons for
- this, a notable one coming from
- <a class="permalink" href="#sched_clock"><code class="Fn">sched_clock</code></a>()
- when the running thread has exceeded its time slice.</li>
- <li>In the signal handling code (see <a class="Xr">issignal(9)</a>) if a
- signal is delivered that causes a process to stop.</li>
- <li id="thread_suspend_check">In
- <a class="permalink" href="#thread_suspend_check"><code class="Fn">thread_suspend_check</code></a>()
- where a thread needs to stop execution due to the suspension state of the
- process as a whole.</li>
- <li>In <a class="Xr">kern_yield(9)</a> when a thread wants to voluntarily
- relinquish the processor.</li>
-</ol>
-<p class="Pp" id="mi_switch~3">The <var class="Va">flags</var> argument to
- <a class="permalink" href="#mi_switch~3"><code class="Fn">mi_switch</code></a>()
- indicates the context switch type. One of the following must be passed:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="SWT_OWEPREEMPT"><a class="permalink" href="#SWT_OWEPREEMPT"><code class="Dv">SWT_OWEPREEMPT</code></a></dt>
- <dd>Switch due to delayed preemption after exiting a critical section.</dd>
- <dt id="SWT_TURNSTILE"><a class="permalink" href="#SWT_TURNSTILE"><code class="Dv">SWT_TURNSTILE</code></a></dt>
- <dd>Switch after propagating scheduling priority to the owner of a
- resource.</dd>
- <dt id="SWT_SLEEPQ"><a class="permalink" href="#SWT_SLEEPQ"><code class="Dv">SWT_SLEEPQ</code></a></dt>
- <dd>Begin waiting on a <a class="Xr">sleepqueue(9)</a>.</dd>
- <dt id="SWT_RELINQUISH"><a class="permalink" href="#SWT_RELINQUISH"><code class="Dv">SWT_RELINQUISH</code></a></dt>
- <dd>Yield call.</dd>
- <dt id="SWT_NEEDRESCHED"><a class="permalink" href="#SWT_NEEDRESCHED"><code class="Dv">SWT_NEEDRESCHED</code></a></dt>
- <dd>Rescheduling was requested.</dd>
- <dt id="SWT_IDLE"><a class="permalink" href="#SWT_IDLE"><code class="Dv">SWT_IDLE</code></a></dt>
- <dd>Switch from the idle thread.</dd>
- <dt id="SWT_IWAIT"><a class="permalink" href="#SWT_IWAIT"><code class="Dv">SWT_IWAIT</code></a></dt>
- <dd>A kernel thread which handles interrupts has finished work and must wait
- for interrupts to schedule additional work.</dd>
- <dt id="SWT_SUSPEND"><a class="permalink" href="#SWT_SUSPEND"><code class="Dv">SWT_SUSPEND</code></a></dt>
- <dd>Thread suspended.</dd>
- <dt id="SWT_REMOTEPREEMPT"><a class="permalink" href="#SWT_REMOTEPREEMPT"><code class="Dv">SWT_REMOTEPREEMPT</code></a></dt>
- <dd>Preemption by a higher-priority thread, initiated by a remote
- processor.</dd>
- <dt id="SWT_REMOTEWAKEIDLE"><a class="permalink" href="#SWT_REMOTEWAKEIDLE"><code class="Dv">SWT_REMOTEWAKEIDLE</code></a></dt>
- <dd>Idle thread preempted, initiated by a remote processor.</dd>
- <dt id="SWT_BIND"><a class="permalink" href="#SWT_BIND"><code class="Dv">SWT_BIND</code></a></dt>
- <dd>The running thread has been bound to another processor and must be
- switched out.</dd>
-</dl>
-</div>
-<p class="Pp">In addition to the switch type, callers must specify the nature of
- the switch by performing a bitwise OR with one of the
- <code class="Dv">SW_VOL</code> or <code class="Dv">SW_INVOL</code> flags,
- but not both. Respectively, these flags denote whether the context switch is
- voluntary or involuntary on the part of the current thread. For an
- involuntary context switch in which the running thread is being preempted,
- the caller should also pass the <code class="Dv">SW_PREEMPT</code> flag.</p>
-<p class="Pp" id="mi_switch~4">Upon entry to
- <a class="permalink" href="#mi_switch~4"><code class="Fn">mi_switch</code></a>(),
- the current thread must be holding its assigned thread lock. It may be
- unlocked as part of the context switch. After they have been rescheduled and
- execution resumes, threads will exit <code class="Fn">mi_switch</code>()
- with their thread lock unlocked.</p>
-<p class="Pp" id="mi_switch~5"><a class="permalink" href="#mi_switch~5"><code class="Fn">mi_switch</code></a>()
- records the amount of time the current thread has been running before
- handing control over to the scheduler, via
- <a class="permalink" href="#sched_switch"><code class="Fn" id="sched_switch">sched_switch</code></a>().
- After selecting a new thread to run, the scheduler will call
- <code class="Fn">cpu_switch</code>() to perform the low-level context
- switch.</p>
-<p class="Pp" id="cpu_switch"><a class="permalink" href="#cpu_switch"><code class="Fn">cpu_switch</code></a>()
- is the machine-dependent function that performs the actual switch from the
- running thread <var class="Fa">oldtd</var> to the chosen thread
- <var class="Fa">newtd</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpu_switch(9)</a>, <a class="Xr">cpu_throw(9)</a>,
- <a class="Xr">critical_exit(9)</a>, <a class="Xr">issignal(9)</a>,
- <a class="Xr">kern_yield(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">pmap(9)</a>, <a class="Xr">sleepqueue(9)</a>,
- <a class="Xr">thread_exit(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 7, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/microseq.9 4.html b/static/freebsd/man9/microseq.9 4.html
deleted file mode 100644
index 0977e1c5..00000000
--- a/static/freebsd/man9/microseq.9 4.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MICROSEQ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MICROSEQ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">microseq</code> &#x2014; <span class="Nd">ppbus
- microsequencer developer's guide</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/ppbus/ppbconf.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ppbus/ppb_msq.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">See <a class="Xr">ppbus(4)</a> for ppbus description and general
- info about the microsequencer.</p>
-<p class="Pp">The purpose of this document is to encourage developers to use the
- microsequencer mechanism in order to have:</p>
-<ol class="Bl-enum Bd-indent">
- <li>a uniform programming model</li>
- <li>efficient code</li>
-</ol>
-<p class="Pp">Before using microsequences, you are encouraged to look at
- <a class="Xr">ppc(4)</a> microsequencer implementation and an example of how
- using it in <a class="Xr">ppi(4)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PPBUS_register_model"><a class="permalink" href="#PPBUS_register_model">PPBUS
- register model</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Background"><a class="permalink" href="#Background">Background</a></h2>
-<p class="Pp">The parallel port model chosen for ppbus is the PC parallel port
- model. Thus, any register described later has the same semantic than its
- counterpart in a PC parallel port. For more info about ISA/ECP programming,
- get the Microsoft standard referenced as &quot;Extended Capabilities Port
- Protocol and ISA interface Standard&quot;. Registers described later are
- standard parallel port registers.</p>
-<p class="Pp">Mask macros are defined in the standard ppbus include files for
- each valid bit of parallel port registers.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Data_register"><a class="permalink" href="#Data_register">Data
- register</a></h2>
-<p class="Pp">In compatible or nibble mode, writing to this register will drive
- data to the parallel port data lines. In any other mode, drivers may be
- tri-stated by setting the direction bit (PCD) in the control register. Reads
- to this register return the value on the data lines.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_status_register"><a class="permalink" href="#Device_status_register">Device
- status register</a></h2>
-<p class="Pp">This read-only register reflects the inputs on the parallel port
- interface.</p>
-<p class="Pp"></p>
-<table class="Bl-column Bl-compact">
- <tr id="Bit">
- <td><a class="permalink" href="#Bit"><i class="Em">Bit</i></a></td>
- <td><a class="permalink" href="#Name"><i class="Em" id="Name">Name</i></a></td>
- <td><a class="permalink" href="#Description"><i class="Em" id="Description">Description</i></a></td>
- </tr>
- <tr>
- <td>7</td>
- <td>nBUSY</td>
- <td>inverted version of parallel port Busy signal</td>
- </tr>
- <tr>
- <td>6</td>
- <td>nACK</td>
- <td>version of parallel port nAck signal</td>
- </tr>
- <tr>
- <td>5</td>
- <td>PERROR</td>
- <td>version of parallel port PERROR signal</td>
- </tr>
- <tr>
- <td>4</td>
- <td>SELECT</td>
- <td>version of parallel port Select signal</td>
- </tr>
- <tr>
- <td>3</td>
- <td>nFAULT</td>
- <td>version of parallel port nFault signal</td>
- </tr>
-</table>
-<p class="Pp">Others are reserved and return undefined result when read.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_control_register"><a class="permalink" href="#Device_control_register">Device
- control register</a></h2>
-<p class="Pp">This register directly controls several output signals as well as
- enabling some functions.</p>
-<p class="Pp"></p>
-<table class="Bl-column Bl-compact">
- <tr id="Bit~2">
- <td><a class="permalink" href="#Bit~2"><i class="Em">Bit</i></a></td>
- <td><a class="permalink" href="#Name~2"><i class="Em" id="Name~2">Name</i></a></td>
- <td><a class="permalink" href="#Description~2"><i class="Em" id="Description~2">Description</i></a></td>
- </tr>
- <tr>
- <td>5</td>
- <td>PCD</td>
- <td>direction bit in extended modes</td>
- </tr>
- <tr>
- <td>4</td>
- <td>IRQENABLE</td>
- <td>1 enables an interrupt on the rising edge of nAck</td>
- </tr>
- <tr>
- <td>3</td>
- <td>SELECTIN</td>
- <td>inverted and driven as parallel port nSelectin signal</td>
- </tr>
- <tr>
- <td>2</td>
- <td>nINIT</td>
- <td>driven as parallel port nInit signal</td>
- </tr>
- <tr>
- <td>1</td>
- <td>AUTOFEED</td>
- <td>inverted and driven as parallel port nAutoFd signal</td>
- </tr>
- <tr>
- <td>0</td>
- <td>STROBE</td>
- <td>inverted and driven as parallel port nStrobe signal</td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MICROINSTRUCTIONS"><a class="permalink" href="#MICROINSTRUCTIONS">MICROINSTRUCTIONS</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Description~3"><a class="permalink" href="#Description~3">Description</a></h2>
-<p class="Pp"><a class="permalink" href="#Microinstructions"><i class="Em" id="Microinstructions">Microinstructions</i></a>
- are either parallel port accesses, program iterations, submicrosequence or C
- calls. The parallel port must be considered as the logical model described
- in <a class="Xr">ppbus(4)</a>.</p>
-<p class="Pp">Available microinstructions are:</p>
-<div class="Bd Pp Li">
-<pre>#define MS_OP_GET 0 /* get &lt;ptr&gt;, &lt;len&gt; */
-#define MS_OP_PUT 1 /* put &lt;ptr&gt;, &lt;len&gt; */
-#define MS_OP_RFETCH 2 /* rfetch &lt;reg&gt;, &lt;mask&gt;, &lt;ptr&gt; */
-#define MS_OP_RSET 3 /* rset &lt;reg&gt;, &lt;mask&gt;, &lt;mask&gt; */
-#define MS_OP_RASSERT 4 /* rassert &lt;reg&gt;, &lt;mask&gt; */
-#define MS_OP_DELAY 5 /* delay &lt;val&gt; */
-#define MS_OP_SET 6 /* set &lt;val&gt; */
-#define MS_OP_DBRA 7 /* dbra &lt;offset&gt; */
-#define MS_OP_BRSET 8 /* brset &lt;mask&gt;, &lt;offset&gt; */
-#define MS_OP_BRCLEAR 9 /* brclear &lt;mask&gt;, &lt;offset&gt; */
-#define MS_OP_RET 10 /* ret &lt;retcode&gt; */
-#define MS_OP_C_CALL 11 /* c_call &lt;function&gt;, &lt;parameter&gt; */
-#define MS_OP_PTR 12 /* ptr &lt;pointer&gt; */
-#define MS_OP_ADELAY 13 /* adelay &lt;val&gt; */
-#define MS_OP_BRSTAT 14 /* brstat &lt;mask&gt;, &lt;mask&gt;, &lt;offset&gt; */
-#define MS_OP_SUBRET 15 /* subret &lt;code&gt; */
-#define MS_OP_CALL 16 /* call &lt;microsequence&gt; */
-#define MS_OP_RASSERT_P 17 /* rassert_p &lt;iter&gt;, &lt;reg&gt; */
-#define MS_OP_RFETCH_P 18 /* rfetch_p &lt;iter&gt;, &lt;reg&gt;, &lt;mask&gt; */
-#define MS_OP_TRIG 19 /* trigger &lt;reg&gt;, &lt;len&gt;, &lt;array&gt; */</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Execution_context"><a class="permalink" href="#Execution_context">Execution
- context</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#execution"><i class="Em" id="execution">execution
- context</i></a> of microinstructions is:</p>
-<ul class="Bl-bullet Bd-indent">
- <li id="program">the
- <a class="permalink" href="#program"><i class="Em">program counter</i></a>
- which points to the next microinstruction to execute either in the main
- microsequence or in a subcall</li>
- <li id="ptr">the current value of
- <a class="permalink" href="#ptr"><i class="Em">ptr</i></a> which points to
- the next char to send/receive</li>
- <li id="branch">the current value of the internal
- <a class="permalink" href="#branch"><i class="Em">branch
- register</i></a></li>
-</ul>
-<p class="Pp">This data is modified by some of the microinstructions, not
- all.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_GET_and_MS_OP_PUT"><a class="permalink" href="#MS_OP_GET_and_MS_OP_PUT">MS_OP_GET
- and MS_OP_PUT</a></h2>
-<p class="Pp">are microinstructions used to do either predefined standard
- IEEE1284-1994 transfers or programmed non-standard io.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RFETCH_-_Register_FETCH"><a class="permalink" href="#MS_OP_RFETCH_-_Register_FETCH">MS_OP_RFETCH
- - Register FETCH</a></h2>
-<p class="Pp">is used to retrieve the current value of a parallel port register,
- apply a mask and save it in a buffer.</p>
-<p class="Pp">Parameters:</p>
-<ol class="Bl-enum Bd-indent">
- <li>register</li>
- <li>character mask</li>
- <li>pointer to the buffer</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RFETCH(reg,mask,ptr)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RSET_-_Register_SET"><a class="permalink" href="#MS_OP_RSET_-_Register_SET">MS_OP_RSET
- - Register SET</a></h2>
-<p class="Pp">is used to assert/clear some bits of a particular parallel port
- register, two masks are applied.</p>
-<p class="Pp">Parameters:</p>
-<ol class="Bl-enum Bd-indent">
- <li>register</li>
- <li>mask of bits to assert</li>
- <li>mask of bits to clear</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RSET(reg,assert,clear)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RASSERT_-_Register_ASSERT"><a class="permalink" href="#MS_OP_RASSERT_-_Register_ASSERT">MS_OP_RASSERT
- - Register ASSERT</a></h2>
-<p class="Pp">is used to assert all bits of a particular parallel port
- register.</p>
-<p class="Pp">Parameters:</p>
-<ol class="Bl-enum Bd-indent">
- <li>register</li>
- <li>byte to assert</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RASSERT(reg,byte)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_DELAY_-_microsecond_DELAY"><a class="permalink" href="#MS_OP_DELAY_-_microsecond_DELAY">MS_OP_DELAY
- - microsecond DELAY</a></h2>
-<p class="Pp">is used to delay the execution of the microsequence.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>delay in microseconds</li>
-</ol>
-<p class="Pp">Predefined macro: MS_DELAY(delay)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_SET_-_SET_internal_branch_register"><a class="permalink" href="#MS_OP_SET_-_SET_internal_branch_register">MS_OP_SET
- - SET internal branch register</a></h2>
-<p class="Pp">is used to set the value of the internal branch register.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>integer value</li>
-</ol>
-<p class="Pp">Predefined macro: MS_SET(accum)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_DBRA_-_"><a class="permalink" href="#MS_OP_DBRA_-_">MS_OP_DBRA
- - Do BRAnch</a></h2>
-<p class="Pp">is used to branch if internal branch register decremented by one
- result value is positive.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>integer offset in the current executed (sub)microsequence. Offset is added
- to the index of the next microinstruction to execute.</li>
-</ol>
-<p class="Pp">Predefined macro: MS_DBRA(offset)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_BRSET_-_BRanch_on_SET"><a class="permalink" href="#MS_OP_BRSET_-_BRanch_on_SET">MS_OP_BRSET
- - BRanch on SET</a></h2>
-<p class="Pp">is used to branch if some of the status register bits of the
- parallel port are set.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>bits of the status register</li>
- <li>integer offset in the current executed (sub)microsequence. Offset is added
- to the index of the next microinstruction to execute.</li>
-</ol>
-<p class="Pp">Predefined macro: MS_BRSET(mask,offset)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_BRCLEAR_-_BRanch_on_CLEAR"><a class="permalink" href="#MS_OP_BRCLEAR_-_BRanch_on_CLEAR">MS_OP_BRCLEAR
- - BRanch on CLEAR</a></h2>
-<p class="Pp">is used to branch if some of the status register bits of the
- parallel port are cleared.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>bits of the status register</li>
- <li>integer offset in the current executed (sub)microsequence. Offset is added
- to the index of the next microinstruction to execute.</li>
-</ol>
-<p class="Pp">Predefined macro: MS_BRCLEAR(mask,offset)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RET_-_RETurn"><a class="permalink" href="#MS_OP_RET_-_RETurn">MS_OP_RET
- - RETurn</a></h2>
-<p class="Pp">is used to return from a microsequence. This instruction is
- mandatory. This is the only way for the microsequencer to detect the end of
- the microsequence. The return code is returned in the integer pointed by the
- (int *) parameter of the ppb_MS_microseq().</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>integer return code</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RET(code)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_C_CALL_-_C_function_CALL"><a class="permalink" href="#MS_OP_C_CALL_-_C_function_CALL">MS_OP_C_CALL
- - C function CALL</a></h2>
-<p class="Pp">is used to call C functions from microsequence execution. This may
- be useful when a non-standard i/o is performed to retrieve a data character
- from the parallel port.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>the C function to call</li>
- <li>the parameter to pass to the function call</li>
-</ol>
-<p class="Pp">The C function shall be declared as a <var class="Ft">int(*)(void
- *p, char *ptr)</var>. The ptr parameter is the current position in the
- buffer currently scanned.</p>
-<p class="Pp">Predefined macro: MS_C_CALL(func,param)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_PTR_-_initialize_internal_PTR"><a class="permalink" href="#MS_OP_PTR_-_initialize_internal_PTR">MS_OP_PTR
- - initialize internal PTR</a></h2>
-<p class="Pp">is used to initialize the internal pointer to the currently
- scanned buffer. This pointer is passed to any C call (see above).</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>pointer to the buffer that shall be accessed by xxx_P() microsequence
- calls. Note that this pointer is automatically incremented during xxx_P()
- calls</li>
-</ol>
-<p class="Pp">Predefined macro: MS_PTR(ptr)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_ADELAY_-_do_an_Asynchronous_DELAY"><a class="permalink" href="#MS_OP_ADELAY_-_do_an_Asynchronous_DELAY">MS_OP_ADELAY
- - do an Asynchronous DELAY</a></h2>
-<p class="Pp">is used to make a tsleep() during microsequence execution. The
- tsleep is executed at PPBPRI level.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>delay in ms</li>
-</ol>
-<p class="Pp">Predefined macro: MS_ADELAY(delay)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_BRSTAT_-_BRanch_on_STATe"><a class="permalink" href="#MS_OP_BRSTAT_-_BRanch_on_STATe">MS_OP_BRSTAT
- - BRanch on STATe</a></h2>
-<p class="Pp">is used to branch on status register state condition.</p>
-<p class="Pp">Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>mask of asserted bits. Bits that shall be asserted in the status register
- are set in the mask</li>
- <li>mask of cleared bits. Bits that shall be cleared in the status register
- are set in the mask</li>
- <li>integer offset in the current executed (sub)microsequence. Offset is added
- to the index of the next microinstruction to execute.</li>
-</ol>
-<p class="Pp">Predefined macro: MS_BRSTAT(asserted_bits,clear_bits,offset)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_SUBRET_-_SUBmicrosequence_RETurn"><a class="permalink" href="#MS_OP_SUBRET_-_SUBmicrosequence_RETurn">MS_OP_SUBRET
- - SUBmicrosequence RETurn</a></h2>
-<p class="Pp">is used to return from the submicrosequence call. This action is
- mandatory before a RET call. Some microinstructions (PUT, GET) may not be
- callable within a submicrosequence.</p>
-<p class="Pp">No parameter.</p>
-<p class="Pp">Predefined macro: MS_SUBRET()</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_CALL_-_submicrosequence_CALL"><a class="permalink" href="#MS_OP_CALL_-_submicrosequence_CALL">MS_OP_CALL
- - submicrosequence CALL</a></h2>
-<p class="Pp">is used to call a submicrosequence. A submicrosequence is a
- microsequence with a SUBRET call. Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>the submicrosequence to execute</li>
-</ol>
-<p class="Pp">Predefined macro: MS_CALL(microseq)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RASSERT_P_-_Register_ASSERT_from_internal_PTR"><a class="permalink" href="#MS_OP_RASSERT_P_-_Register_ASSERT_from_internal_PTR">MS_OP_RASSERT_P
- - Register ASSERT from internal PTR</a></h2>
-<p class="Pp">is used to assert a register with data currently pointed by the
- internal PTR pointer. Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>amount of data to write to the register</li>
- <li>register</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RASSERT_P(iter,reg)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_RFETCH_P_-_Register_FETCH_to_internal_PTR"><a class="permalink" href="#MS_OP_RFETCH_P_-_Register_FETCH_to_internal_PTR">MS_OP_RFETCH_P
- - Register FETCH to internal PTR</a></h2>
-<p class="Pp">is used to fetch data from a register. Data is stored in the
- buffer currently pointed by the internal PTR pointer. Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>amount of data to read from the register</li>
- <li>register</li>
- <li>mask applied to fetched data</li>
-</ol>
-<p class="Pp">Predefined macro: MS_RFETCH_P(iter,reg,mask)</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="MS_OP_TRIG_-_TRIG_register"><a class="permalink" href="#MS_OP_TRIG_-_TRIG_register">MS_OP_TRIG
- - TRIG register</a></h2>
-<p class="Pp">is used to trigger the parallel port. This microinstruction is
- intended to provide a very efficient control of the parallel port.
- Triggering a register is writing data, wait a while, write data, wait a
- while... This allows to write magic sequences to the port. Parameter:</p>
-<ol class="Bl-enum Bd-indent">
- <li>amount of data to read from the register</li>
- <li>register</li>
- <li>size of the array</li>
- <li>array of unsigned chars. Each couple of u_chars define the data to write
- to the register and the delay in us to wait. The delay is limited to 255
- us to simplify and reduce the size of the array.</li>
-</ol>
-<p class="Pp">Predefined macro: MS_TRIG(reg,len,array)</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MICROSEQUENCES"><a class="permalink" href="#MICROSEQUENCES">MICROSEQUENCES</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="C_structures"><a class="permalink" href="#C_structures">C
- structures</a></h2>
-<div class="Bd Li">
-<pre>union ppb_insarg {
- int i;
- char c;
- void *p;
- int (* f)(void *, char *);
-};
-
-struct ppb_microseq {
- int opcode; /* microins. opcode */
- union ppb_insarg arg[PPB_MS_MAXARGS]; /* arguments */
-};</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Using_microsequences"><a class="permalink" href="#Using_microsequences">Using
- microsequences</a></h2>
-<p class="Pp">To instantiate a microsequence, just declare an array of
- ppb_microseq structures and initialize it as needed. You may either use
- predefined macros or code directly your microinstructions according to the
- ppb_microseq definition. For example,</p>
-<div class="Bd Pp Li">
-<pre> struct ppb_microseq select_microseq[] = {
-
- /* parameter list
- */
- #define SELECT_TARGET MS_PARAM(0, 1, MS_TYP_INT)
- #define SELECT_INITIATOR MS_PARAM(3, 1, MS_TYP_INT)
-
- /* send the select command to the drive */
- MS_DASS(MS_UNKNOWN),
- MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE),
- MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE),
- MS_DASS(MS_UNKNOWN),
- MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE),
-
- /* now, wait until the drive is ready */
- MS_SET(VP0_SELTMO),
-/* loop: */ MS_BRSET(H_ACK, 2 /* ready */),
- MS_DBRA(-2 /* loop */),
-/* error: */ MS_RET(1),
-/* ready: */ MS_RET(0)
- };</pre>
-</div>
-<p class="Pp">Here, some parameters are undefined and must be filled before
- executing the microsequence. In order to initialize each microsequence, one
- should use the ppb_MS_init_msq() function like this:</p>
-<div class="Bd Pp Li">
-<pre> ppb_MS_init_msq(select_microseq, 2,
- SELECT_TARGET, 1 &lt;&lt; target,
- SELECT_INITIATOR, 1 &lt;&lt; initiator);</pre>
-</div>
-<p class="Pp">and then execute the microsequence.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_microsequencer"><a class="permalink" href="#The_microsequencer">The
- microsequencer</a></h2>
-<p class="Pp">The microsequencer is executed either at ppbus or adapter level
- (see <a class="Xr">ppbus(4)</a> for info about ppbus system layers). Most of
- the microsequencer is executed at ppc level to avoid ppbus to adapter
- function call overhead. But some actions like deciding whereas the transfer
- is IEEE1284-1994 compliant are executed at ppbus layer.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ppbus(4)</a>, <a class="Xr">ppc(4)</a>,
- <a class="Xr">ppi(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">microseq</code> manual page first appeared in
- <span class="Ux">FreeBSD 3.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Nicolas
- Souchu</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Only one level of submicrosequences is allowed.</p>
-<p class="Pp">When triggering the port, maximum delay allowed is 255 us.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 6, 1998</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/microtime.9 4.html b/static/freebsd/man9/microtime.9 4.html
deleted file mode 100644
index 10dd7210..00000000
--- a/static/freebsd/man9/microtime.9 4.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MICROTIME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MICROTIME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bintime</code>,
- <code class="Nm">getbintime</code>, <code class="Nm">microtime</code>,
- <code class="Nm">getmicrotime</code>, <code class="Nm">nanotime</code>,
- <code class="Nm">getnanotime</code> &#x2014; <span class="Nd">get the
- current time</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/time.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bintime</code>(<var class="Fa" style="white-space: nowrap;">struct
- bintime *bt</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getbintime</code>(<var class="Fa" style="white-space: nowrap;">struct
- bintime *bt</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">microtime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *tv</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getmicrotime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *tv</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nanotime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timespec *ts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getnanotime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timespec *tsp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#bintime"><code class="Fn" id="bintime">bintime</code></a>()
- and <code class="Fn">getbintime</code>() functions store the system time as
- a <var class="Vt">struct bintime</var> at the addresses specified by
- <var class="Fa">bt</var>. The <code class="Fn">microtime</code>() and
- <code class="Fn">getmicrotime</code>() functions perform the same utility,
- but record the time as a <var class="Vt">struct timeval</var> instead.
- Similarly the <code class="Fn">nanotime</code>() and
- <code class="Fn">getnanotime</code>() functions store the time as a
- <var class="Vt">struct timespec</var>.</p>
-<p class="Pp" id="bintime~2">The
- <a class="permalink" href="#bintime~2"><code class="Fn">bintime</code></a>(),
- <a class="permalink" href="#microtime"><code class="Fn" id="microtime">microtime</code></a>(),
- and
- <a class="permalink" href="#nanotime"><code class="Fn" id="nanotime">nanotime</code></a>()
- functions always query the timecounter to return the current time as
- precisely as possible. Whereas <code class="Fn">getbintime</code>(),
- <code class="Fn">getmicrotime</code>(), and
- <code class="Fn">getnanotime</code>() functions are abstractions which
- return a less precise, but faster to obtain, time.</p>
-<p class="Pp" id="getbintime">The intent of the
- <a class="permalink" href="#getbintime"><code class="Fn">getbintime</code></a>(),
- <a class="permalink" href="#getmicrotime"><code class="Fn" id="getmicrotime">getmicrotime</code></a>(),
- and
- <a class="permalink" href="#getnanotime"><code class="Fn" id="getnanotime">getnanotime</code></a>()
- functions is to enforce the user's preference for timer accuracy versus
- execution time.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">binuptime(9)</a>, <a class="Xr">getbinuptime(9)</a>,
- <a class="Xr">getmicrouptime(9)</a>, <a class="Xr">getnanouptime(9)</a>,
- <a class="Xr">microuptime(9)</a>, <a class="Xr">nanouptime(9)</a>,
- <a class="Xr">tvtohz(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">bintime</code> functions first appeared in
- <span class="Ux">FreeBSD 5.0</span>. The <code class="Nm">microtime</code>
- and <code class="Nm">nanotime</code> functions first appeared in
- <span class="Ux">FreeBSD 3.0</span> but have existed in other incarnations
- since <span class="Ux">4.4BSD</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kelly
- Yancey</span>
- &lt;<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 16, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/microuptime.9 4.html b/static/freebsd/man9/microuptime.9 4.html
deleted file mode 100644
index c3b21012..00000000
--- a/static/freebsd/man9/microuptime.9 4.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MICROUPTIME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MICROUPTIME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">binuptime</code>,
- <code class="Nm">getbinuptime</code>, <code class="Nm">microuptime</code>,
- <code class="Nm">getmicrouptime</code>, <code class="Nm">nanouptime</code>,
- <code class="Nm">getnanouptime</code>, <code class="Nm">sbinuptime</code>,
- <code class="Nm">getsbinuptime</code> &#x2014; <span class="Nd">get the time
- elapsed since boot</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/time.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">binuptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- bintime *bt</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getbinuptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- bintime *bt</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">microuptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *tv</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getmicrouptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *tv</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nanouptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timespec *ts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">getnanouptime</code>(<var class="Fa" style="white-space: nowrap;">struct
- timespec *tsp</var>);</p>
-<p class="Pp"><var class="Ft">sbintime_t</var>
- <br/>
- <code class="Fn">sbinuptime</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">sbintime_t</var>
- <br/>
- <code class="Fn">getsbinuptime</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#binuptime"><code class="Fn" id="binuptime">binuptime</code></a>()
- and <code class="Fn">getbinuptime</code>() functions store the time elapsed
- since boot as a <var class="Vt">struct bintime</var> at the address
- specified by <var class="Fa">bt</var>. The
- <code class="Fn">microuptime</code>() and
- <code class="Fn">getmicrouptime</code>() functions perform the same utility,
- but record the elapsed time as a <var class="Vt">struct timeval</var>
- instead. Similarly the <code class="Fn">nanouptime</code>() and
- <code class="Fn">getnanouptime</code>() functions store the elapsed time as
- a <var class="Vt">struct timespec</var>. The
- <code class="Fn">sbinuptime</code>() and
- <code class="Fn">getsbinuptime</code>() functions return the time elapsed
- since boot as a <var class="Vt">sbintime_t</var>.</p>
-<p class="Pp" id="binuptime~2">The
- <a class="permalink" href="#binuptime~2"><code class="Fn">binuptime</code></a>(),
- <a class="permalink" href="#microuptime"><code class="Fn" id="microuptime">microuptime</code></a>(),
- <a class="permalink" href="#nanouptime"><code class="Fn" id="nanouptime">nanouptime</code></a>(),
- and
- <a class="permalink" href="#sbinuptime"><code class="Fn" id="sbinuptime">sbinuptime</code></a>()
- functions always query the timecounter to return the current time as
- precisely as possible. Whereas <code class="Fn">getbinuptime</code>(),
- <code class="Fn">getmicrouptime</code>(),
- <code class="Fn">getnanouptime</code>(), and
- <code class="Fn">getsbinuptime</code>() functions are abstractions which
- return a less precise, but faster to obtain, time.</p>
-<p class="Pp" id="getbinuptime">The intent of the
- <a class="permalink" href="#getbinuptime"><code class="Fn">getbinuptime</code></a>(),
- <a class="permalink" href="#getmicrouptime"><code class="Fn" id="getmicrouptime">getmicrouptime</code></a>(),
- <a class="permalink" href="#getnanouptime"><code class="Fn" id="getnanouptime">getnanouptime</code></a>(),
- and
- <a class="permalink" href="#getsbinuptime"><code class="Fn" id="getsbinuptime">getsbinuptime</code></a>()
- functions is to enforce the user's preference for timer accuracy versus
- execution time.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bintime(9)</a>, <a class="Xr">get_cyclecount(9)</a>,
- <a class="Xr">getbintime(9)</a>, <a class="Xr">getmicrotime(9)</a>,
- <a class="Xr">getnanotime(9)</a>, <a class="Xr">microtime(9)</a>,
- <a class="Xr">nanotime(9)</a>, <a class="Xr">tvtohz(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kelly
- Yancey</span>
- &lt;<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 21, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mod_cc.9 3.html b/static/freebsd/man9/mod_cc.9 3.html
deleted file mode 100644
index 6e448911..00000000
--- a/static/freebsd/man9/mod_cc.9 3.html
+++ /dev/null
@@ -1,281 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MOD_CC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MOD_CC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mod_cc</code>,
- <code class="Nm">DECLARE_CC_MODULE</code>, <code class="Nm">CCV</code>
- &#x2014; <span class="Nd">Modular Congestion Control</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">netinet/tcp.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">netinet/cc/cc.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">netinet/cc/cc_module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">DECLARE_CC_MODULE</code>(<var class="Fa" style="white-space: nowrap;">ccname</var>,
- <var class="Fa" style="white-space: nowrap;">ccalgo</var>);</p>
-<p class="Pp"><code class="Fn">CCV</code>(<var class="Fa" style="white-space: nowrap;">ccv</var>,
- <var class="Fa" style="white-space: nowrap;">what</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">mod_cc</code> framework allows congestion
- control algorithms to be implemented as dynamically loadable kernel modules
- via the <a class="Xr">kld(4)</a> facility. Transport protocols can select
- from the list of available algorithms on a connection-by-connection basis,
- or use the system default (see <a class="Xr">mod_cc(4)</a> for more
- details).</p>
-<p class="Pp"><code class="Nm">mod_cc</code> modules are identified by an
- <a class="Xr">ascii(7)</a> name and set of hook functions encapsulated in a
- <var class="Vt">struct cc_algo</var>, which has the following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct cc_algo {
- char name[TCP_CA_NAME_MAX];
- int (*mod_init) (void);
- int (*mod_destroy) (void);
- size_t (*cc_data_sz)(void);
- int (*cb_init) (struct cc_var *ccv, void *ptr);
- void (*cb_destroy) (struct cc_var *ccv);
- void (*conn_init) (struct cc_var *ccv);
- void (*ack_received) (struct cc_var *ccv, uint16_t type);
- void (*cong_signal) (struct cc_var *ccv, uint32_t type);
- void (*post_recovery) (struct cc_var *ccv);
- void (*after_idle) (struct cc_var *ccv);
- int (*ctl_output)(struct cc_var *, struct sockopt *, void *);
- void (*rttsample)(struct cc_var *, uint32_t, uint32_t, uint32_t);
- void (*newround)(struct cc_var *, uint32_t);
-};</pre>
-</div>
-<p class="Pp">The <var class="Va">name</var> field identifies the unique name of
- the algorithm, and should be no longer than TCP_CA_NAME_MAX-1 characters in
- length (the TCP_CA_NAME_MAX define lives in
- <code class="In">&lt;<a class="In">netinet/tcp.h</a>&gt;</code> for
- compatibility reasons).</p>
-<p class="Pp">The <var class="Va">mod_init</var> function is called when a new
- module is loaded into the system but before the registration process is
- complete. It should be implemented if a module needs to set up some global
- state prior to being available for use by new connections. Returning a
- non-zero value from <var class="Va">mod_init</var> will cause the loading of
- the module to fail.</p>
-<p class="Pp">The <var class="Va">mod_destroy</var> function is called prior to
- unloading an existing module from the kernel. It should be implemented if a
- module needs to clean up any global state before being removed from the
- kernel. The return value is currently ignored.</p>
-<p class="Pp">The <var class="Va">cc_data_sz</var> function is called by the
- socket option code to get the size of data that the
- <var class="Va">cb_init</var> function needs. The socket option code then
- preallocates the modules memory so that the <var class="Va">cb_init</var>
- function will not fail (the socket option code uses M_WAITOK with no locks
- held to do this).</p>
-<p class="Pp">The <var class="Va">cb_init</var> function is called when a TCP
- control block <var class="Vt">struct tcpcb</var> is created. It should be
- implemented if a module needs to allocate memory for storing private
- per-connection state. Returning a non-zero value from
- <var class="Va">cb_init</var> will cause the connection set up to be
- aborted, terminating the connection as a result. Note that the ptr argument
- passed to the function should be checked to see if it is non-NULL, if so it
- is preallocated memory that the cb_init function must use instead of calling
- malloc itself.</p>
-<p class="Pp">The <var class="Va">cb_destroy</var> function is called when a TCP
- control block <var class="Vt">struct tcpcb</var> is destroyed. It should be
- implemented if a module needs to free memory allocated in
- <var class="Va">cb_init</var>.</p>
-<p class="Pp">The <var class="Va">conn_init</var> function is called when a new
- connection has been established and variables are being initialised. It
- should be implemented to initialise congestion control algorithm variables
- for the newly established connection.</p>
-<p class="Pp">The <var class="Va">ack_received</var> function is called when a
- TCP acknowledgement (ACK) packet is received. Modules use the
- <var class="Fa">type</var> argument as an input to their congestion
- management algorithms. The ACK types currently reported by the stack are
- CC_ACK and CC_DUPACK. CC_ACK indicates the received ACK acknowledges
- previously unacknowledged data. CC_DUPACK indicates the received ACK
- acknowledges data we have already received an ACK for.</p>
-<p class="Pp">The <var class="Va">cong_signal</var> function is called when a
- congestion event is detected by the TCP stack. Modules use the
- <var class="Fa">type</var> argument as an input to their congestion
- management algorithms. The congestion event types currently reported by the
- stack are CC_ECN, CC_RTO, CC_RTO_ERR and CC_NDUPACK. CC_ECN is reported when
- the TCP stack receives an explicit congestion notification (RFC3168). CC_RTO
- is reported when the retransmission time out timer fires. CC_RTO_ERR is
- reported if the retransmission time out timer fired in error. CC_NDUPACK is
- reported if N duplicate ACKs have been received back-to-back, where N is the
- fast retransmit duplicate ack threshold (N=3 currently as per RFC5681).</p>
-<p class="Pp">The <var class="Va">post_recovery</var> function is called after
- the TCP connection has recovered from a congestion event. It should be
- implemented to adjust state as required.</p>
-<p class="Pp">The <var class="Va">after_idle</var> function is called when data
- transfer resumes after an idle period. It should be implemented to adjust
- state as required.</p>
-<p class="Pp">The <var class="Va">ctl_output</var> function is called when
- <a class="Xr">getsockopt(2)</a> or <a class="Xr">setsockopt(2)</a> is called
- on a <a class="Xr">tcp(4)</a> socket with the <var class="Va">struct
- sockopt</var> pointer forwarded unmodified from the TCP control, and a
- <var class="Va">void *</var> pointer to algorithm specific argument.</p>
-<p class="Pp">The <var class="Va">rttsample</var> function is called to pass
- round trip time information to the congestion controller. The additional
- arguments to the function include the microsecond RTT that is being noted,
- the number of times that the data being acknowledged was retransmitted as
- well as the flightsize at send. For transports that do not track flightsize
- at send, this variable will be the current cwnd at the time of the call.</p>
-<p class="Pp">The <var class="Va">newround</var> function is called each time a
- new round trip time begins. The montonically increasing round number is also
- passed to the congestion controller as well. This can be used for various
- purposes by the congestion controller (e.g Hystart++).</p>
-<p class="Pp">Note that currently not all TCP stacks call the
- <var class="Va">rttsample</var> and <var class="Va">newround</var> function
- so dependency on these functions is also dependent upon which TCP stack is
- in use.</p>
-<p class="Pp" id="DECLARE_CC_MODULE">The
- <a class="permalink" href="#DECLARE_CC_MODULE"><code class="Fn">DECLARE_CC_MODULE</code></a>()
- macro provides a convenient wrapper around the
- <a class="Xr">DECLARE_MODULE(9)</a> macro, and is used to register a
- <code class="Nm">mod_cc</code> module with the
- <code class="Nm">mod_cc</code> framework. The <var class="Fa">ccname</var>
- argument specifies the module's name. The <var class="Fa">ccalgo</var>
- argument points to the module's <var class="Vt">struct cc_algo</var>.</p>
-<p class="Pp"><code class="Nm">mod_cc</code> modules must instantiate a
- <var class="Vt">struct cc_algo</var>, but are only required to set the name
- field, and optionally any of the function pointers. Note that if a module
- defines the <var class="Va">cb_init</var> function it also must define a
- <var class="Va">cc_data_sz</var> function. This is because when switching
- from one congestion control module to another the socket option code will
- preallocate memory for the <var class="Va">cb_init</var> function. If no
- memory is allocated by the modules <var class="Va">cb_init</var> then the
- <var class="Va">cc_data_sz</var> function should return 0.</p>
-<p class="Pp">The stack will skip calling any function pointer which is NULL, so
- there is no requirement to implement any of the function pointers (with the
- exception of the cb_init &lt;-&gt; cc_data_sz dependency noted above). Using
- the C99 designated initialiser feature to set fields is encouraged.</p>
-<p class="Pp">Each function pointer which deals with congestion control state is
- passed a pointer to a <var class="Vt">struct cc_var</var>, which has the
- following members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct cc_var {
- void *cc_data;
- int bytes_this_ack;
- tcp_seq curack;
- uint32_t flags;
- int type;
- union ccv_container {
- struct tcpcb *tcp;
- struct sctp_nets *sctp;
- } ccvc;
- uint16_t nsegs;
- uint8_t labc;
-};</pre>
-</div>
-<p class="Pp"><var class="Vt">struct cc_var</var> groups congestion control
- related variables into a single, embeddable structure and adds a layer of
- indirection to accessing transport protocol control blocks. The eventual
- goal is to allow a single set of <code class="Nm">mod_cc</code> modules to
- be shared between all congestion aware transport protocols, though currently
- only <a class="Xr">tcp(4)</a> is supported.</p>
-<p class="Pp" id="CCV">To aid the eventual transition towards this goal, direct
- use of variables from the transport protocol's data structures is strongly
- discouraged. However, it is inevitable at the current time to require access
- to some of these variables, and so the
- <a class="permalink" href="#CCV"><code class="Fn">CCV</code></a>() macro
- exists as a convenience accessor. The <var class="Fa">ccv</var> argument
- points to the <var class="Vt">struct cc_var</var> passed into the function
- by the <code class="Nm">mod_cc</code> framework. The
- <var class="Fa">what</var> argument specifies the name of the variable to
- access.</p>
-<p class="Pp">Apart from the <var class="Va">type</var> and
- <var class="Va">ccv_container</var> fields, the remaining fields in
- <var class="Vt">struct cc_var</var> are for use by
- <code class="Nm">mod_cc</code> modules.</p>
-<p class="Pp">The <var class="Va">cc_data</var> field is available for
- algorithms requiring additional per-connection state to attach a dynamic
- memory pointer to. The memory should be allocated and attached in the
- module's <var class="Va">cb_init</var> hook function.</p>
-<p class="Pp">The <var class="Va">bytes_this_ack</var> field specifies the
- number of new bytes acknowledged by the most recently received ACK packet.
- It is only valid in the <var class="Va">ack_received</var> hook
- function.</p>
-<p class="Pp">The <var class="Va">curack</var> field specifies the sequence
- number of the most recently received ACK packet. It is only valid in the
- <var class="Va">ack_received</var>, <var class="Va">cong_signal</var> and
- <var class="Va">post_recovery</var> hook functions.</p>
-<p class="Pp">The <var class="Va">flags</var> field is used to pass useful
- information from the stack to a <code class="Nm">mod_cc</code> module. The
- CCF_ABC_SENTAWND flag is relevant in <var class="Va">ack_received</var> and
- is set when appropriate byte counting (RFC3465) has counted a window's worth
- of bytes has been sent. It is the module's responsibility to clear the flag
- after it has processed the signal. The CCF_CWND_LIMITED flag is relevant in
- <var class="Va">ack_received</var> and is set when the connection's ability
- to send data is currently constrained by the value of the congestion window.
- Algorithms should use the absence of this flag being set to avoid
- accumulating a large difference between the congestion window and send
- window.</p>
-<p class="Pp">The <var class="Va">nsegs</var> variable is used to pass in how
- much compression was done by the local LRO system. So for example if LRO
- pushed three in-order acknowledgements into one acknowledgement the variable
- would be set to three.</p>
-<p class="Pp">The <var class="Va">labc</var> variable is used in conjunction
- with the CCF_USE_LOCAL_ABC flag to override what labc variable the
- congestion controller will use for this particular acknowledgement.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cc_cdg(4)</a>, <a class="Xr">cc_chd(4)</a>,
- <a class="Xr">cc_cubic(4)</a>, <a class="Xr">cc_dctcp(4)</a>,
- <a class="Xr">cc_hd(4)</a>, <a class="Xr">cc_htcp(4)</a>,
- <a class="Xr">cc_newreno(4)</a>, <a class="Xr">cc_vegas(4)</a>,
- <a class="Xr">mod_cc(4)</a>, <a class="Xr">tcp(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1>
-<p class="Pp">Development and testing of this software were made possible in
- part by grants from the FreeBSD Foundation and Cisco University Research
- Program Fund at Community Foundation Silicon Valley.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUTURE_WORK"><a class="permalink" href="#FUTURE_WORK">FUTURE
- WORK</a></h1>
-<p class="Pp">Integrate with <a class="Xr">sctp(4)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The modular Congestion Control (CC) framework first appeared in
- <span class="Ux">FreeBSD 9.0</span>.</p>
-<p class="Pp">The framework was first released in 2007 by James Healy and
- Lawrence Stewart whilst working on the NewTCP research project at Swinburne
- University of Technology's Centre for Advanced Internet Architectures,
- Melbourne, Australia, which was made possible in part by a grant from the
- Cisco University Research Program Fund at Community Foundation Silicon
- Valley. More details are available at:</p>
-<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">mod_cc</code> framework was written by
- <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;,
- <span class="An">James Healy</span>
- &lt;<a class="Mt" href="mailto:jimmy@deefa.com">jimmy@deefa.com</a>&gt; and
- <span class="An">David Hayes</span>
- &lt;<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">David
- Hayes</span>
- &lt;<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>&gt;
- and <span class="An">Lawrence Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 13, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/module.9 3.html b/static/freebsd/man9/module.9 3.html
deleted file mode 100644
index ad8230b9..00000000
--- a/static/freebsd/man9/module.9 3.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">module</code> &#x2014; <span class="Nd">structure
- describing a kernel module</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each module in the kernel is described by a
- <var class="Vt">module_t</var> structure. The structure contains the name of
- the device, a unique ID number, a pointer to an event handler function and
- to an argument, which is given to the event handler, as well as some kernel
- internal data. If the event handler function is
- <code class="Dv">NULL</code>, the module will use a no-operation function
- handler instead.</p>
-<p class="Pp">The <a class="Xr">DECLARE_MODULE(9)</a> macro registers the module
- with the system.</p>
-<p class="Pp">When the module is loaded, the event handler function is called
- with the <var class="Fa">what</var> argument set to
- <code class="Dv">MOD_LOAD</code>.</p>
-<p class="Pp">On unload it is first called with <var class="Fa">what</var> set
- to <code class="Dv">MOD_QUIESCE</code>. If the unload was not forced, a
- non-zero return will prevent the unload from happening.</p>
-<p class="Pp">If the unload continues <var class="Fa">what</var> is set to
- <code class="Dv">MOD_UNLOAD</code>. If the module returns non-zero to this,
- the unload will not happen.</p>
-<p class="Pp">The difference between <code class="Dv">MOD_QUIESCE</code> and
- <code class="Dv">MOD_UNLOAD</code> is that the module should fail
- <code class="Dv">MOD_QUIESCE</code> if it is currently in use, whereas
- <code class="Dv">MOD_UNLOAD</code> should only fail if it is impossible to
- unload the module, for instance because there are memory references to the
- module which cannot be revoked.</p>
-<p class="Pp">When the system is shutting down, <var class="Fa">what</var>
- contains the value of <code class="Dv">MOD_SHUTDOWN</code>.</p>
-<p class="Pp">The module should return <code class="Er">EOPNOTSUPP</code> for
- unsupported and unrecognized values of <var class="Fa">what</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>#include &lt;sys/param.h&gt;
-#include &lt;sys/kernel.h&gt;
-#include &lt;sys/module.h&gt;
-
-static int foo_handler(module_t mod, int /*modeventtype_t*/ what,
- void *arg);
-
-static moduledata_t mod_data= {
- &quot;foo&quot;,
- foo_handler,
- NULL
-};
-
-MODULE_VERSION(foo, 1);
-MODULE_DEPEND(foo, bar, 1, 3, 4);
-
-DECLARE_MODULE(foo, mod_data, SI_SUB_EXEC, SI_ORDER_ANY);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>,
- <a class="Xr">DEV_MODULE(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a>,
- <a class="Xr">MODULE_DEPEND(9)</a>, <a class="Xr">MODULE_PNP_INFO(9)</a>,
- <a class="Xr">MODULE_VERSION(9)</a>, <a class="Xr">SYSCALL_MODULE(9)</a></p>
-<p class="Pp"><span class="Pa">/usr/share/examples/kld</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alexander
- Langer</span>
- &lt;<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 11, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mtx_pool.9 3.html b/static/freebsd/man9/mtx_pool.9 3.html
deleted file mode 100644
index 59b9f25f..00000000
--- a/static/freebsd/man9/mtx_pool.9 3.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MTX_POOL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MTX_POOL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mtx_pool</code>,
- <code class="Nm">mtx_pool_alloc</code>,
- <code class="Nm">mtx_pool_find</code>,
- <code class="Nm">mtx_pool_lock</code>,
- <code class="Nm">mtx_pool_lock_spin</code>,
- <code class="Nm">mtx_pool_unlock</code>,
- <code class="Nm">mtx_pool_unlock_spin</code>,
- <code class="Nm">mtx_pool_create</code>,
- <code class="Nm">mtx_pool_destroy</code> &#x2014; <span class="Nd">mutex
- pool routines</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mutex.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct mtx *</var>
- <br/>
- <code class="Fn">mtx_pool_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>);</p>
-<p class="Pp"><var class="Ft">struct mtx *</var>
- <br/>
- <code class="Fn">mtx_pool_find</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void
- *ptr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_pool_lock</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void
- *ptr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_pool_lock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void
- *ptr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_pool_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void
- *ptr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_pool_unlock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void
- *ptr</var>);</p>
-<p class="Pp"><var class="Ft">struct mtx_pool *</var>
- <br/>
- <code class="Fn">mtx_pool_create</code>(<var class="Fa" style="white-space: nowrap;">const
- char *mtx_name</var>, <var class="Fa" style="white-space: nowrap;">int
- pool_size</var>, <var class="Fa" style="white-space: nowrap;">int
- opts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_pool_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx_pool **poolp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Mutex pools are designed to be used as short term leaf mutexes;
- i.e., the last mutex one might acquire before calling
- <a class="Xr">mtx_sleep(9)</a>. They operate using a shared pool of mutexes.
- A mutex may be chosen from the pool based on a supplied pointer, which may
- or may not point to anything valid, or the caller may allocate an arbitrary
- shared mutex from the pool and save the returned mutex pointer for later
- use.</p>
-<p class="Pp">The shared mutexes in the <var class="Va">mtxpool_sleep</var>
- mutex pool, which is created by default, are standard, non-recursive,
- blockable mutexes, and should only be used in appropriate situations. The
- mutexes in the <var class="Va">mtxpool_lockbuilder</var> mutex pool are
- similar, except that they are initialized with the MTX_NOWITNESS flag so
- that they may be used to build higher-level locks. Other mutex pools may be
- created that contain mutexes with different properties, such as spin
- mutexes.</p>
-<p class="Pp">The caller can lock and unlock mutexes returned by the pool
- routines, but since the mutexes are shared, the caller should not attempt to
- destroy them or modify their characteristics. While pool mutexes are
- normally leaf mutexes (meaning that one cannot depend on any ordering
- guarantees after obtaining one), one can still obtain other mutexes under
- carefully controlled circumstances. Specifically, if one has a private mutex
- (one that was allocated and initialized by the caller), one can obtain it
- after obtaining a pool mutex if ordering issues are carefully accounted for.
- In these cases the private mutex winds up being the true leaf mutex.</p>
-<p class="Pp">Pool mutexes have the following advantages:</p>
-<p class="Pp"></p>
-<ol class="Bl-enum Bd-indent Bl-compact">
- <li>No structural overhead; i.e., they can be associated with a structure
- without adding bloat to it.</li>
- <li>Mutexes can be obtained for invalid pointers, which is useful when one
- uses mutexes to interlock destructor operations.</li>
- <li>No initialization or destruction overhead.</li>
- <li>Can be used with <a class="Xr">mtx_sleep(9)</a>.</li>
-</ol>
-<p class="Pp">And the following disadvantages:</p>
-<p class="Pp"></p>
-<ol class="Bl-enum Bd-indent Bl-compact">
- <li>Should generally only be used as leaf mutexes.</li>
- <li>Pool/pool dependency ordering cannot be guaranteed.</li>
- <li>Possible L1 cache mastership contention between CPUs.</li>
-</ol>
-<p class="Pp" id="mtx_pool_alloc"><a class="permalink" href="#mtx_pool_alloc"><code class="Fn">mtx_pool_alloc</code></a>()
- obtains a shared mutex from the specified pool. This routine uses a simple
- rover to choose one of the shared mutexes managed by the
- <code class="Nm">mtx_pool</code> subsystem.</p>
-<p class="Pp" id="mtx_pool_find"><a class="permalink" href="#mtx_pool_find"><code class="Fn">mtx_pool_find</code></a>()
- returns the shared mutex associated with the specified address. This routine
- will create a hash out of the pointer passed into it and will choose a
- shared mutex from the specified pool based on that hash. The pointer does
- not need to point to anything real.</p>
-<p class="Pp" id="mtx_pool_lock"><a class="permalink" href="#mtx_pool_lock"><code class="Fn">mtx_pool_lock</code></a>(),
- <a class="permalink" href="#mtx_pool_lock_spin"><code class="Fn" id="mtx_pool_lock_spin">mtx_pool_lock_spin</code></a>(),
- <a class="permalink" href="#mtx_pool_unlock"><code class="Fn" id="mtx_pool_unlock">mtx_pool_unlock</code></a>(),
- and
- <a class="permalink" href="#mtx_pool_unlock_spin"><code class="Fn" id="mtx_pool_unlock_spin">mtx_pool_unlock_spin</code></a>()
- lock and unlock the shared mutex from the specified pool associated with the
- specified address; they are a combination of
- <code class="Fn">mtx_pool_find</code>() and <a class="Xr">mtx_lock(9)</a>,
- <a class="Xr">mtx_lock_spin(9)</a>, <a class="Xr">mtx_unlock(9)</a>, and
- <a class="Xr">mtx_unlock_spin(9)</a>, respectively. Since these routines
- must first find the mutex to operate on, they are not as fast as directly
- using the mutex pointer returned by a previous invocation of
- <code class="Fn">mtx_pool_find</code>() or
- <code class="Fn">mtx_pool_alloc</code>().</p>
-<p class="Pp" id="mtx_pool_create"><a class="permalink" href="#mtx_pool_create"><code class="Fn">mtx_pool_create</code></a>()
- allocates and initializes a new mutex pool of the specified size. The pool
- size must be a power of two. The <var class="Fa">opts</var> argument is
- passed to <a class="Xr">mtx_init(9)</a> to set the options for each mutex in
- the pool.</p>
-<p class="Pp" id="mtx_pool_destroy"><a class="permalink" href="#mtx_pool_destroy"><code class="Fn">mtx_pool_destroy</code></a>()
- calls <a class="Xr">mtx_destroy(9)</a> on each mutex in the specified pool,
- deallocates the memory associated with the pool, and assigns NULL to the
- pool pointer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These routines first appeared in <span class="Ux">FreeBSD
- 5.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 6, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/mutex.9 4.html b/static/freebsd/man9/mutex.9 4.html
deleted file mode 100644
index f676d026..00000000
--- a/static/freebsd/man9/mutex.9 4.html
+++ /dev/null
@@ -1,456 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MUTEX(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MUTEX(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">mutex</code>, <code class="Nm">mtx_init</code>,
- <code class="Nm">mtx_destroy</code>, <code class="Nm">mtx_lock</code>,
- <code class="Nm">mtx_lock_spin</code>,
- <code class="Nm">mtx_lock_flags</code>,
- <code class="Nm">mtx_lock_spin_flags</code>,
- <code class="Nm">mtx_trylock</code>,
- <code class="Nm">mtx_trylock_flags</code>,
- <code class="Nm">mtx_trylock_spin</code>,
- <code class="Nm">mtx_trylock_spin_flags</code>,
- <code class="Nm">mtx_unlock</code>, <code class="Nm">mtx_unlock_spin</code>,
- <code class="Nm">mtx_unlock_flags</code>,
- <code class="Nm">mtx_unlock_spin_flags</code>,
- <code class="Nm">mtx_sleep</code>, <code class="Nm">mtx_initialized</code>,
- <code class="Nm">mtx_owned</code>, <code class="Nm">mtx_recursed</code>,
- <code class="Nm">mtx_assert</code>, <code class="Nm">MTX_SYSINIT</code>
- &#x2014; <span class="Nd">kernel synchronization primitives</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mutex.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *type</var>, <var class="Fa" style="white-space: nowrap;">int
- opts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_lock</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_lock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_lock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_lock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_trylock</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_trylock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_trylock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_trylock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_unlock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_unlock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_unlock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_sleep</code>(<var class="Fa" style="white-space: nowrap;">void
- *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_initialized</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_owned</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">mtx_recursed</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mtx *mutex</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">mtx_assert</code>(<var class="Fa" style="white-space: nowrap;">const
- struct mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MTX_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct mtx *mtx</var>,
- <var class="Fa" style="white-space: nowrap;">const char *description</var>,
- <var class="Fa" style="white-space: nowrap;">int opts</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Mutexes are the most basic and primary method of thread
- synchronization. The major design considerations for mutexes are:</p>
-<ol class="Bl-enum">
- <li>Acquiring and releasing uncontested mutexes should be as cheap as
- possible.</li>
- <li>They must have the information and storage space to support priority
- propagation.</li>
- <li>A thread must be able to recursively acquire a mutex, provided that the
- mutex is initialized to support recursion.</li>
-</ol>
-<p class="Pp">There are currently two flavors of mutexes, those that context
- switch when they block and those that do not.</p>
-<p class="Pp">By default, <code class="Dv">MTX_DEF</code> mutexes will context
- switch when they are already held. As an optimization, they may spin for
- some amount of time before context switching. It is important to remember
- that since a thread may be preempted at any time, the possible context
- switch introduced by acquiring a mutex is guaranteed to not break anything
- that is not already broken.</p>
-<p class="Pp">Mutexes which do not context switch are
- <code class="Dv">MTX_SPIN</code> mutexes. These should only be used to
- protect data shared with primary interrupt code. This includes interrupt
- filters and low level scheduling code. In all architectures both acquiring
- and releasing of a uncontested spin mutex is more expensive than the same
- operation on a non-spin mutex. In order to protect an interrupt service
- routine from blocking against itself all interrupts are either blocked or
- deferred on a processor while holding a spin lock. It is permissible to hold
- multiple spin mutexes.</p>
-<p class="Pp">Once a spin mutex has been acquired it is not permissible to
- acquire a blocking mutex.</p>
-<p class="Pp">The storage needed to implement a mutex is provided by a
- <var class="Vt">struct mtx</var>. In general this should be treated as an
- opaque object and referenced only with the mutex primitives.</p>
-<p class="Pp" id="mtx_init">The
- <a class="permalink" href="#mtx_init"><code class="Fn">mtx_init</code></a>()
- function must be used to initialize a mutex before it can be passed to any
- of the other mutex functions. The <var class="Fa">name</var> option is used
- to identify the lock in debugging output etc. The <var class="Fa">type</var>
- option is used by the witness code to classify a mutex when doing checks of
- lock ordering. If <var class="Fa">type</var> is
- <code class="Dv">NULL</code>, <var class="Fa">name</var> is used in its
- place. The pointer passed in as <var class="Fa">name</var> and
- <var class="Fa">type</var> is saved rather than the data it points to. The
- data pointed to must remain stable until the mutex is destroyed. The
- <var class="Fa">opts</var> argument is used to set the type of mutex. It may
- contain either <code class="Dv">MTX_DEF</code> or
- <code class="Dv">MTX_SPIN</code> but not both. If the kernel has been
- compiled with <code class="Cd">option INVARIANTS</code>,
- <code class="Fn">mtx_init</code>() will assert that the
- <var class="Fa">mutex</var> has not been initialized multiple times without
- intervening calls to <code class="Fn">mtx_destroy</code>() unless the
- <code class="Dv">MTX_NEW</code> option is specified. See below for
- additional initialization options.</p>
-<p class="Pp" id="mtx_lock">The
- <a class="permalink" href="#mtx_lock"><code class="Fn">mtx_lock</code></a>()
- function acquires a <code class="Dv">MTX_DEF</code> mutual exclusion lock on
- behalf of the currently running kernel thread. If another kernel thread is
- holding the mutex, the caller will be disconnected from the CPU until the
- mutex is available (i.e., it will block).</p>
-<p class="Pp" id="mtx_lock_spin">The
- <a class="permalink" href="#mtx_lock_spin"><code class="Fn">mtx_lock_spin</code></a>()
- function acquires a <code class="Dv">MTX_SPIN</code> mutual exclusion lock
- on behalf of the currently running kernel thread. If another kernel thread
- is holding the mutex, the caller will spin until the mutex becomes
- available. Interrupts are disabled during the spin and remain disabled
- following the acquiring of the lock.</p>
-<p class="Pp" id="mtx_init~2">It is possible for the same thread to recursively
- acquire a mutex with no ill effects, provided that the
- <code class="Dv">MTX_RECURSE</code> bit was passed to
- <a class="permalink" href="#mtx_init~2"><code class="Fn">mtx_init</code></a>()
- during the initialization of the mutex.</p>
-<p class="Pp" id="mtx_lock_flags">The
- <a class="permalink" href="#mtx_lock_flags"><code class="Fn">mtx_lock_flags</code></a>()
- and
- <a class="permalink" href="#mtx_lock_spin_flags"><code class="Fn" id="mtx_lock_spin_flags">mtx_lock_spin_flags</code></a>()
- functions acquire a <code class="Dv">MTX_DEF</code> or
- <code class="Dv">MTX_SPIN</code> lock, respectively, and also accept a
- <var class="Fa">flags</var> argument. In both cases, the only flags
- presently available for lock acquires are <code class="Dv">MTX_QUIET</code>
- and <code class="Dv">MTX_RECURSE</code>. If the
- <code class="Dv">MTX_QUIET</code> bit is turned on in the
- <var class="Fa">flags</var> argument, then if
- <code class="Dv">KTR_LOCK</code> tracing is being done, it will be silenced
- during the lock acquire. If the <code class="Dv">MTX_RECURSE</code> bit is
- turned on in the <var class="Fa">flags</var> argument, then the mutex can be
- acquired recursively.</p>
-<p class="Pp" id="mtx_trylock">The
- <a class="permalink" href="#mtx_trylock"><code class="Fn">mtx_trylock</code></a>()
- and
- <a class="permalink" href="#mtx_trylock_spin"><code class="Fn" id="mtx_trylock_spin">mtx_trylock_spin</code></a>()
- functions attempt to acquire a <code class="Dv">MTX_DEF</code> or
- <code class="Dv">MTX_SPIN</code> mutex, respectively, pointed to by
- <var class="Fa">mutex</var>. If the mutex cannot be immediately acquired,
- the functions will return 0, otherwise the mutex will be acquired and a
- non-zero value will be returned.</p>
-<p class="Pp" id="mtx_trylock_flags">The
- <a class="permalink" href="#mtx_trylock_flags"><code class="Fn">mtx_trylock_flags</code></a>()
- and
- <a class="permalink" href="#mtx_trylock_spin_flags"><code class="Fn" id="mtx_trylock_spin_flags">mtx_trylock_spin_flags</code></a>()
- functions have the same behavior as <code class="Fn">mtx_trylock</code>()
- and <code class="Fn">mtx_trylock_spin</code>() respectively, but should be
- used when the caller desires to pass in a <var class="Fa">flags</var> value.
- Presently, the only valid value in the <code class="Fn">mtx_trylock</code>()
- and <code class="Fn">mtx_trylock_spin</code>() cases is
- <code class="Dv">MTX_QUIET</code>, and its effects are identical to those
- described for <code class="Fn">mtx_lock</code>() above.</p>
-<p class="Pp" id="mtx_unlock">The
- <a class="permalink" href="#mtx_unlock"><code class="Fn">mtx_unlock</code></a>()
- function releases a <code class="Dv">MTX_DEF</code> mutual exclusion lock.
- The current thread may be preempted if a higher priority thread is waiting
- for the mutex.</p>
-<p class="Pp" id="mtx_unlock_spin">The
- <a class="permalink" href="#mtx_unlock_spin"><code class="Fn">mtx_unlock_spin</code></a>()
- function releases a <code class="Dv">MTX_SPIN</code> mutual exclusion
- lock.</p>
-<p class="Pp" id="mtx_unlock_flags">The
- <a class="permalink" href="#mtx_unlock_flags"><code class="Fn">mtx_unlock_flags</code></a>()
- and
- <a class="permalink" href="#mtx_unlock_spin_flags"><code class="Fn" id="mtx_unlock_spin_flags">mtx_unlock_spin_flags</code></a>()
- functions behave in exactly the same way as do the standard mutex unlock
- routines above, while also allowing a <var class="Fa">flags</var> argument
- which may specify <code class="Dv">MTX_QUIET</code>. The behavior of
- <code class="Dv">MTX_QUIET</code> is identical to its behavior in the mutex
- lock routines.</p>
-<p class="Pp" id="mtx_destroy">The
- <a class="permalink" href="#mtx_destroy"><code class="Fn">mtx_destroy</code></a>()
- function is used to destroy <var class="Fa">mutex</var> so the data
- associated with it may be freed or otherwise overwritten. Any mutex which is
- destroyed must previously have been initialized with
- <code class="Fn">mtx_init</code>(). It is permissible to have a single hold
- count on a mutex when it is destroyed. It is not permissible to hold the
- mutex recursively, or have another thread blocked on the mutex when it is
- destroyed.</p>
-<p class="Pp" id="mtx_sleep">The
- <a class="permalink" href="#mtx_sleep"><code class="Fn">mtx_sleep</code></a>()
- function is used to atomically release <var class="Fa">mtx</var> while
- waiting for an event. For more details on the parameters to this function,
- see <a class="Xr">sleep(9)</a>.</p>
-<p class="Pp" id="mtx_initialized">The
- <a class="permalink" href="#mtx_initialized"><code class="Fn">mtx_initialized</code></a>()
- function returns non-zero if <var class="Fa">mutex</var> has been
- initialized and zero otherwise.</p>
-<p class="Pp" id="mtx_owned">The
- <a class="permalink" href="#mtx_owned"><code class="Fn">mtx_owned</code></a>()
- function returns non-zero if the current thread holds
- <var class="Fa">mutex</var>. If the current thread does not hold
- <var class="Fa">mutex</var> zero is returned.</p>
-<p class="Pp" id="mtx_recursed">The
- <a class="permalink" href="#mtx_recursed"><code class="Fn">mtx_recursed</code></a>()
- function returns non-zero if the <var class="Fa">mutex</var> is recursed.
- This check should only be made if the running thread already owns
- <var class="Fa">mutex</var>.</p>
-<p class="Pp" id="mtx_assert">The
- <a class="permalink" href="#mtx_assert"><code class="Fn">mtx_assert</code></a>()
- function allows assertions specified in <var class="Fa">what</var> to be
- made about <var class="Fa">mutex</var>. If the assertions are not true and
- the kernel is compiled with <code class="Cd">options INVARIANTS</code> and
- <code class="Cd">options INVARIANT_SUPPORT</code>, the kernel will panic.
- Currently the following assertions are supported:</p>
-<dl class="Bl-tag">
- <dt id="MA_OWNED"><a class="permalink" href="#MA_OWNED"><code class="Dv">MA_OWNED</code></a></dt>
- <dd>Assert that the current thread holds the mutex pointed to by the first
- argument.</dd>
- <dt id="MA_NOTOWNED"><a class="permalink" href="#MA_NOTOWNED"><code class="Dv">MA_NOTOWNED</code></a></dt>
- <dd>Assert that the current thread does not hold the mutex pointed to by the
- first argument.</dd>
- <dt id="MA_RECURSED"><a class="permalink" href="#MA_RECURSED"><code class="Dv">MA_RECURSED</code></a></dt>
- <dd>Assert that the current thread has recursed on the mutex pointed to by the
- first argument. This assertion is only valid in conjunction with
- <code class="Dv">MA_OWNED</code>.</dd>
- <dt id="MA_NOTRECURSED"><a class="permalink" href="#MA_NOTRECURSED"><code class="Dv">MA_NOTRECURSED</code></a></dt>
- <dd>Assert that the current thread has not recursed on the mutex pointed to by
- the first argument. This assertion is only valid in conjunction with
- <code class="Dv">MA_OWNED</code>.</dd>
-</dl>
-<p class="Pp" id="MTX_SYSINIT">The
- <a class="permalink" href="#MTX_SYSINIT"><code class="Fn">MTX_SYSINIT</code></a>()
- macro is used to generate a call to the
- <a class="permalink" href="#mtx_sysinit"><code class="Fn" id="mtx_sysinit">mtx_sysinit</code></a>()
- routine at system startup in order to initialize a given mutex lock. The
- parameters are the same as <code class="Fn">mtx_init</code>() but with an
- additional argument, <var class="Fa">name</var>, that is used in generating
- unique variable names for the related structures associated with the lock
- and the sysinit routine.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_Default_Mutex_Type"><a class="permalink" href="#The_Default_Mutex_Type">The
- Default Mutex Type</a></h2>
-<p class="Pp">Most kernel code should use the default lock type,
- <code class="Dv">MTX_DEF</code>. The default lock type will allow the thread
- to be disconnected from the CPU if the lock is already held by another
- thread. The implementation may treat the lock as a short term spin lock
- under some circumstances. However, it is always safe to use these forms of
- locks in an interrupt thread without fear of deadlock against an interrupted
- thread on the same CPU.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_Spin_Mutex_Type"><a class="permalink" href="#The_Spin_Mutex_Type">The
- Spin Mutex Type</a></h2>
-<p class="Pp">A <code class="Dv">MTX_SPIN</code> mutex will not relinquish the
- CPU when it cannot immediately get the requested lock, but will loop,
- waiting for the mutex to be released by another CPU. This could result in
- deadlock if another thread interrupted the thread which held a mutex and
- then tried to acquire the mutex. For this reason spin locks disable all
- interrupts on the local CPU.</p>
-<p class="Pp">Spin locks are fairly specialized locks that are intended to be
- held for very short periods of time. Their primary purpose is to protect
- portions of the code that implement other synchronization primitives such as
- default mutexes, thread scheduling, and interrupt threads.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Initialization_Options"><a class="permalink" href="#Initialization_Options">Initialization
- Options</a></h2>
-<p class="Pp">The options passed in the <var class="Fa">opts</var> argument of
- <a class="permalink" href="#mtx_init~3"><code class="Fn" id="mtx_init~3">mtx_init</code></a>()
- specify the mutex type. One of the <code class="Dv">MTX_DEF</code> or
- <code class="Dv">MTX_SPIN</code> options is required and only one of those
- two options may be specified. The possibilities are:</p>
-<dl class="Bl-tag">
- <dt id="MTX_DEF"><a class="permalink" href="#MTX_DEF"><code class="Dv">MTX_DEF</code></a></dt>
- <dd>Default mutexes will always allow the current thread to be suspended to
- avoid deadlock conditions against interrupt threads. The implementation of
- this lock type may spin for a while before suspending the current
- thread.</dd>
- <dt id="MTX_SPIN"><a class="permalink" href="#MTX_SPIN"><code class="Dv">MTX_SPIN</code></a></dt>
- <dd>Spin mutexes will never relinquish the CPU. All interrupts are disabled on
- the local CPU while any spin lock is held.</dd>
- <dt id="MTX_RECURSE"><a class="permalink" href="#MTX_RECURSE"><code class="Dv">MTX_RECURSE</code></a></dt>
- <dd>Specifies that the initialized mutex is allowed to recurse. This bit must
- be present if the mutex is permitted to recurse.
- <p class="Pp" id="mtx_trylock~2">Note that neither
- <a class="permalink" href="#mtx_trylock~2"><code class="Fn">mtx_trylock</code></a>()
- nor
- <a class="permalink" href="#mtx_trylock_spin~2"><code class="Fn" id="mtx_trylock_spin~2">mtx_trylock_spin</code></a>()
- support recursion; that is, attempting to acquire an already-owned mutex
- fails.</p>
- </dd>
- <dt id="MTX_QUIET"><a class="permalink" href="#MTX_QUIET"><code class="Dv">MTX_QUIET</code></a></dt>
- <dd>Do not log any mutex operations for this lock.</dd>
- <dt id="MTX_NOWITNESS"><a class="permalink" href="#MTX_NOWITNESS"><code class="Dv">MTX_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd>
- <dt id="MTX_DUPOK"><a class="permalink" href="#MTX_DUPOK"><code class="Dv">MTX_DUPOK</code></a></dt>
- <dd>Witness should not log messages about duplicate locks being acquired.</dd>
- <dt id="MTX_NOPROFILE"><a class="permalink" href="#MTX_NOPROFILE"><code class="Dv">MTX_NOPROFILE</code></a></dt>
- <dd>Do not profile this lock.</dd>
- <dt id="MTX_NEW"><a class="permalink" href="#MTX_NEW"><code class="Dv">MTX_NEW</code></a></dt>
- <dd>Do not check for double-init.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Lock_and_Unlock_Flags"><a class="permalink" href="#Lock_and_Unlock_Flags">Lock
- and Unlock Flags</a></h2>
-<p class="Pp">The flags passed to the <code class="Fn">mtx_lock_flags</code>(),
- <code class="Fn">mtx_lock_spin_flags</code>(),
- <code class="Fn">mtx_unlock_flags</code>(), and
- <code class="Fn">mtx_unlock_spin_flags</code>() functions provide some basic
- options to the caller, and are often used only under special circumstances
- to modify lock or unlock behavior. Standard locking and unlocking should be
- performed with the <code class="Fn">mtx_lock</code>(),
- <code class="Fn">mtx_lock_spin</code>(),
- <code class="Fn">mtx_unlock</code>(), and
- <code class="Fn">mtx_unlock_spin</code>() functions. Only if a flag is
- required should the corresponding flags-accepting routines be used.</p>
-<p class="Pp">Options that modify mutex behavior:</p>
-<dl class="Bl-tag">
- <dt id="MTX_QUIET~2"><a class="permalink" href="#MTX_QUIET~2"><code class="Dv">MTX_QUIET</code></a></dt>
- <dd>This option is used to quiet logging messages during individual mutex
- operations. This can be used to trim superfluous logging messages for
- debugging purposes.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Giant"><a class="permalink" href="#Giant">Giant</a></h2>
-<p class="Pp">If <var class="Va">Giant</var> must be acquired, it must be
- acquired prior to acquiring other mutexes. Put another way: it is impossible
- to acquire <var class="Va">Giant</var> non-recursively while holding another
- mutex. It is possible to acquire other mutexes while holding
- <var class="Va">Giant</var>, and it is possible to acquire
- <var class="Va">Giant</var> recursively while holding other mutexes.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Sleeping"><a class="permalink" href="#Sleeping">Sleeping</a></h2>
-<p class="Pp">Sleeping while holding a mutex (except for
- <var class="Va">Giant</var>) is never safe and should be avoided. There are
- numerous assertions which will fail if this is attempted.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Functions_Which_Access_Memory_in_Userspace"><a class="permalink" href="#Functions_Which_Access_Memory_in_Userspace">Functions
- Which Access Memory in Userspace</a></h2>
-<p class="Pp">No mutexes should be held (except for <var class="Va">Giant</var>)
- across functions which access memory in userspace, such as
- <a class="Xr">copyin(9)</a>, <a class="Xr">copyout(9)</a>,
- <a class="Xr">uiomove(9)</a>, <a class="Xr">fuword(9)</a>, etc. No locks are
- needed when calling these functions.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">condvar(9)</a>, <a class="Xr">LOCK_PROFILING(9)</a>,
- <a class="Xr">locking(9)</a>, <a class="Xr">mtx_pool(9)</a>,
- <a class="Xr">panic(9)</a>, <a class="Xr">rwlock(9)</a>,
- <a class="Xr">sema(9)</a>, <a class="Xr">sleep(9)</a>,
- <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions appeared in <span class="Ux">BSD/OS 4.1</span> and
- <span class="Ux">FreeBSD 5.0</span>. The
- <code class="Fn">mtx_trylock_spin</code>() function was added in
- <span class="Ux">FreeBSD 11.1</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 17, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/namei.9 3.html b/static/freebsd/man9/namei.9 3.html
deleted file mode 100644
index 634973b7..00000000
--- a/static/freebsd/man9/namei.9 3.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">NAMEI(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">NAMEI(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">namei</code>, <code class="Nm">NDINIT</code>,
- <code class="Nm">NDINIT_AT</code>, <code class="Nm">NDFREE_PNBUF</code>
- &#x2014; <span class="Nd">pathname translation and lookup
- operations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/fcntl.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/namei.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">namei</code>(<var class="Fa" style="white-space: nowrap;">struct
- nameidata *ndp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">NDINIT</code>(<var class="Fa">struct nameidata *ndp</var>,
- <var class="Fa">enum nameiop op</var>, <var class="Fa">u_int64_t
- flags</var>, <var class="Fa">enum uio_seg segflg</var>,
- <var class="Fa">const char *namep</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">NDINIT_AT</code>(<var class="Fa">struct nameidata *ndp</var>,
- <var class="Fa">enum nameiop op</var>, <var class="Fa">u_int64_t
- flags</var>, <var class="Fa">enum uio_seg segflg</var>,
- <var class="Fa">const char *namep</var>, <var class="Fa">int
- dirfd</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">NDFREE_PNBUF</code>(<var class="Fa" style="white-space: nowrap;">struct
- nameidata *ndp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">namei</code> facility allows the client to
- perform pathname translation and lookup operations. The
- <code class="Nm">namei</code> functions will increment the reference count
- for the vnode in question. The reference count has to be decremented after
- use of the vnode, by using either <a class="Xr">vrele(9)</a> or
- <a class="Xr">vput(9)</a>, depending on whether the
- <code class="Dv">LOCKLEAF</code> flag was specified or not.</p>
-<p class="Pp" id="NDINIT">The
- <a class="permalink" href="#NDINIT"><code class="Fn">NDINIT</code></a>()
- macro is used to initialize <code class="Nm">namei</code> components. It
- takes the following arguments:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">ndp</var></dt>
- <dd>A pointer to the <var class="Vt">struct nameidata</var> to
- initialize.</dd>
- <dt id="namei"><var class="Fa">op</var></dt>
- <dd>The operation which
- <a class="permalink" href="#namei"><code class="Fn">namei</code></a>()
- will perform. The following operations are valid:
- <code class="Dv">LOOKUP</code>, <code class="Dv">CREATE</code>,
- <code class="Dv">DELETE</code>, and <code class="Dv">RENAME</code>. The
- latter three are just setup for those effects; just calling
- <code class="Fn">namei</code>() will not result in
- <a class="permalink" href="#VOP_RENAME"><code class="Fn" id="VOP_RENAME">VOP_RENAME</code></a>()
- being called.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>Operation flags, described in the next section. Several of these can be
- effective at the same time.</dd>
- <dt><var class="Fa">segflg</var></dt>
- <dd>UIO segment indicator. This indicates if the name of the object is in
- userspace (<code class="Dv">UIO_USERSPACE</code>) or in the kernel address
- space (<code class="Dv">UIO_SYSSPACE</code>).</dd>
- <dt><var class="Fa">namep</var></dt>
- <dd>Pointer to the component's pathname buffer (the file or directory name
- that will be looked up).</dd>
-</dl>
-<p class="Pp" id="NDINIT_AT">The
- <a class="permalink" href="#NDINIT_AT"><code class="Fn">NDINIT_AT</code></a>()
- macro is similar to <code class="Fn">NDINIT</code>(), but takes one extra
- argument:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dirfd</var></dt>
- <dd>File descriptor referencing a directory, or the special value
- <code class="Dv">AT_FDCWD</code> meaning the calling thread's current
- working directory. Lookups will be performed relative to this
- directory.</dd>
-</dl>
-<p class="Pp" id="NDFREE_PNBUF">The
- <a class="permalink" href="#NDFREE_PNBUF"><code class="Fn">NDFREE_PNBUF</code></a>()
- macro is used to free the pathname buffer. It must be called exactly once
- for each successful
- <a class="permalink" href="#namei~2"><code class="Fn" id="namei~2">namei</code></a>()
- call. It takes the following argument:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">ndp</var></dt>
- <dd>A pointer to a <var class="Vt">struct nameidata</var> that was used in a
- successful <code class="Fn">namei</code>() call.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NAMEI_OPERATION_FLAGS"><a class="permalink" href="#NAMEI_OPERATION_FLAGS">NAMEI
- OPERATION FLAGS</a></h1>
-<p class="Pp">The <code class="Fn">namei</code>() function takes the following
- set of &#x201C;operation flags&#x201D; that influence its operation:</p>
-<dl class="Bl-tag">
- <dt id="NC_NOMAKEENTRY"><a class="permalink" href="#NC_NOMAKEENTRY"><code class="Dv">NC_NOMAKEENTRY</code></a></dt>
- <dd>An alias for <code class="Dv">NOCACHE</code>.</dd>
- <dt id="NC_KEEPPOSENTRY"><a class="permalink" href="#NC_KEEPPOSENTRY"><code class="Dv">NC_KEEPPOSENTRY</code></a></dt>
- <dd>Keep the positive-caching entry in cache. This flag is typically combined
- with <code class="Dv">NOCACHE</code> to not cache a new entry, but keep
- existing one, or with <code class="Dv">MAKEENTRY</code>.</dd>
- <dt id="NOCACHE"><a class="permalink" href="#NOCACHE"><code class="Dv">NOCACHE</code></a></dt>
- <dd>Avoid <code class="Fn">namei</code>() creating this entry in the namecache
- if it is not already present. Normally, <code class="Fn">namei</code>()
- will add entries to the name cache if they are not already there.</dd>
- <dt id="LOCKLEAF"><a class="permalink" href="#LOCKLEAF"><code class="Dv">LOCKLEAF</code></a></dt>
- <dd>Lock vnode on return with <code class="Dv">LK_EXCLUSIVE</code> unless
- <code class="Dv">LOCKSHARED</code> is also set.
- <a class="Xr">VOP_UNLOCK(9)</a> should be used to release the lock (or
- <a class="Xr">vput(9)</a> which is equivalent to calling
- <a class="Xr">VOP_UNLOCK(9)</a> followed by <a class="Xr">vrele(9)</a>,
- all in one).</dd>
- <dt id="LOCKPARENT"><a class="permalink" href="#LOCKPARENT"><code class="Dv">LOCKPARENT</code></a></dt>
- <dd>This flag lets the <code class="Fn">namei</code>() function return the
- parent (directory) vnode, <var class="Va">ni_dvp</var> in locked state,
- unless it is identical to <var class="Va">ni_vp</var>, in which case
- <var class="Va">ni_dvp</var> is not locked per se (but may be locked due
- to <code class="Dv">LOCKLEAF</code>). If a lock is enforced, it should be
- released using <a class="Xr">vput(9)</a> or
- <a class="Xr">VOP_UNLOCK(9)</a> and <a class="Xr">vrele(9)</a>.</dd>
- <dt id="WANTPARENT"><a class="permalink" href="#WANTPARENT"><code class="Dv">WANTPARENT</code></a></dt>
- <dd>This flag allows the <code class="Fn">namei</code>() function to return
- the parent (directory) vnode in an unlocked state. The parent vnode must
- be released separately by using <a class="Xr">vrele(9)</a>.</dd>
- <dt id="FAILIFEXISTS"><a class="permalink" href="#FAILIFEXISTS"><code class="Dv">FAILIFEXISTS</code></a></dt>
- <dd>Makes the <code class="Nm">namei</code> operation fail if the target
- exists. It requires that the <code class="Dv">LOCKPARENT</code> flag is
- set and <code class="Dv">LOCKLEAF</code> is not.</dd>
- <dt id="FOLLOW"><a class="permalink" href="#FOLLOW"><code class="Dv">FOLLOW</code></a></dt>
- <dd>With this flag, <code class="Fn">namei</code>() will follow the symbolic
- link if the last part of the path supplied is a symbolic link (i.e., it
- will return a vnode for whatever the link points at, instead for the link
- itself).</dd>
- <dt id="EMPTYPATH"><a class="permalink" href="#EMPTYPATH"><code class="Dv">EMPTYPATH</code></a></dt>
- <dd>For <code class="Nm">namei</code> call initialized with
- <code class="Fn">NDINIT_AT</code>(), allow the <var class="Fa">namep</var>
- path to be empty. In this case, the <var class="Fa">dirfd</var> file
- descriptor may reference a file of arbitrary type, not necessary a
- directory, and lookup returns the vnode for this file.</dd>
- <dt id="LOCKSHARED"><a class="permalink" href="#LOCKSHARED"><code class="Dv">LOCKSHARED</code></a></dt>
- <dd>Lock vnode on return with <code class="Dv">LK_SHARED</code>, if permitted
- by the file system that owns the vnode. The file system must explicitly
- permit this by setting <code class="Dv">MNTK_LOOKUP_SHARED</code> in
- <code class="Dv">mp-&gt;mnt_kern_flag</code> during mount and by calling
- <a class="permalink" href="#VN_LOCK_ASHARE"><code class="Fn" id="VN_LOCK_ASHARE">VN_LOCK_ASHARE</code></a>()
- when allocating the vnode. If <code class="Dv">LOCKLEAF</code> is
- specified but shared locking is not permitted, then the vnode will be
- returned with <code class="Dv">LK_EXCLUSIVE</code>.
- <a class="Xr">VOP_UNLOCK(9)</a> should be used to release the lock (or
- <a class="Xr">vput(9)</a> which is equivalent to calling
- <a class="Xr">VOP_UNLOCK(9)</a> followed by <a class="Xr">vrele(9)</a>,
- all in one).</dd>
- <dt id="NOFOLLOW"><a class="permalink" href="#NOFOLLOW"><code class="Dv">NOFOLLOW</code></a></dt>
- <dd>Do not follow symbolic links (pseudo). This flag is not looked for by the
- actual code, which looks for <code class="Dv">FOLLOW</code>.
- <code class="Dv">NOFOLLOW</code> is used to indicate to the source code
- reader that symlinks are intentionally not followed.</dd>
- <dt id="RBENEATH"><a class="permalink" href="#RBENEATH"><code class="Dv">RBENEATH</code></a></dt>
- <dd>Requires that <code class="Nm">namei</code> did not cross the
- <var class="Fa">dirfd</var> directory. The flag is used to implement
- <code class="Dv">O_RESOLVE_BENEATH</code> flag for
- <a class="Xr">openat(2)</a>.</dd>
- <dt id="NAMEILOOKUP"><a class="permalink" href="#NAMEILOOKUP"><code class="Dv">NAMEILOOKUP</code></a></dt>
- <dd>The component is embedded in a <code class="Nm">namei</code> lookup
- structure, and the
- <a class="permalink" href="#vfs_lookup_nameidata"><code class="Fn" id="vfs_lookup_nameidata">vfs_lookup_nameidata</code></a>()
- function can be used to obtain that structure. This can be useful in
- <a class="Xr">VOP_LOOKUP(9)</a> implementations which need to obtain extra
- lookup metadata.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PARAMETERS_DESCRIPTORS_FLAGS"><a class="permalink" href="#PARAMETERS_DESCRIPTORS_FLAGS">PARAMETERS
- DESCRIPTORS FLAGS</a></h1>
-<p class="Pp">These flags are used for several purposes. Some of them affects
- the global <code class="Nm">namei</code> operation, some provide information
- for processing of the specific path element, for instance, by the
- <code class="Dv">VOP_LOOKUP</code> implementation of the involved
- filesystem.</p>
-<dl class="Bl-tag">
- <dt id="RDONLY"><a class="permalink" href="#RDONLY"><code class="Dv">RDONLY</code></a></dt>
- <dd>Specifies that the lookup should act as if the final node is located on
- read-only mount. The flag is typically used by file servers, e.g. NFS, to
- handle read-only exports.</dd>
- <dt id="ISRESTARTED"><a class="permalink" href="#ISRESTARTED"><code class="Dv">ISRESTARTED</code></a></dt>
- <dd>The <code class="Nm">namei</code> was restarted with
- <a class="permalink" href="#NDRESTART"><code class="Fn" id="NDRESTART">NDRESTART</code></a>().
- This is used internally for double-root lookups used by ABI subsystems,
- after the lookup with native root failed. The components are reset to the
- original values, and lookup is repeated with different root, once.</dd>
- <dt id="IGNOREWHITEOUT"><a class="permalink" href="#IGNOREWHITEOUT"><code class="Dv">IGNOREWHITEOUT</code></a></dt>
- <dd>Ignore whiteouts, e.g. when checking if a directory is empty.</dd>
- <dt id="ISWHITEOUT"><a class="permalink" href="#ISWHITEOUT"><code class="Dv">ISWHITEOUT</code></a></dt>
- <dd>The result of lookup is whiteout.</dd>
- <dt id="DOWHITEOUT"><a class="permalink" href="#DOWHITEOUT"><code class="Dv">DOWHITEOUT</code></a></dt>
- <dd>Handle whiteouts, the instruction for the
- <a class="permalink" href="#VOP_LOOKUP"><code class="Fn" id="VOP_LOOKUP">VOP_LOOKUP</code></a>()
- filesystem methods.</dd>
- <dt id="WILLBEDIR"><a class="permalink" href="#WILLBEDIR"><code class="Dv">WILLBEDIR</code></a></dt>
- <dd>The lookup is done for creating a new entry that will be directory. It
- allows the trailing slash in the path string.</dd>
- <dt id="ISOPEN"><a class="permalink" href="#ISOPEN"><code class="Dv">ISOPEN</code></a></dt>
- <dd>The caller is the code that opens a file. This allows to weaken the lock
- mode of the return vnode, if the mount point indicates extended shared
- lock support.</dd>
- <dt id="NOCROSSMOUNT"><a class="permalink" href="#NOCROSSMOUNT"><code class="Dv">NOCROSSMOUNT</code></a></dt>
- <dd>Do not cross mount points during lookup.
- <p class="Pp">For &#x201C;..&#x201D; lookup leading to mount root, returns
- the root vnode of the mount instead of the covered vnode of the
- filesystem where the mount was placed.</p>
- <p class="Pp">For other lookups passing over mount, do not jump into the
- mounted filesystem. This allows to descend into the file hierarchy
- otherwise shadowed by the mount point.</p>
- </dd>
- <dt id="NOMACCHECK"><a class="permalink" href="#NOMACCHECK"><code class="Dv">NOMACCHECK</code></a></dt>
- <dd>Do not perform MAC checks during lookup.</dd>
- <dt id="AUDITVNODE1"><a class="permalink" href="#AUDITVNODE1"><code class="Dv">AUDITVNODE1</code></a></dt>
- <dd>Audit the looked up vnode information, use the first slot for audit
- information.</dd>
- <dt id="AUDITVNODE2"><a class="permalink" href="#AUDITVNODE2"><code class="Dv">AUDITVNODE2</code></a></dt>
- <dd>Same as <code class="Dv">AUDITVNODE1</code> but use the second slot.</dd>
- <dt id="NOCAPCHECK"><a class="permalink" href="#NOCAPCHECK"><code class="Dv">NOCAPCHECK</code></a></dt>
- <dd>Do not perform capability checks. If the calling process is in capability
- mode, lookup is denied outright.</dd>
- <dt id="OPENREAD"><a class="permalink" href="#OPENREAD"><code class="Dv">OPENREAD</code></a></dt>
- <dd>The lookup was for open and file will be opened for read.</dd>
- <dt id="OPENWRITE"><a class="permalink" href="#OPENWRITE"><code class="Dv">OPENWRITE</code></a></dt>
- <dd>The lookup was for open and file will be opened for write.</dd>
- <dt id="WANTIOCTLCAPS"><a class="permalink" href="#WANTIOCTLCAPS"><code class="Dv">WANTIOCTLCAPS</code></a></dt>
- <dd>Leave ioctl caps for the caller. See the description of
- <code class="Nm">namei</code> results.</dd>
- <dt id="OPENNAMED"><a class="permalink" href="#OPENNAMED"><code class="Dv">OPENNAMED</code></a></dt>
- <dd>Opening a named attribute (directory).</dd>
- <dt id="NOEXECCHECK"><a class="permalink" href="#NOEXECCHECK"><code class="Dv">NOEXECCHECK</code></a></dt>
- <dd>Do not perform check for allowed execution on the starting directory. It
- is used to implement the POSIX-required semantic for
- <a class="Xr">openat(2)</a> lookups that must use the permissions from
- time the directory was opened, and not when used for lookup.</dd>
- <dt id="MAKEENTRY"><a class="permalink" href="#MAKEENTRY"><code class="Dv">MAKEENTRY</code></a></dt>
- <dd>Looked-up entry is to be added to name cache.</dd>
- <dt id="ISSYMLINK"><a class="permalink" href="#ISSYMLINK"><code class="Dv">ISSYMLINK</code></a></dt>
- <dd>Current component is symlink, and it needs the interpretation according to
- the <code class="Dv">FOLLOW</code> or <code class="Dv">NOFOLLOW</code>
- flags.</dd>
- <dt id="ISLASTCN"><a class="permalink" href="#ISLASTCN"><code class="Dv">ISLASTCN</code></a></dt>
- <dd>This is last component of pathname. It is handled specially, many flags
- augment its processing.</dd>
- <dt id="ISDOTDOT"><a class="permalink" href="#ISDOTDOT"><code class="Dv">ISDOTDOT</code></a></dt>
- <dd>Current component name is &#x201C;..&#x201D;. Usually implies a need to
- specially handle the vnode locking for instantiation of the target vnode.
- The generic
- <a class="permalink" href="#vn_vget_ino_gen"><code class="Fn" id="vn_vget_ino_gen">vn_vget_ino_gen</code></a>()
- function and its more specialized variant
- <a class="permalink" href="#vn_vget_ino"><code class="Fn" id="vn_vget_ino">vn_vget_ino</code></a>()
- might be useful.</dd>
- <dt id="TRAILINGSLASH"><a class="permalink" href="#TRAILINGSLASH"><code class="Dv">TRAILINGSLASH</code></a></dt>
- <dd>Path ended in a slash.</dd>
- <dt id="CREATENAMED"><a class="permalink" href="#CREATENAMED"><code class="Dv">CREATENAMED</code></a></dt>
- <dd>Create a named attribute dir.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ALLOCATED_ELEMENTS"><a class="permalink" href="#ALLOCATED_ELEMENTS">ALLOCATED
- ELEMENTS</a></h1>
-<p class="Pp">The <var class="Vt">nameidata</var> structure is composed of the
- following fields:</p>
-<dl class="Bl-tag">
- <dt id="ni_startdir"><var class="Va">ni_startdir</var></dt>
- <dd>In the normal case, this is either the current directory or the root. It
- is the current directory if the name passed in does not start with
- &#x2018;<code class="Li">/</code>&#x2019; and we have not gone through any
- symlinks with an absolute path, and the root otherwise.
- <p class="Pp" id="vfs_lookup">In this case, it is only used by
- <a class="permalink" href="#vfs_lookup"><code class="Fn">vfs_lookup</code></a>(),
- and should not be considered valid after a call to
- <a class="permalink" href="#namei~3"><code class="Fn" id="namei~3">namei</code></a>().</p>
- </dd>
- <dt id="ni_dvp"><var class="Va">ni_dvp</var></dt>
- <dd>Vnode pointer to directory of the object on which lookup is performed.
- This is available on successful return if
- <code class="Dv">LOCKPARENT</code> or <code class="Dv">WANTPARENT</code>
- is set. It is locked if <code class="Dv">LOCKPARENT</code> is set.</dd>
- <dt id="ni_vp"><var class="Va">ni_vp</var></dt>
- <dd>Vnode pointer to the resulting object, <code class="Dv">NULL</code>
- otherwise. The <var class="Va">v_usecount</var> field of this vnode is
- incremented. If <code class="Dv">LOCKLEAF</code> is set, it is also
- locked.</dd>
- <dt id="ni_cnd.cn_pnbuf"><var class="Va">ni_cnd.cn_pnbuf</var></dt>
- <dd>The pathname buffer contains the location of the file or directory that
- will be used by the <code class="Nm">namei</code> operations. It is
- managed by the <a class="Xr">uma(9)</a> zone allocation interface.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RESULTS"><a class="permalink" href="#RESULTS">RESULTS</a></h1>
-<p class="Pp">The <var class="Vt">struct namei</var> member
- <code class="Dv">ni_resflags</code> returns the following flags giving some
- details of the successful operation:</p>
-<dl class="Bl-tag">
- <dt id="NIRES_ABS"><a class="permalink" href="#NIRES_ABS"><code class="Dv">NIRES_ABS</code></a></dt>
- <dd>The path passed was absolute.</dd>
- <dt id="NIRES_STRICTREL"><a class="permalink" href="#NIRES_STRICTREL"><code class="Dv">NIRES_STRICTREL</code></a></dt>
- <dd>Restricted lookup result. Only relative lookups were done to resolve the
- path to vnode.</dd>
- <dt id="NIRES_EMPTYPATH"><a class="permalink" href="#NIRES_EMPTYPATH"><code class="Dv">NIRES_EMPTYPATH</code></a></dt>
- <dd>The <code class="Dv">EMPTYPATH</code> flag was provided and used. In
- particular, the passed path was empty.</dd>
-</dl>
-<p class="Pp">If the <code class="Dv">WANTIOCTLCAPS</code> flag was specified,
- on return the <var class="Va">ni_filecaps</var> member of the
- <var class="Vt">struct namei</var> contains the capabilities of the file
- descriptor used as the lookup starting point
- (<var class="Va">dirfd</var>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, <code class="Fn">namei</code>() will return 0,
- otherwise it will return an error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag">
- <dt><span class="Pa">src/sys/kern/vfs_lookup.c</span></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Assuming the <code class="Dv">path</code> variable contains a
- pointer to userspace path string, the following example looks up the file
- named by it, and performs required error and resource handling:</p>
-<div class="Bd Pp Li">
-<pre> char *path;
- struct nameidata nd;
- int error;
-
- NDINIT(&amp;nd, LOOKUP, FOLLOW | LOCKLEAF | AUDITVNODE1, UIO_USERSPACE,
- path);
- if ((error = namei(&amp;nd)) != 0)
- return (error);
- NDFREE_PNBUF(&amp;nd);
- ... use nd.ni_vp vnode</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">Errors which <code class="Fn">namei</code>() may return:</p>
-<dl class="Bl-tag">
- <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt>
- <dd>A component of the specified pathname is not a directory when a directory
- is expected.</dd>
- <dt id="ENAMETOOLONG">[<a class="permalink" href="#ENAMETOOLONG"><code class="Er">ENAMETOOLONG</code></a>]</dt>
- <dd>A component of a pathname exceeded 255 characters, or an entire pathname
- exceeded 1023 characters.</dd>
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>A component of the specified pathname does not exist, or the pathname is
- an empty string.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>An attempt is made to access a file in a way forbidden by its file access
- permissions.</dd>
- <dt id="ELOOP">[<a class="permalink" href="#ELOOP"><code class="Er">ELOOP</code></a>]</dt>
- <dd>Too many symbolic links were encountered in translating the pathname.</dd>
- <dt id="EISDIR">[<a class="permalink" href="#EISDIR"><code class="Er">EISDIR</code></a>]</dt>
- <dd>An attempt is made to open a directory with write mode specified.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The last component of the pathname specified for a
- <code class="Dv">DELETE</code> or <code class="Dv">RENAME</code> operation
- is &#x2018;<code class="Li">.</code>&#x2019;.</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>An attempt is made to modify a file or directory on a read-only file
- system.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">uio(9)</a>, <a class="Xr">uma(9)</a>,
- <a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">vput(9)</a>, <a class="Xr">vref(9)</a>,
- <a class="Xr">vrele(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Eivind
- Eklund</span>
- &lt;<a class="Mt" href="mailto:eivind@FreeBSD.org">eivind@FreeBSD.org</a>&gt;
- and later significantly revised by <span class="An">Hiten M. Pandya</span>
- &lt;<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The <code class="Dv">LOCKPARENT</code> flag does not always result
- in the parent vnode being locked. This results in complications when the
- <code class="Dv">LOCKPARENT</code> is used. In order to solve this for the
- cases where both <code class="Dv">LOCKPARENT</code> and
- <code class="Dv">LOCKLEAF</code> are used, it is necessary to resort to
- recursive locking.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 30, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/netisr.9 4.html b/static/freebsd/man9/netisr.9 4.html
deleted file mode 100644
index 0c91038b..00000000
--- a/static/freebsd/man9/netisr.9 4.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">NETISR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">NETISR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">netisr</code> &#x2014; <span class="Nd">Kernel
- network dispatch service</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">net/netisr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_register</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_unregister</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">netisr_dispatch</code>(<var class="Fa" style="white-space: nowrap;">u_int
- proto</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">netisr_dispatch_src</code>(<var class="Fa" style="white-space: nowrap;">u_int
- proto</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t
- source</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">netisr_queue</code>(<var class="Fa" style="white-space: nowrap;">u_int
- proto</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">netisr_queue_src</code>(<var class="Fa" style="white-space: nowrap;">u_int
- proto</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t
- source</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_clearqdrops</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_getqdrops</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>,
- <var class="Fa" style="white-space: nowrap;">uint64_t *qdropsp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_getqlimit</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>,
- <var class="Fa" style="white-space: nowrap;">u_int *qlimitp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">netisr_setqlimit</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>,
- <var class="Fa" style="white-space: nowrap;">u_int qlimit</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">netisr_default_flow2cpu</code>(<var class="Fa" style="white-space: nowrap;">u_int
- flowid</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">netisr_get_cpucount</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">netisr_get_cpuid</code>(<var class="Fa" style="white-space: nowrap;">u_int
- cpunumber</var>);</p>
-<p class="Pp">With optional virtual network stack support enabled via the
- following kernel compile option:</p>
-<div class="Bd Pp Bd-indent"><code class="Cd">options VIMAGE</code></div>
-<br/>
-<var class="Ft">void</var>
-<br/>
-<code class="Fn">netisr_register_vnet</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>);
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">netisr_unregister_vnet</code>(<var class="Fa" style="white-space: nowrap;">const
- struct netisr_handler *nhp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">netisr</code> kernel interface suite allows
- device drivers (and other packet sources) to direct packets to protocols for
- directly dispatched or deferred processing. Protocol registration and work
- stream statistics may be monitored using <a class="Xr">netstat(1)</a>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Protocol_registration"><a class="permalink" href="#Protocol_registration">Protocol
- registration</a></h2>
-<p class="Pp">Protocols register and unregister handlers using
- <a class="permalink" href="#netisr_register"><code class="Fn" id="netisr_register">netisr_register</code></a>()
- and
- <a class="permalink" href="#netisr_unregister"><code class="Fn" id="netisr_unregister">netisr_unregister</code></a>(),
- and may also manage queue limits and statistics using the
- <a class="permalink" href="#netisr_clearqdrops"><code class="Fn" id="netisr_clearqdrops">netisr_clearqdrops</code></a>(),
- <a class="permalink" href="#netisr_getqdrops"><code class="Fn" id="netisr_getqdrops">netisr_getqdrops</code></a>(),
- <a class="permalink" href="#netisr_getqlimit"><code class="Fn" id="netisr_getqlimit">netisr_getqlimit</code></a>(),
- and
- <a class="permalink" href="#netisr_setqlimit"><code class="Fn" id="netisr_setqlimit">netisr_setqlimit</code></a>().</p>
-<p class="Pp" id="netisr_register_vnet">In case of VIMAGE kernels each virtual
- network stack (vnet), that is not the default base system network stack,
- calls
- <a class="permalink" href="#netisr_register_vnet"><code class="Fn">netisr_register_vnet</code></a>()
- and
- <a class="permalink" href="#netisr_unregister_vnet"><code class="Fn" id="netisr_unregister_vnet">netisr_unregister_vnet</code></a>()
- to enable or disable packet processing by the <code class="Nm">netisr</code>
- for each protocol. Disabling will also purge any outstanding packet from the
- protocol queue.</p>
-<p class="Pp"><code class="Nm">netisr</code> supports multi-processor execution
- of handlers, and relies on a combination of source ordering and
- protocol-specific ordering and work-placement policies to decide how to
- distribute work across one or more worker threads. Registering protocols
- will declare one of three policies:</p>
-<dl class="Bl-tag">
- <dt id="NETISR_POLICY_SOURCE"><a class="permalink" href="#NETISR_POLICY_SOURCE"><code class="Dv">NETISR_POLICY_SOURCE</code></a></dt>
- <dd><code class="Nm">netisr</code> should maintain source ordering without
- advice from the protocol. <code class="Nm">netisr</code> will ignore any
- flow IDs present on <var class="Vt">mbuf</var> headers for the purposes of
- work placement.</dd>
- <dt id="NETISR_POLICY_FLOW"><a class="permalink" href="#NETISR_POLICY_FLOW"><code class="Dv">NETISR_POLICY_FLOW</code></a></dt>
- <dd><code class="Nm">netisr</code> should maintain flow ordering as defined by
- the <var class="Vt">mbuf</var> header flow ID field. If the protocol
- implements <var class="Va">nh_m2flow</var>, then
- <code class="Nm">netisr</code> will query the protocol in the event that
- the <var class="Vt">mbuf</var> doesn't have a flow ID, falling back on
- source ordering.</dd>
- <dt>NETISR_POLICY_CPU</dt>
- <dd><code class="Nm">netisr</code> will entirely delegate all work placement
- decisions to the protocol, querying <var class="Va">nh_m2cpuid</var> for
- each packet.</dd>
-</dl>
-<p class="Pp">Registration is declared using <var class="Vt">struct
- netisr_handler</var>, whose fields are defined as follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Vt">const char *</var> <var class="Va">nh_name</var></dt>
- <dd>Unique character string name of the protocol, which may be included in
- <a class="Xr">sysctl(3)</a> MIB names, so should not contain
- whitespace.</dd>
- <dt><var class="Vt">netisr_handler_t</var>
- <var class="Va">nh_handler</var></dt>
- <dd>Protocol handler function that will be invoked on each packet received for
- the protocol.</dd>
- <dt><var class="Vt">netisr_m2flow_t</var> <var class="Va">nh_m2flow</var></dt>
- <dd>Optional protocol function to generate a flow ID and set a valid hashtype
- for packets that enter the <code class="Nm">netisr</code> with
- <code class="Dv">M_HASHTYPE_GET(m)</code> equal to
- <code class="Dv">M_HASHTYPE_NONE</code>. Will be used only with
- <code class="Dv">NETISR_POLICY_FLOW</code>.</dd>
- <dt><var class="Vt">netisr_m2cpuid_t</var>
- <var class="Va">nh_m2cpuid</var></dt>
- <dd>Protocol function to determine what CPU a packet should be processed on.
- Will be used only with <code class="Dv">NETISR_POLICY_CPU</code>.</dd>
- <dt><var class="Vt">netisr_drainedcpu_t</var>
- <var class="Va">nh_drainedcpu</var></dt>
- <dd>Optional callback function that will be invoked when a per-CPU queue was
- drained. It will never fire for directly dispatched packets. Unless fully
- understood, this special-purpose function should not be used.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">nh_proto</var></dt>
- <dd>Protocol number used by both protocols to identify themselves to
- <code class="Nm">netisr</code>, and by packet sources to select what
- handler will be used to process packets. A table of supported protocol
- numbers appears below. For implementation reasons, protocol numbers great
- than 15 are currently unsupported.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">nh_qlimit</var></dt>
- <dd>The maximum per-CPU queue depth for the protocol; due to internal
- implementation details, the effective queue depth may be as much as twice
- this number.</dd>
- <dt><var class="Vt">u_int</var> <var class="Va">nh_policy</var></dt>
- <dd>The ordering and work placement policy for the protocol, as described
- earlier.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Packet_source_interface"><a class="permalink" href="#Packet_source_interface">Packet
- source interface</a></h2>
-<p class="Pp">Packet sources, such as network interfaces, may request protocol
- processing using the
- <a class="permalink" href="#netisr_dispatch"><code class="Fn" id="netisr_dispatch">netisr_dispatch</code></a>()
- and
- <a class="permalink" href="#netisr_queue"><code class="Fn" id="netisr_queue">netisr_queue</code></a>()
- interfaces. Both accept a protocol number and <var class="Vt">mbuf</var>
- argument, but while <code class="Fn">netisr_queue</code>() will always
- execute the protocol handler asynchronously in a deferred context,
- <code class="Fn">netisr_dispatch</code>() will optionally direct dispatch if
- permitted by global and per-protocol policy.</p>
-<p class="Pp" id="netisr_dispatch_src">In order to provide additional load
- balancing and flow information, packet sources may also specify an opaque
- source identifier, which in practice might be a network interface number or
- socket pointer, using the
- <a class="permalink" href="#netisr_dispatch_src"><code class="Fn">netisr_dispatch_src</code></a>()
- and
- <a class="permalink" href="#netisr_queue_src"><code class="Fn" id="netisr_queue_src">netisr_queue_src</code></a>()
- variants.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Protocol_number_constants"><a class="permalink" href="#Protocol_number_constants">Protocol
- number constants</a></h2>
-<p class="Pp">The follow protocol numbers are currently defined:</p>
-<dl class="Bl-tag">
- <dt id="NETISR_IP"><a class="permalink" href="#NETISR_IP"><code class="Dv">NETISR_IP</code></a></dt>
- <dd>IPv4</dd>
- <dt id="NETISR_IGMP"><a class="permalink" href="#NETISR_IGMP"><code class="Dv">NETISR_IGMP</code></a></dt>
- <dd>IGMPv3 loopback</dd>
- <dt id="NETISR_ROUTE"><a class="permalink" href="#NETISR_ROUTE"><code class="Dv">NETISR_ROUTE</code></a></dt>
- <dd>Routing socket loopback</dd>
- <dt id="NETISR_ARP"><a class="permalink" href="#NETISR_ARP"><code class="Dv">NETISR_ARP</code></a></dt>
- <dd>ARP</dd>
- <dt id="NETISR_IPV6"><a class="permalink" href="#NETISR_IPV6"><code class="Dv">NETISR_IPV6</code></a></dt>
- <dd>IPv6</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the <code class="Nm">netisr</code>
- implementation were written by <span class="An">Robert N. M.
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/nv.9 4.html b/static/freebsd/man9/nv.9 4.html
deleted file mode 100644
index 0dc22c75..00000000
--- a/static/freebsd/man9/nv.9 4.html
+++ /dev/null
@@ -1,1177 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">NV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">NV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">nvlist_create</code>,
- <code class="Nm">nvlist_destroy</code>,
- <code class="Nm">nvlist_error</code>,
- <code class="Nm">nvlist_set_error</code>,
- <code class="Nm">nvlist_empty</code>, <code class="Nm">nvlist_flags</code>,
- <code class="Nm">nvlist_exists</code>, <code class="Nm">nvlist_free</code>,
- <code class="Nm">nvlist_clone</code>, <code class="Nm">nvlist_dump</code>,
- <code class="Nm">nvlist_fdump</code>, <code class="Nm">nvlist_size</code>,
- <code class="Nm">nvlist_pack</code>, <code class="Nm">nvlist_unpack</code>,
- <code class="Nm">nvlist_send</code>, <code class="Nm">nvlist_recv</code>,
- <code class="Nm">nvlist_xfer</code>,
- <code class="Nm">nvlist_in_array</code>,
- <code class="Nm">nvlist_next</code>, <code class="Nm">nvlist_add</code>,
- <code class="Nm">nvlist_move</code>, <code class="Nm">nvlist_get</code>,
- <code class="Nm">nvlist_take</code>, <code class="Nm">nvlist_append</code>
- &#x2014; <span class="Nd">library for name/value pairs</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1>
-<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/nv.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_create</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_destroy</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvlist_error</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_set_error</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">int
- error</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_empty</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvlist_flags</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_in_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_clone</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_dump</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">int
- fd</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_fdump</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">FILE
- *fp</var>);</p>
-<p class="Pp"><var class="Ft">size_t</var>
- <br/>
- <code class="Fn">nvlist_size</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">nvlist_pack</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_unpack</code>(<var class="Fa" style="white-space: nowrap;">const
- void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvlist_send</code>(<var class="Fa" style="white-space: nowrap;">int
- sock</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t
- *nvl</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_recv</code>(<var class="Fa" style="white-space: nowrap;">int
- sock</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_xfer</code>(<var class="Fa" style="white-space: nowrap;">int
- sock</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">nvlist_next</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">int
- *typep</var>, <var class="Fa" style="white-space: nowrap;">void
- **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_type</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- type</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_null</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_number</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_string</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_binary</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_number_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_string_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_exists_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_null</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">bool
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_stringf</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *valuefmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_stringv</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char
- *valuefmt</var>, <var class="Fa" style="white-space: nowrap;">va_list
- valueap</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const void
- *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const bool
- *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const uint64_t
- *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char * const
- * value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t *
- const * value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_add_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const int
- *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">char
- *value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">void *value</var>,
- <var class="Fa" style="white-space: nowrap;">size_t size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">bool *value</var>,
- <var class="Fa" style="white-space: nowrap;">size_t nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">char
- **value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- **value</var>, <var class="Fa" style="white-space: nowrap;">size_t
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_move_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int *value</var>,
- <var class="Fa" style="white-space: nowrap;">size_t nitems</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">nvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">nvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">const void *</var>
- <br/>
- <code class="Fn">nvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>);</p>
-<p class="Pp"><var class="Ft">const bool *</var>
- <br/>
- <code class="Fn">nvlist_get_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">const uint64_t *</var>
- <br/>
- <code class="Fn">nvlist_get_number_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">const char * const *</var>
- <br/>
- <code class="Fn">nvlist_get_string_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t * const *</var>
- <br/>
- <code class="Fn">nvlist_get_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">const int *</var>
- <br/>
- <code class="Fn">nvlist_get_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_get_parent</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">void
- **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_get_array_next</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>);</p>
-<p class="Pp"><var class="Ft">const nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_get_pararr</code>(<var class="Fa" style="white-space: nowrap;">const
- nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">void
- **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">nvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">nvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">nvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">nvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">nvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *sizep</var>);</p>
-<p class="Pp"><var class="Ft">bool *</var>
- <br/>
- <code class="Fn">nvlist_take_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t **</var>
- <br/>
- <code class="Fn">nvlist_take_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">char **</var>
- <br/>
- <code class="Fn">nvlist_take_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">nvlist_t **</var>
- <br/>
- <code class="Fn">nvlist_take_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">int *</var>
- <br/>
- <code class="Fn">nvlist_take_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_append_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const bool
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_append_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_append_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const char * const
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_append_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t *
- const value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_append_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_type</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- type</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_null</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">nvlist_free_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">libnv</code> library permits creating and
- managing name value pairs as well as sending and receiving them over
- sockets. A group (list) of name value pairs is called an
- <code class="Nm">nvlist</code>. The API supports the following data types
- for values:</p>
-<dl class="Bl-ohang Bd-indent">
- <dt id="null"><a class="permalink" href="#null"><b class="Sy">null</b></a>
- (<a class="permalink" href="#NV_TYPE_NULL"><b class="Sy" id="NV_TYPE_NULL">NV_TYPE_NULL</b></a>)</dt>
- <dd>There is no data associated with the name.</dd>
- <dt id="bool"><a class="permalink" href="#bool"><b class="Sy">bool</b></a>
- (<a class="permalink" href="#NV_TYPE_BOOL"><b class="Sy" id="NV_TYPE_BOOL">NV_TYPE_BOOL</b></a>)</dt>
- <dd>The value can be either <code class="Dv">true</code> or
- <code class="Dv">false</code>.</dd>
- <dt id="number"><a class="permalink" href="#number"><b class="Sy">number</b></a>
- (<a class="permalink" href="#NV_TYPE_NUMBER"><b class="Sy" id="NV_TYPE_NUMBER">NV_TYPE_NUMBER</b></a>)</dt>
- <dd>The value is a number stored as <var class="Vt">uint64_t</var>.</dd>
- <dt id="string"><a class="permalink" href="#string"><b class="Sy">string</b></a>
- (<a class="permalink" href="#NV_TYPE_STRING"><b class="Sy" id="NV_TYPE_STRING">NV_TYPE_STRING</b></a>)</dt>
- <dd>The value is a C string.</dd>
- <dt id="nvlist"><a class="permalink" href="#nvlist"><b class="Sy">nvlist</b></a>
- (<a class="permalink" href="#NV_TYPE_NVLIST"><b class="Sy" id="NV_TYPE_NVLIST">NV_TYPE_NVLIST</b></a>)</dt>
- <dd>The value is a nested nvlist.</dd>
- <dt id="descriptor"><a class="permalink" href="#descriptor"><b class="Sy">descriptor</b></a>
- (<a class="permalink" href="#NV_TYPE_DESCRIPTOR"><b class="Sy" id="NV_TYPE_DESCRIPTOR">NV_TYPE_DESCRIPTOR</b></a>)</dt>
- <dd>The value is a file descriptor. Note that file descriptors can be sent
- only over <a class="Xr">unix(4)</a> domain sockets.</dd>
- <dt id="binary"><a class="permalink" href="#binary"><b class="Sy">binary</b></a>
- (<a class="permalink" href="#NV_TYPE_BINARY"><b class="Sy" id="NV_TYPE_BINARY">NV_TYPE_BINARY</b></a>)</dt>
- <dd>The value is a binary buffer.</dd>
- <dt id="NV_TYPE_BOOL_ARRAY"><b class="Sy">bool array</b>
- (<a class="permalink" href="#NV_TYPE_BOOL_ARRAY"><b class="Sy">NV_TYPE_BOOL_ARRAY</b></a>)</dt>
- <dd>The value is an array of boolean values.</dd>
- <dt id="NV_TYPE_NUMBER_ARRAY"><b class="Sy">number array</b>
- (<a class="permalink" href="#NV_TYPE_NUMBER_ARRAY"><b class="Sy">NV_TYPE_NUMBER_ARRAY</b></a>)</dt>
- <dd>The value is an array of numbers, each stored as
- <var class="Vt">uint64_t</var>.</dd>
- <dt id="NV_TYPE_STRING_ARRAY"><b class="Sy">string array</b>
- (<a class="permalink" href="#NV_TYPE_STRING_ARRAY"><b class="Sy">NV_TYPE_STRING_ARRAY</b></a>)</dt>
- <dd>The value is an array of C strings.</dd>
- <dt id="NV_TYPE_NVLIST_ARRAY"><b class="Sy">nvlist array</b>
- (<a class="permalink" href="#NV_TYPE_NVLIST_ARRAY"><b class="Sy">NV_TYPE_NVLIST_ARRAY</b></a>)</dt>
- <dd>The value is an array of nvlists. When an nvlist is added to an array, it
- becomes part of the primary nvlist. Traversing these arrays can be done
- using the
- <a class="permalink" href="#nvlist_get_array_next"><code class="Fn" id="nvlist_get_array_next">nvlist_get_array_next</code></a>()
- and <code class="Fn">nvlist_get_pararr</code>() functions.</dd>
- <dt id="NV_TYPE_DESCRIPTOR_ARRAY"><b class="Sy">descriptor array</b>
- (<a class="permalink" href="#NV_TYPE_DESCRIPTOR_ARRAY"><b class="Sy">NV_TYPE_DESCRIPTOR_ARRAY</b></a>)</dt>
- <dd>The value is an array of files descriptors.</dd>
-</dl>
-<p class="Pp" id="nvlist_create">The
- <a class="permalink" href="#nvlist_create"><code class="Fn">nvlist_create</code></a>()
- function allocates memory and initializes an nvlist.</p>
-<p class="Pp">The following flags can be provided:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="NV_FLAG_IGNORE_CASE"><a class="permalink" href="#NV_FLAG_IGNORE_CASE"><code class="Dv">NV_FLAG_IGNORE_CASE</code></a></dt>
- <dd>Perform case-insensitive lookups of provided names.</dd>
- <dt id="NV_FLAG_NO_UNIQUE"><a class="permalink" href="#NV_FLAG_NO_UNIQUE"><code class="Dv">NV_FLAG_NO_UNIQUE</code></a></dt>
- <dd>Names in the nvlist do not have to be unique.</dd>
-</dl>
-</div>
-<p class="Pp" id="nvlist_destroy">The
- <a class="permalink" href="#nvlist_destroy"><code class="Fn">nvlist_destroy</code></a>()
- function destroys the given nvlist. This function does nothing if
- <var class="Fa">nvl</var> is <code class="Dv">NULL</code>. This function
- never modifies <var class="Va">errno</var>.</p>
-<p class="Pp" id="nvlist_error">The
- <a class="permalink" href="#nvlist_error"><code class="Fn">nvlist_error</code></a>()
- function returns the first error set on <var class="Fa">nvl</var>. If
- <var class="Fa">nvl</var> is not in the error state, this function returns
- zero. If <var class="Fa">nvl</var> is <code class="Dv">NULL</code>,
- <code class="Er">ENOMEM</code> is returned.</p>
-<p class="Pp" id="nvlist_set_error">The
- <a class="permalink" href="#nvlist_set_error"><code class="Fn">nvlist_set_error</code></a>()
- function sets an the error value for <var class="Fa">nvl</var>. Subsequent
- calls to <code class="Fn">nvlist_error</code>() will return
- <var class="Fa">error</var>. This function cannot be used to clear the error
- state from an nvlist. This function does nothing if the nvlist is already in
- the error state.</p>
-<p class="Pp" id="nvlist_empty">The
- <a class="permalink" href="#nvlist_empty"><code class="Fn">nvlist_empty</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">nvl</var>
- is empty and <code class="Dv">false</code> otherwise. The nvlist must not be
- in the error state.</p>
-<p class="Pp" id="nvlist_flags">The
- <a class="permalink" href="#nvlist_flags"><code class="Fn">nvlist_flags</code></a>()
- function returns the flags used to create <var class="Fa">nvl</var> with the
- <code class="Fn">nvlist_create</code>(),
- <code class="Fn">nvlist_recv</code>(),
- <code class="Fn">nvlist_unpack</code>(), or
- <code class="Fn">nvlist_xfer</code>() functions.</p>
-<p class="Pp" id="nvlist_in_array">The
- <a class="permalink" href="#nvlist_in_array"><code class="Fn">nvlist_in_array</code></a>()
- function returns <code class="Dv">true</code> if <var class="Fa">nvl</var>
- is part of an array that is a member of another nvlist.</p>
-<p class="Pp" id="nvlist_clone">The
- <a class="permalink" href="#nvlist_clone"><code class="Fn">nvlist_clone</code></a>()
- function clones <var class="Fa">nvl</var>. The clone shares no resources
- with its origin. This also means that all file descriptors that are part of
- the nvlist will be duplicated with the <a class="Xr">dup(2)</a> system call
- before placing them in the clone.</p>
-<p class="Pp" id="nvlist_dump">The
- <a class="permalink" href="#nvlist_dump"><code class="Fn">nvlist_dump</code></a>()
- function dumps nvlist content for debugging purposes to the file descriptor
- <var class="Fa">fd</var>.</p>
-<p class="Pp" id="nvlist_fdump">The
- <a class="permalink" href="#nvlist_fdump"><code class="Fn">nvlist_fdump</code></a>()
- dumps nvlist content for debugging purposes to the file stream
- <var class="Fa">fp</var>.</p>
-<p class="Pp" id="nvlist_size">The
- <a class="permalink" href="#nvlist_size"><code class="Fn">nvlist_size</code></a>()
- function returns the size of the binary buffer that would be generated by
- the <code class="Fn">nvlist_pack</code>() function.</p>
-<p class="Pp" id="nvlist_pack">The
- <a class="permalink" href="#nvlist_pack"><code class="Fn">nvlist_pack</code></a>()
- function converts the given nvlist to a binary buffer. The function
- allocates memory for the buffer which should be freed with the
- <a class="Xr">free(3)</a> function. If the <var class="Fa">sizep</var>
- argument is not <code class="Dv">NULL</code>, the size of the buffer is
- stored there. This function returns <code class="Dv">NULL</code> in case of
- an error (allocation failure). If the nvlist contains any file descriptors
- <code class="Dv">NULL</code> will be returned. The nvlist must not be in the
- error state.</p>
-<p class="Pp" id="nvlist_unpack">The
- <a class="permalink" href="#nvlist_unpack"><code class="Fn">nvlist_unpack</code></a>()
- function converts a binary buffer to a new nvlist. The
- <var class="Fa">flags</var> argument has the same meaning as the
- <var class="Fa">flags</var> argument passed to
- <code class="Fn">nvlist_create</code>(). If <var class="Fa">flags</var> do
- not match the flags used to create the initial nvlist before it was packed,
- this function will fail. The flags of nested nvlists are not validated by
- this function. The caller is responsible for validating the flags on any
- nested nvlists using <code class="Fn">nvlist_flags</code>(). This function
- returns the new nvlist on success or <code class="Dv">NULL</code> in case of
- an error.</p>
-<p class="Pp" id="nvlist_send">The
- <a class="permalink" href="#nvlist_send"><code class="Fn">nvlist_send</code></a>()
- function sends <var class="Fa">nvl</var> over the socket
- <var class="Fa">sock</var>. Note that nvlists that contain file descriptors
- can only be sent over <a class="Xr">unix(4)</a> domain sockets.</p>
-<p class="Pp" id="nvlist_recv">The
- <a class="permalink" href="#nvlist_recv"><code class="Fn">nvlist_recv</code></a>()
- function receives an nvlist over the socket <var class="Fa">sock</var>. As
- with <code class="Fn">nvlist_unpack</code>(), the
- <var class="Fa">flags</var> argument is used to construct the new nvlist and
- must match the flags used to construct the original nvlist written to
- <var class="Fa">sock</var> by the peer. The flags of nested nvlists are not
- validated by this function. The caller is responsible for validating the
- flags on any nested nvlists using <code class="Fn">nvlist_flags</code>().
- This function returns the new nvlist on success or
- <code class="Dv">NULL</code> in case of an error.</p>
-<p class="Pp" id="nvlist_xfer">The
- <a class="permalink" href="#nvlist_xfer"><code class="Fn">nvlist_xfer</code></a>()
- function sends <var class="Fa">nvl</var> over the socket
- <var class="Fa">sock</var> argument and then receives a new nvlist over the
- same socket. The <var class="Fa">flags</var> argument applies to the new
- nvlist similar to <code class="Fn">nvlist_recv</code>(). The nvlist
- <var class="Fa">nvl</var> is always destroyed. This function returns the new
- nvlist on success or <code class="Dv">NULL</code> in case of an error.</p>
-<p class="Pp" id="nvlist_next">The
- <a class="permalink" href="#nvlist_next"><code class="Fn">nvlist_next</code></a>()
- function iterates over <var class="Fa">nvl</var> returning the names and
- types of subsequent elements. The <var class="Fa">cookiep</var> argument
- determines which element is returned. If <var class="Va">*cookiep</var> is
- <code class="Dv">NULL</code>, the values for the first element in the list
- are returned. Otherwise, <var class="Va">*cookiep</var> should contain the
- result of a prior call to <code class="Fn">nvlist_next</code>() in which
- case values for the next element from <var class="Fa">nvl</var> are
- returned. This function returns <code class="Dv">NULL</code> when there are
- no more elements on <var class="Fa">nvl</var>. The
- <var class="Fa">typep</var> argument can be <code class="Dv">NULL</code>.
- Elements may not be removed from <var class="Fa">nvl</var> the nvlist while
- traversing it. <var class="Fa">nvl</var> must not be in the error state.
- Additional actions can be performed on an element identified by a cookie via
- the <a class="Xr">cnv(9)</a> API .</p>
-<p class="Pp" id="nvlist_exists">The
- <a class="permalink" href="#nvlist_exists"><code class="Fn">nvlist_exists</code></a>()
- function returns <code class="Dv">true</code> if an element named
- <var class="Fa">name</var> exists in <var class="Fa">nvl</var> (regardless
- of type) or <code class="Dv">false</code> otherwise. The nvlist must not be
- in the error state.</p>
-<p class="Pp" id="nvlist_exists_type">The
- <a class="permalink" href="#nvlist_exists_type"><code class="Fn">nvlist_exists_type</code></a>()
- function returns <code class="Dv">true</code> if an element named
- <var class="Fa">name</var> of type <var class="Fa">type</var> exists or
- <code class="Dv">false</code> otherwise. The nvlist must not be in the error
- state.</p>
-<p class="Pp" id="nvlist_exists_null">The
- <a class="permalink" href="#nvlist_exists_null"><code class="Fn">nvlist_exists_null</code></a>(),
- <a class="permalink" href="#nvlist_exists_bool"><code class="Fn" id="nvlist_exists_bool">nvlist_exists_bool</code></a>(),
- <a class="permalink" href="#nvlist_exists_number"><code class="Fn" id="nvlist_exists_number">nvlist_exists_number</code></a>(),
- <a class="permalink" href="#nvlist_exists_string"><code class="Fn" id="nvlist_exists_string">nvlist_exists_string</code></a>(),
- <a class="permalink" href="#nvlist_exists_nvlist"><code class="Fn" id="nvlist_exists_nvlist">nvlist_exists_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_exists_descriptor"><code class="Fn" id="nvlist_exists_descriptor">nvlist_exists_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_exists_binary"><code class="Fn" id="nvlist_exists_binary">nvlist_exists_binary</code></a>(),
- <a class="permalink" href="#nvlist_exists_bool_array"><code class="Fn" id="nvlist_exists_bool_array">nvlist_exists_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_exists_number_array"><code class="Fn" id="nvlist_exists_number_array">nvlist_exists_number_array</code></a>(),
- <a class="permalink" href="#nvlist_exists_string_array"><code class="Fn" id="nvlist_exists_string_array">nvlist_exists_string_array</code></a>(),
- <a class="permalink" href="#nvlist_exists_nvlist_array"><code class="Fn" id="nvlist_exists_nvlist_array">nvlist_exists_nvlist_array</code></a>(),
- <a class="permalink" href="#nvlist_exists_descriptor_array"><code class="Fn" id="nvlist_exists_descriptor_array">nvlist_exists_descriptor_array</code></a>()
- functions return <code class="Dv">true</code> if element named
- <var class="Fa">name</var> with the type determined by the function name
- exists or <code class="Dv">false</code> otherwise. The nvlist must not be in
- the error state.</p>
-<p class="Pp" id="nvlist_add_null">The
- <a class="permalink" href="#nvlist_add_null"><code class="Fn">nvlist_add_null</code></a>(),
- <a class="permalink" href="#nvlist_add_bool"><code class="Fn" id="nvlist_add_bool">nvlist_add_bool</code></a>(),
- <a class="permalink" href="#nvlist_add_number"><code class="Fn" id="nvlist_add_number">nvlist_add_number</code></a>(),
- <a class="permalink" href="#nvlist_add_string"><code class="Fn" id="nvlist_add_string">nvlist_add_string</code></a>(),
- <a class="permalink" href="#nvlist_add_stringf"><code class="Fn" id="nvlist_add_stringf">nvlist_add_stringf</code></a>(),
- <a class="permalink" href="#nvlist_add_stringv"><code class="Fn" id="nvlist_add_stringv">nvlist_add_stringv</code></a>(),
- <a class="permalink" href="#nvlist_add_nvlist"><code class="Fn" id="nvlist_add_nvlist">nvlist_add_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_add_descriptor"><code class="Fn" id="nvlist_add_descriptor">nvlist_add_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_add_binary"><code class="Fn" id="nvlist_add_binary">nvlist_add_binary</code></a>(),
- <a class="permalink" href="#nvlist_add_bool_array"><code class="Fn" id="nvlist_add_bool_array">nvlist_add_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_add_number_array"><code class="Fn" id="nvlist_add_number_array">nvlist_add_number_array</code></a>(),
- <a class="permalink" href="#nvlist_add_string_array"><code class="Fn" id="nvlist_add_string_array">nvlist_add_string_array</code></a>(),
- <code class="Fn">nvlist_add_nvlist_array</code>(),
- <a class="permalink" href="#nvlist_add_descriptor_array"><code class="Fn" id="nvlist_add_descriptor_array">nvlist_add_descriptor_array</code></a>()
- functions add an element to <var class="Fa">nvl</var>. When adding a string
- or binary buffer, these functions allocate memory and copy the data. When
- adding an nvlist, the <var class="Fa">value</var> nvlist is cloned and the
- clone is added to <var class="Fa">nvl</var>. When adding a file descriptor,
- the descriptor is duplicated via the <a class="Xr">dup(2)</a> system call
- and the new file descriptor is added. The array functions fail if there are
- any <code class="Dv">NULL</code> elements in the array, or if the array
- pointer is <code class="Dv">NULL</code>. If an error occurs while adding a
- new element, an internal error is set which can be examined using the
- <code class="Fn">nvlist_error</code>() function.</p>
-<p class="Pp" id="nvlist_move_string">The
- <a class="permalink" href="#nvlist_move_string"><code class="Fn">nvlist_move_string</code></a>(),
- <a class="permalink" href="#nvlist_move_nvlist"><code class="Fn" id="nvlist_move_nvlist">nvlist_move_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_move_descriptor"><code class="Fn" id="nvlist_move_descriptor">nvlist_move_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_move_binary"><code class="Fn" id="nvlist_move_binary">nvlist_move_binary</code></a>(),
- <a class="permalink" href="#nvlist_move_bool_array"><code class="Fn" id="nvlist_move_bool_array">nvlist_move_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_move_number_array"><code class="Fn" id="nvlist_move_number_array">nvlist_move_number_array</code></a>(),
- <a class="permalink" href="#nvlist_move_string_array"><code class="Fn" id="nvlist_move_string_array">nvlist_move_string_array</code></a>(),
- <code class="Fn">nvlist_move_nvlist_array</code>(),
- <a class="permalink" href="#nvlist_move_descriptor_array"><code class="Fn" id="nvlist_move_descriptor_array">nvlist_move_descriptor_array</code></a>()
- functions add an element to <var class="Fa">nvl</var>, but unlike the
- <a class="permalink" href="#nvlist_add__type_"><code class="Fn" id="nvlist_add__type_">nvlist_add_&lt;type&gt;</code></a>()
- functions they consume the given resource. For string, file descriptor,
- binary buffer, or nvlist values, no value should be moved into an nvlist
- multiple times; doing so will cause that value to be freed multiple times.
- Note that strings or binary buffers must be allocated with
- <a class="Xr">malloc(3)</a>, and the pointers will be released via
- <a class="Xr">free(3)</a> when <var class="Fa">nvl</var> is destroyed. The
- array functions fail if there are any <code class="Dv">NULL</code> elements,
- or if the array pointer is <code class="Dv">NULL</code>. If an error occurs
- while adding new element, the resource is destroyed and an internal error is
- set which can be examined using the <code class="Fn">nvlist_error</code>()
- function.</p>
-<p class="Pp" id="nvlist_get_bool">The
- <a class="permalink" href="#nvlist_get_bool"><code class="Fn">nvlist_get_bool</code></a>(),
- <a class="permalink" href="#nvlist_get_number"><code class="Fn" id="nvlist_get_number">nvlist_get_number</code></a>(),
- <a class="permalink" href="#nvlist_get_string"><code class="Fn" id="nvlist_get_string">nvlist_get_string</code></a>(),
- <a class="permalink" href="#nvlist_get_nvlist"><code class="Fn" id="nvlist_get_nvlist">nvlist_get_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_get_descriptor"><code class="Fn" id="nvlist_get_descriptor">nvlist_get_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_get_binary"><code class="Fn" id="nvlist_get_binary">nvlist_get_binary</code></a>(),
- <a class="permalink" href="#nvlist_get_bool_array"><code class="Fn" id="nvlist_get_bool_array">nvlist_get_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_get_number_array"><code class="Fn" id="nvlist_get_number_array">nvlist_get_number_array</code></a>(),
- <a class="permalink" href="#nvlist_get_string_array"><code class="Fn" id="nvlist_get_string_array">nvlist_get_string_array</code></a>(),
- <a class="permalink" href="#nvlist_get_nvlist_array"><code class="Fn" id="nvlist_get_nvlist_array">nvlist_get_nvlist_array</code></a>(),
- <a class="permalink" href="#nvlist_get_descriptor_array"><code class="Fn" id="nvlist_get_descriptor_array">nvlist_get_descriptor_array</code></a>()
- functions return the value of the first element in <var class="Fa">nvl</var>
- named <var class="Fa">name</var>. For string, nvlist, file descriptor,
- binary buffer, or array values, the returned resource must not be modified -
- it still belongs to <var class="Fa">nvl</var>.</p>
-<p class="Pp">If an element named <var class="Fa">name</var> does not exist, the
- program aborts. To avoid this, the caller should check for the existence of
- the element before trying to obtain the value or use the
- <a class="Xr">dnv(9)</a> extension which provides a default value in the
- case of a missing element.</p>
-<p class="Pp">The nvlist must not be in the error state.</p>
-<p class="Pp" id="nvlist_get_parent">The
- <a class="permalink" href="#nvlist_get_parent"><code class="Fn">nvlist_get_parent</code></a>()
- function returns the parent nvlist of <var class="Fa">nvl</var>.</p>
-<p class="Pp" id="nvlist_get_array_next~2">The
- <a class="permalink" href="#nvlist_get_array_next~2"><code class="Fn">nvlist_get_array_next</code></a>()
- function returns the next element after <var class="Fa">nvl</var> from an
- array of nvlists. If <var class="Fa">nvl</var> is not in an array of nvlists
- or it is the last element, this function returns
- <code class="Dv">NULL</code>. An nvlist is only in an nvlist array if it was
- added to an nvlist array using
- <a class="permalink" href="#nvlist_add_nvlist_array"><code class="Fn" id="nvlist_add_nvlist_array">nvlist_add_nvlist_array</code></a>(),
- <a class="permalink" href="#nvlist_append_nvlist_array"><code class="Fn" id="nvlist_append_nvlist_array">nvlist_append_nvlist_array</code></a>(),
- or
- <a class="permalink" href="#nvlist_move_nvlist_array"><code class="Fn" id="nvlist_move_nvlist_array">nvlist_move_nvlist_array</code></a>().</p>
-<p class="Pp" id="nvlist_get_pararr">The
- <a class="permalink" href="#nvlist_get_pararr"><code class="Fn">nvlist_get_pararr</code></a>()
- function returns the next element after
- <a class="permalink" href="#nvl"><code class="Fn" id="nvl">nvl</code></a>()
- from an array of nvlists. If <code class="Fn">nvl</code>() is the last
- element in an array of nvlists, the parent nvlist of <var class="Fa">nvl
- is</var> returned. If <code class="Fn">nvl</code>() is not in an array of
- nvlists, <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp" id="nvlist_take_bool">The
- <a class="permalink" href="#nvlist_take_bool"><code class="Fn">nvlist_take_bool</code></a>(),
- <a class="permalink" href="#nvlist_take_number"><code class="Fn" id="nvlist_take_number">nvlist_take_number</code></a>(),
- <a class="permalink" href="#nvlist_take_string"><code class="Fn" id="nvlist_take_string">nvlist_take_string</code></a>(),
- <a class="permalink" href="#nvlist_take_nvlist"><code class="Fn" id="nvlist_take_nvlist">nvlist_take_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_take_descriptor"><code class="Fn" id="nvlist_take_descriptor">nvlist_take_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_take_binary"><code class="Fn" id="nvlist_take_binary">nvlist_take_binary</code></a>(),
- <a class="permalink" href="#nvlist_take_bool_array"><code class="Fn" id="nvlist_take_bool_array">nvlist_take_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_take_number_array"><code class="Fn" id="nvlist_take_number_array">nvlist_take_number_array</code></a>(),
- <a class="permalink" href="#nvlist_take_string_array"><code class="Fn" id="nvlist_take_string_array">nvlist_take_string_array</code></a>(),
- <a class="permalink" href="#nvlist_take_nvlist_array"><code class="Fn" id="nvlist_take_nvlist_array">nvlist_take_nvlist_array</code></a>(),
- <a class="permalink" href="#nvlist_take_descriptor_array"><code class="Fn" id="nvlist_take_descriptor_array">nvlist_take_descriptor_array</code></a>()
- functions return the value of the element named <var class="Fa">name</var>
- and remove the element from <var class="Fa">nvl</var>. For string and binary
- buffer values, the caller is responsible for freeing the returned value
- using the <a class="Xr">free(3)</a> function. For nvlist values, the caller
- is responsible for destroying the returned nvlist using the
- <code class="Fn">nvlist_destroy</code>() function. For file descriptor
- values, the caller is responsible for closing the returned descriptor using
- the
- <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>)
- system call. For array values, the caller is responsible for destroying
- every element of the array based on the element type. In addition, the
- caller must also free the pointer to the array using the
- <a class="Xr">free(3)</a> function.</p>
-<p class="Pp">If an element named <var class="Fa">name</var> does not exist, the
- program aborts. To avoid this, the caller should check for the existence of
- the element before trying to obtain the value or use the
- <a class="Xr">dnv(9)</a> extension which provides a default value in the
- case of a missing element.</p>
-<p class="Pp">The nvlist must not be in the error state.</p>
-<p class="Pp" id="nvlist_append_bool_array">The
- <a class="permalink" href="#nvlist_append_bool_array"><code class="Fn">nvlist_append_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_append_number_array"><code class="Fn" id="nvlist_append_number_array">nvlist_append_number_array</code></a>(),
- <a class="permalink" href="#nvlist_append_string_array"><code class="Fn" id="nvlist_append_string_array">nvlist_append_string_array</code></a>(),
- <code class="Fn">nvlist_append_nvlist_array</code>(),
- <a class="permalink" href="#nvlist_append_descriptor_array"><code class="Fn" id="nvlist_append_descriptor_array">nvlist_append_descriptor_array</code></a>()
- functions append an element to an existing array using the same semantics as
- the add functions (that is, the element will be copied when applicable). If
- the array named <var class="Fa">name</var> does not exist, then it will be
- created as if using the
- <a class="permalink" href="#nvlist_add__type__array"><code class="Fn" id="nvlist_add__type__array">nvlist_add_&lt;type&gt;_array</code></a>()
- function. If an error occurs while appending a new element, an internal
- error is set on <var class="Fa">nvl</var>.</p>
-<p class="Pp" id="nvlist_free">The
- <a class="permalink" href="#nvlist_free"><code class="Fn">nvlist_free</code></a>()
- function removes the first element named <var class="Fa">name</var> from
- <var class="Fa">nvl</var> (regardless of type) and frees all resources
- associated with it. If no element named <var class="Fa">name</var> exists,
- the program aborts. The nvlist must not be in the error state.</p>
-<p class="Pp" id="nvlist_free_type">The
- <a class="permalink" href="#nvlist_free_type"><code class="Fn">nvlist_free_type</code></a>()
- function removes the first element named <var class="Fa">name</var> of type
- <var class="Fa">type</var> from <var class="Fa">nvl</var> and frees all
- resources associated with it. If no element named <var class="Fa">name</var>
- of type <var class="Fa">type</var> exists, the program aborts. The nvlist
- must not be in the error state.</p>
-<p class="Pp" id="nvlist_free_null">The
- <a class="permalink" href="#nvlist_free_null"><code class="Fn">nvlist_free_null</code></a>(),
- <a class="permalink" href="#nvlist_free_bool"><code class="Fn" id="nvlist_free_bool">nvlist_free_bool</code></a>(),
- <a class="permalink" href="#nvlist_free_number"><code class="Fn" id="nvlist_free_number">nvlist_free_number</code></a>(),
- <a class="permalink" href="#nvlist_free_string"><code class="Fn" id="nvlist_free_string">nvlist_free_string</code></a>(),
- <a class="permalink" href="#nvlist_free_nvlist"><code class="Fn" id="nvlist_free_nvlist">nvlist_free_nvlist</code></a>(),
- <a class="permalink" href="#nvlist_free_descriptor"><code class="Fn" id="nvlist_free_descriptor">nvlist_free_descriptor</code></a>(),
- <a class="permalink" href="#nvlist_free_binary"><code class="Fn" id="nvlist_free_binary">nvlist_free_binary</code></a>(),
- <a class="permalink" href="#nvlist_free_bool_array"><code class="Fn" id="nvlist_free_bool_array">nvlist_free_bool_array</code></a>(),
- <a class="permalink" href="#nvlist_free_number_array"><code class="Fn" id="nvlist_free_number_array">nvlist_free_number_array</code></a>(),
- <a class="permalink" href="#nvlist_free_string_array"><code class="Fn" id="nvlist_free_string_array">nvlist_free_string_array</code></a>(),
- <a class="permalink" href="#nvlist_free_nvlist_array"><code class="Fn" id="nvlist_free_nvlist_array">nvlist_free_nvlist_array</code></a>(),
- <a class="permalink" href="#nvlist_free_descriptor_array"><code class="Fn" id="nvlist_free_descriptor_array">nvlist_free_descriptor_array</code></a>()
- functions remove the first element named <var class="Fa">name</var> with the
- type determined by the function name from <var class="Fa">nvl</var> free all
- resources associated with it. If no element named <var class="Fa">name</var>
- with the appropriate type exists, the program aborts. The nvlist must not be
- in the error state.</p>
-<section class="Ss">
-<h2 class="Ss" id="Notes"><a class="permalink" href="#Notes">Notes</a></h2>
-<p class="Pp">The <code class="Fn">nvlist_pack</code>() and
- <code class="Fn">nvlist_unpack</code>() functions handle byte-order
- conversions, so binary buffers can be packed and unpacked on hosts with
- different endianness.</p>
-<p class="Pp" id="nvlist_recv~2">The
- <a class="permalink" href="#nvlist_recv~2"><code class="Fn">nvlist_recv</code></a>(),
- <code class="Fn">nvlist_send</code>(), and
- <code class="Fn">nvlist_xfer</code>() functions can transfer nvlists between
- hosts with different endianness.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Kernel_Considerations"><a class="permalink" href="#Kernel_Considerations">Kernel
- Considerations</a></h2>
-<p class="Pp">The <code class="Nm">nv</code>, <code class="Nm">cnv</code>, and
- <code class="Nm">dnv</code> APIs can be used in the kernel with the
- following differences:</p>
-<ul class="Bl-bullet">
- <li>File descriptor and file descriptor array value types are not
- supported.</li>
- <li><code class="Fn">nvlist_recv</code>(),
- <code class="Fn">nvlist_send</code>(), and
- <code class="Fn">nvlist_xfer</code>() are not supported.</li>
- <li>All memory allocations use the <code class="Dv">M_NVLIST</code> memory
- type with <a class="Xr">malloc(9)</a> and <a class="Xr">free(9)</a>. As a
- result, any allocated buffers moved into an nvlist must be allocated with
- <code class="Dv">M_NVLIST</code>, and buffers returned by functions such
- as <code class="Fn">nvlist_pack</code>() must be freed with
- <code class="Dv">M_NVLIST</code>.</li>
-</ul>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following example demonstrates how to prepare an nvlist and
- send it over a <a class="Xr">unix(4)</a> domain socket.</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl;
-int fd;
-
-fd = open(&quot;/tmp/foo&quot;, O_RDONLY);
-if (fd &lt; 0)
- err(1, &quot;open(\&quot;/tmp/foo\&quot;) failed&quot;);
-
-nvl = nvlist_create(0);
-
-/*
- * There is no need to check if nvlist_create() succeeded
- * as the nvlist_add_&lt;type&gt;() functions can cope.
- * If it failed, nvlist_send() will fail.
- */
-nvlist_add_string(nvl, &quot;filename&quot;, &quot;/tmp/foo&quot;);
-nvlist_add_number(nvl, &quot;flags&quot;, O_RDONLY);
-
-/*
- * We just want to send the descriptor, so we can give it
- * for the nvlist to consume (that is why we use nvlist_move
- * not nvlist_add).
- */
-nvlist_move_descriptor(nvl, &quot;fd&quot;, fd);
-if (nvlist_send(sock, nvl) &lt; 0) {
- nvlist_destroy(nvl);
- err(1, &quot;nvlist_send() failed&quot;);
-}
-nvlist_destroy(nvl);</pre>
-</div>
-<p class="Pp">Receiving an nvlist and retrieving element values:</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl;
-const char *command;
-char *filename;
-int fd;
-
-nvl = nvlist_recv(sock, 0);
-if (nvl == NULL)
- err(1, &quot;nvlist_recv() failed&quot;);
-
-/* For command we accept a pointer to the nvlist's internal buffer. */
-command = nvlist_get_string(nvl, &quot;command&quot;);
-
-/*
- * For filename we remove it from the nvlist and take
- * ownership of the buffer.
- */
-filename = nvlist_take_string(nvl, &quot;filename&quot;);
-
-/* The same for the file descriptor. */
-fd = nvlist_take_descriptor(nvl, &quot;fd&quot;);
-
-printf(&quot;command=%s filename=%s fd=%d0, command, filename, fd);
-
-/* command is freed by nvlist_destroy() */
-nvlist_destroy(nvl);
-free(filename);
-close(fd);</pre>
-</div>
-<p class="Pp">Iterating over an nvlist:</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl;
-const char *name;
-void *cookie;
-int type;
-
-nvl = nvlist_recv(sock, 0);
-if (nvl == NULL)
- err(1, &quot;nvlist_recv() failed&quot;);
-
-cookie = NULL;
-while ((name = nvlist_next(nvl, &amp;type, &amp;cookie)) != NULL) {
- printf(&quot;%s=&quot;, name);
- switch (type) {
- case NV_TYPE_NUMBER:
- printf(&quot;%ju&quot;, (uintmax_t)nvlist_get_number(nvl, name));
- break;
- case NV_TYPE_STRING:
- printf(&quot;%s&quot;, nvlist_get_string(nvl, name));
- break;
- default:
- printf(&quot;N/A&quot;);
- break;
- }
- printf(&quot;\n&quot;);
-}</pre>
-</div>
-<p class="Pp">Iterating over every nested nvlist:</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl;
-const char *name;
-void *cookie;
-int type;
-
-nvl = nvlist_recv(sock, 0);
-if (nvl == NULL)
- err(1, &quot;nvlist_recv() failed&quot;);
-
-cookie = NULL;
-do {
- while ((name = nvlist_next(nvl, &amp;type, &amp;cookie)) != NULL) {
- if (type == NV_TYPE_NVLIST) {
- nvl = nvlist_get_nvlist(nvl, name);
- cookie = NULL;
- }
- }
-} while ((nvl = nvlist_get_parent(nvl, &amp;cookie)) != NULL);</pre>
-</div>
-<p class="Pp">Iterating over every nested nvlist and every nvlist element:</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl;
-const nvlist_t * const *array;
-const char *name;
-void *cookie;
-int type;
-
-nvl = nvlist_recv(sock, 0);
-if (nvl == null)
- err(1, &quot;nvlist_recv() failed&quot;);
-
-cookie = NULL;
-do {
- while ((name = nvlist_next(nvl, &amp;type, &amp;cookie)) != NULL) {
- if (type == NV_TYPE_NVLIST) {
- nvl = nvlist_get_nvlist(nvl, name);
- cookie = NULL;
- } else if (type == NV_TYPE_NVLIST_ARRAY) {
- nvl = nvlist_get_nvlist_array(nvl, name, NULL)[0];
- cookie = NULL;
- }
- }
-} while ((nvl = nvlist_get_pararr(nvl, &amp;cookie)) != NULL);</pre>
-</div>
-<p class="Pp">Or alternatively:</p>
-<div class="Bd Pp Li">
-<pre>nvlist_t *nvl, *tmp;
-const nvlist_t * const *array;
-const char *name;
-void *cookie;
-int type;
-
-nvl = nvlist_recv(sock, 0);
-if (nvl == null)
- err(1, &quot;nvlist_recv() failed&quot;);
-
-cooke = NULL;
-tmp = nvl;
-do {
- do {
- nvl = tmp;
- while ((name = nvlist_next(nvl, &amp;type, &amp;cookie)) != NULL) {
- if (type == NV_TYPE_NVLIST) {
- nvl = nvlist_get_nvlist(nvl, name);
- cookie = NULL;
- } else if (type == NV_TYPE_NVLIST_ARRAY) {
- nvl = nvlist_get_nvlist_array(nvl, name,
- NULL)[0];
- cookie = NULL;
- }
- }
- cookie = NULL;
- } while ((tmp = nvlist_get_array_next(nvl)) != NULL);
-} while ((tmp = nvlist_get_parent(nvl, &amp;cookie)) != NULL);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">dup(2)</a>,
- <a class="Xr">open(2)</a>, <a class="Xr">err(3)</a>,
- <a class="Xr">free(3)</a>, <a class="Xr">printf(3)</a>,
- <a class="Xr">unix(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">libnv</code> library appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">libnv</code> library was implemented by
- <span class="An">Pawel Jakub Dawidek</span>
- &lt;<a class="Mt" href="mailto:pawel@dawidek.net">pawel@dawidek.net</a>&gt;
- under sponsorship from the FreeBSD Foundation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/nvmem.9 3.html b/static/freebsd/man9/nvmem.9 3.html
deleted file mode 100644
index 291f9867..00000000
--- a/static/freebsd/man9/nvmem.9 3.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">nvmem(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">nvmem(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">nvmem</code>,
- <code class="Nm">nvmem_get_cell_len</code>,
- <code class="Nm">nvmem_read_cell_by_name</code>,
- <code class="Nm">nvmem_read_cell_by_idx</code>,
- <code class="Nm">nvmem_write_cell_by_name</code>,
- <code class="Nm">nvmem_write_cell_by_idx</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options FDT</code>
- <br/>
- <code class="Cd">device nvmem</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/extres/nvmem/nvmem.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvmem_get_cell_len</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvmem_read_cell_by_name</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">void *cell</var>,
- <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvmem_read_cell_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">int idx</var>,
- <var class="Fa" style="white-space: nowrap;">void *cell</var>,
- <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvmem_write_cell_by_name</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">void *cell</var>,
- <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">nvmem_write_cell_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">int idx</var>,
- <var class="Fa" style="white-space: nowrap;">void *cell</var>,
- <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">On some embedded boards, the manufacturer stored some data on a
- NVMEM (Non-Volatile Memory), this is generally stored in some eeprom or
- fuses.</p>
-<p class="Pp">The <code class="Nm">nvmem</code> API consist of helpers functions
- for consumer and device methods for providers.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<dl class="Bl-tag">
- <dt id="nvmem_get_cell_len"><a class="permalink" href="#nvmem_get_cell_len"><code class="Fn">nvmem_get_cell_len</code></a>(<var class="Fa">phandle_t
- node</var>, <var class="Fa">const char *name</var>)</dt>
- <dd>Get the size of the cell base on the reg property on the node. Return the
- size or ENOENT if the cell name wasn't found</dd>
- <dt id="nvmem_read_cell_by_name"><a class="permalink" href="#nvmem_read_cell_by_name"><code class="Fn">nvmem_read_cell_by_name</code></a>(<var class="Fa">phandle_t
- node</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *cell</var>, <var class="Fa">size_t buflen</var>)</dt>
- <dd>Get the cell content based on the name. Return 0 on success or ENOENT if
- the cell doesn't exists, ENXIO if no provider device was found, EINVAL if
- the size isn't correct.</dd>
- <dt id="nvmem_read_cell_by_idx"><a class="permalink" href="#nvmem_read_cell_by_idx"><code class="Fn">nvmem_read_cell_by_idx</code></a>(<var class="Fa">phandle_t
- node</var>, <var class="Fa">int idx</var>, <var class="Fa">void *cell</var>,
- <var class="Fa">size_t buflen</var>)</dt>
- <dd>Get the cell content based on the id. Return 0 on success or ENOENT if the
- cell doesn't exists, ENXIO if no provider device was found, EINVAL if the
- size isn't correct.</dd>
- <dt id="nvmem_write_cell_by_name"><a class="permalink" href="#nvmem_write_cell_by_name"><code class="Fn">nvmem_write_cell_by_name</code></a>(<var class="Fa">phandle_t
- node</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *cell</var>, <var class="Fa">size_t buflen</var>)</dt>
- <dd>Write the cell content based on the name. Return 0 on success or ENOENT if
- the cell doesn't exists, ENXIO if no provider device was found, EINVAL if
- the size isn't correct.</dd>
- <dt id="nvmem_write_cell_by_idx"><a class="permalink" href="#nvmem_write_cell_by_idx"><code class="Fn">nvmem_write_cell_by_idx</code></a>(<var class="Fa">phandle_t
- node</var>, <var class="Fa">int idx</var>, <var class="Fa">void *cell</var>,
- <var class="Fa">size_t buflen</var>)</dt>
- <dd>Write the cell content based on the id. Return 0 on success or ENOENT if
- the cell doesn't exists, ENXIO if no provider device was found, EINVAL if
- the size isn't correct.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DEVICE_METHODS"><a class="permalink" href="#DEVICE_METHODS">DEVICE
- METHODS</a></h1>
-<dl class="Bl-tag">
- <dt id="nvmem_read"><a class="permalink" href="#nvmem_read"><code class="Fn">nvmem_read</code></a>(<var class="Fa">device_t
- dev</var>, <var class="Fa">uint32_t offset</var>, <var class="Fa">uint32_t
- size</var>, <var class="Fa">uint8_t *buffer</var>)</dt>
- <dd>Provider device method to read a cell content.</dd>
- <dt id="nvmem_write"><a class="permalink" href="#nvmem_write"><code class="Fn">nvmem_write</code></a>(<var class="Fa">device_t
- dev</var>, <var class="Fa">uint32_t offset</var>, <var class="Fa">uint32_t
- size</var>, <var class="Fa">uint8_t *buffer</var>)</dt>
- <dd>Provider device method to write a cell content.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Consider this DTS</p>
-<div class="Bd Pp Li">
-<pre>/* Provider */
-eeprom: eeprom@20000 {
- board_id: id@0 {
- reg = &lt;0x0 0x4&gt;;
- };
-};
-/* Consumer */
-device@30000 {
- ...
-
- nvmem-cells = &lt;&amp;board_id&gt;
- nvmem-cell-names = &quot;boardid&quot;;
-};</pre>
-</div>
-<p class="Pp">The device driver for eeprom@20000 needs to expose itself as a
- provider</p>
-<div class="Bd Pp Li">
-<pre>#include &quot;nvmem_if.h&quot;
-
-int
-foo_nvmem_read(device_t dev, uint32_t offset, uint32_t size, uint8_t *buffer)
-{
- /* Read the data */
-}
-
-int
-foo_attach(device_t dev)
-{
- phandle_t node;
-
- node = ofw_bus_get_node(dev);
- ...
- /* Registering the device so the consumers can find us */
- OF_device_register_xref(OF_xref_from_node(node), dev);
-
- ...
-}
-
-static device_method_t foo_methods[] = {
- ...
-
- /* nvmem interface */
- DEVMETHOD(nvmem_read, foo_nvmem_read),
-
- /* Terminate method list */
- DEVMETHOD_END
-};</pre>
-</div>
-<p class="Pp">The consumer device driver for device@30000 can now read the nvmem
- data</p>
-<div class="Bd Pp Li">
-<pre>int
-bar_attach(device_t dev)
-{
- phandle_t node;
- uint32_t boardid;
-
- ...
- node = ofw_bus_get_node(dev);
- nvmem_read_cell_by_name(node, &quot;boardid&quot;, (void *)&amp;boardid, sizeof(boardid));
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The nvmem related function first appear in
- <span class="Ux">FreeBSD 12.0</span>. The nvmem interface and manual page
- was written by <span class="An">Emmanuel Vadot</span>
- &lt;<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ofw_bus_is_compatible.9 3.html b/static/freebsd/man9/ofw_bus_is_compatible.9 3.html
deleted file mode 100644
index 55f3b28c..00000000
--- a/static/freebsd/man9/ofw_bus_is_compatible.9 3.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ofw_bus_is_compatible(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ofw_bus_is_compatible(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ofw_bus_is_compatible</code>,
- <code class="Nm">ofw_bus_is_compatible_strict</code>,
- <code class="Nm">ofw_bus_node_is_compatible</code>,
- <code class="Nm">ofw_bus_search_compatible</code> &#x2014;
- <span class="Nd">check device tree nodes for compatibility with
- drivers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/openfirm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ofw_bus_is_compatible</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *compatstr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ofw_bus_is_compatible_strict</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *compatstr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ofw_bus_node_is_compatible</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">const char
- *compatstr</var>);</p>
-<p class="Pp"><var class="Ft">const struct ofw_compat_data *</var>
- <br/>
- <code class="Fn">ofw_bus_search_compatible</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const struct
- ofw_compat_data *compat</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The &quot;compatible&quot; property of the device tree node is
- used to identify the type of the device the node represents. The property is
- a list of one or more strings that represent hardware types the device is
- compatible with. The common format for such strings is
- &quot;vendor,hardware&quot; where &quot;vendor&quot; is an abbreviated name
- of the manufacturer and &quot;hardware&quot; is a device identifier, for
- instance, &quot;fsl&quot; for &quot;Freescale&quot; and
- &quot;imx6ul-i2c&quot; for the I2C controller. More than one string is
- required for compatibility with older revisions of the driver. If hardware
- revision B is backward compatible with revision A device tree node can
- signal this compatibility by providing both &quot;vndr,hrdwrA&quot; and
- &quot;vndr,hrdwrB&quot; strings in the &quot;compatible&quot; property
- value. This way older driver can use features available only in revision A,
- and the new version of the driver can take advantage of revision B feature
- set.</p>
-<p class="Pp" id="ofw_bus_is_compatible"><a class="permalink" href="#ofw_bus_is_compatible"><code class="Fn">ofw_bus_is_compatible</code></a>()
- returns 1 if the <var class="Fa">compatstr</var> value occurs in the
- &quot;compatible&quot; property list of the device tree node associated with
- the device <var class="Fa">dev</var>, and 0 otherwise.</p>
-<p class="Pp" id="ofw_bus_is_compatible_strict"><a class="permalink" href="#ofw_bus_is_compatible_strict"><code class="Fn">ofw_bus_is_compatible_strict</code></a>()
- return 1 if the &quot;compatible&quot; property of the device tree node
- associated with the device <var class="Fa">dev</var> consists of only one
- string and this string is equal to <var class="Fa">compatstr</var>, and 0
- otherwise.</p>
-<p class="Pp" id="ofw_bus_node_is_compatible"><a class="permalink" href="#ofw_bus_node_is_compatible"><code class="Fn">ofw_bus_node_is_compatible</code></a>()
- returns 1 if the <var class="Fa">compatstr</var> value occurs in the
- &quot;compatible&quot; property list of the device tree node
- <var class="Fa">node</var>, and 0 otherwise.</p>
-<p class="Pp" id="ofw_bus_search_compatible"><a class="permalink" href="#ofw_bus_search_compatible"><code class="Fn">ofw_bus_search_compatible</code></a>()
- returns pointer to the first entry of the <var class="Fa">compat</var> table
- whose ocd_str field occurs in &quot;compatible&quot; property of the device
- tree node associated with the device <var class="Fa">dev</var>. The
- <var class="Fa">compat</var> table is an array of struct ofw_compat_data
- elements defined as follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct ofw_compat_data {
- const char *ocd_str;
- uintptr_t ocd_data;
-};</pre>
-</div>
-The <var class="Fa">compat</var> table must be terminated by the entry with
- ocd_str set to NULL. If the device tree node is not compatible with any of the
- entries, the function returns the pointer to the terminating entry.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Bd-indent Li">
-<pre>static struct ofw_compat_data compat_data[] = {
- {&quot;arm,hrdwrA&quot;, FEATURE_A},
- {&quot;arm,hrdwrB&quot;, FEATURE_A | FEATURE_B},
- {NULL, 0}
-};
-
-static int
-hrdwr_probe(device_t dev)
-{
- ...
- if (!ofw_bus_search_compatible(dev, compat_data)-&gt;ocd_data)
- return (ENXIO);
- ...
-}
-
-static int
-hrdwr_attach(device_t dev)
-{
- ...
- sc = device_get_softc(dev);
- sc-&gt;sc_features = ofw_bus_search_compatible(dev, compat_data)-&gt;ocd_data;
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ofw_bus_find_compatible(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 8, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ofw_bus_status_okay.9 4.html b/static/freebsd/man9/ofw_bus_status_okay.9 4.html
deleted file mode 100644
index 4134ab44..00000000
--- a/static/freebsd/man9/ofw_bus_status_okay.9 4.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ofw_bus_status_okay(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ofw_bus_status_okay(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ofw_bus_get_status</code>,
- <code class="Nm">ofw_bus_status_okay</code>,
- <code class="Nm">ofw_bus_node_status_okay</code> &#x2014;
- <span class="Nd">check status of the device tree node</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/openfirm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/ofw/ofw_bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_bus_subr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">ofw_bus_get_status</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ofw_bus_status_okay</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ofw_bus_node_status_okay</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The &quot;status&quot; property of the device tree node indicates
- whether the device is enabled or not. Multiple hardware versions might be
- built using the same base System-on-Chip but with a different set of blocks
- enabled. It is common to use SoC device tree and only enable/disable device
- nodes for the derivative boards. The device tree node is considered enabled
- only if it has &quot;status&quot; property with the value set to either
- &quot;ok&quot; or &quot;okay&quot;.</p>
-<p class="Pp" id="ofw_bus_get_status"><a class="permalink" href="#ofw_bus_get_status"><code class="Fn">ofw_bus_get_status</code></a>()
- returns the value of the &quot;status&quot; property of the device tree node
- associated with the device <var class="Fa">dev</var>. If the node does not
- have &quot;status&quot; property or there is no node associated with the
- device the function returns NULL.</p>
-<p class="Pp" id="ofw_bus_status_okay"><a class="permalink" href="#ofw_bus_status_okay"><code class="Fn">ofw_bus_status_okay</code></a>()
- returns 1 if the device tree node associated with the device
- <var class="Fa">dev</var> has &quot;status&quot; property and its value is
- either &quot;ok&quot; or &quot;okay&quot;.</p>
-<p class="Pp" id="ofw_bus_node_status_okay"><a class="permalink" href="#ofw_bus_node_status_okay"><code class="Fn">ofw_bus_node_status_okay</code></a>()
- returns 1 if the device tree node <var class="Fa">node</var> has
- &quot;status&quot; property and its value is either &quot;ok&quot; or
- &quot;okay&quot;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Oleksandr
- Tymoshenko</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 8, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ofw_graph.9 4.html b/static/freebsd/man9/ofw_graph.9 4.html
deleted file mode 100644
index 3f04803c..00000000
--- a/static/freebsd/man9/ofw_graph.9 4.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ofw_graph(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ofw_graph(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ofw_graph</code>,
- <code class="Nm">ofw_graph_get_port_by_idx</code>,
- <code class="Nm">ofw_graph_port_get_num_endpoints</code>,
- <code class="Nm">ofw_graph_get_endpoint_by_idx</code>,
- <code class="Nm">ofw_graph_get_remote_endpoint</code>,
- <code class="Nm">ofw_graph_get_remote_parent</code>,
- <code class="Nm">ofw_graph_get_device_by_port_ep</code> &#x2014;
- <span class="Nd">Helpers for the graph bindings</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/ofw/openfirm.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/ofw/ofw_graph.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">ofw_graph_get_port_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- idx</var>);</p>
-<p class="Pp"><var class="Ft">size_t</var>
- <br/>
- <code class="Fn">ofw_graph_port_get_num_endpoints</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- port</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">ofw_graph_get_endpoint_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- port</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- idx</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">ofw_graph_get_remote_endpoint</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- endpoint</var>);</p>
-<p class="Pp"><var class="Ft">phandle_t</var>
- <br/>
- <code class="Fn">ofw_graph_get_remote_parent</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- remote</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">ofw_graph_get_device_by_port_ep</code>(<var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- port_id</var>, <var class="Fa" style="white-space: nowrap;">uin32_t
- ep_id</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The ofw_graph functions are helpers to parse the DTS graph
- bindings</p>
-<p class="Pp" id="ofw_graph_get_port_by_idx"><a class="permalink" href="#ofw_graph_get_port_by_idx"><code class="Fn">ofw_graph_get_port_by_idx</code></a>()
- return the port with id <var class="Fa">idx</var>. It will first check node
- named <var class="Fa">port@idx</var> and then fallback on checking the
- <var class="Fa">ports</var> child for a child node matching the id. If no
- ports matching <var class="Fa">idx</var> is found the function return 0.</p>
-<p class="Pp" id="ofw_graph_port_get_num_endpoints"><a class="permalink" href="#ofw_graph_port_get_num_endpoints"><code class="Fn">ofw_graph_port_get_num_endpoints</code></a>()
- returns the number of endpoints a port node have.</p>
-<p class="Pp" id="ofw_graph_get_endpoint_by_idx"><a class="permalink" href="#ofw_graph_get_endpoint_by_idx"><code class="Fn">ofw_graph_get_endpoint_by_idx</code></a>()
- return the endpoint with id <var class="Fa">idx</var>. It will first check
- if there is a single child named <var class="Fa">endpoint</var> and returns
- it if there is. If there is multiple endpoints it will check the
- <var class="Fa">reg</var> property and returns the correct
- <var class="Fa">phandle_t</var> or 0 if none match.</p>
-<p class="Pp" id="ofw_graph_get_remote_endpoint"><a class="permalink" href="#ofw_graph_get_remote_endpoint"><code class="Fn">ofw_graph_get_remote_endpoint</code></a>()
- returns the <var class="Fa">remote-endpoint</var> property if it exists or
- 0.</p>
-<p class="Pp" id="ofw_graph_get_remote_parent"><a class="permalink" href="#ofw_graph_get_remote_parent"><code class="Fn">ofw_graph_get_remote_parent</code></a>()
- returns the device node corresponding to the
- <var class="Fa">remote-endpoint</var> phandle or 0 if none.
- <a class="permalink" href="#ofw_graph_get_device_by_port_ep"><code class="Fn" id="ofw_graph_get_device_by_port_ep">ofw_graph_get_device_by_port_ep</code></a>()
- returns the device associated with the port and endpoint or
- <var class="Fa">NULL</var> if none. The device driver should have called
- <a class="permalink" href="#OF_device_register_xref"><code class="Fn" id="OF_device_register_xref">OF_device_register_xref</code></a>()
- before.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">ofw_graph</code> functions first appeared in
- <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">ofw_graph</code>
- functions and manual page were written by <span class="An">Emmanuel
- Vadot</span>
- &lt;<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 10, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/osd.9 4.html b/static/freebsd/man9/osd.9 4.html
deleted file mode 100644
index 622db548..00000000
--- a/static/freebsd/man9/osd.9 4.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OSD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OSD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">osd</code>, <code class="Nm">osd_register</code>,
- <code class="Nm">osd_deregister</code>, <code class="Nm">osd_set</code>,
- <code class="Nm">osd_reserve</code>,
- <code class="Nm">osd_set_reserved</code>,
- <code class="Nm">osd_free_reserved</code>, <code class="Nm">osd_get</code>,
- <code class="Nm">osd_del</code>, <code class="Nm">osd_call</code>,
- <code class="Nm">osd_exit</code> &#x2014; <span class="Nd">Object Specific
- Data</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/osd.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">typedef void</var>
- <br/>
- <code class="Fn">(*osd_destructor_t)</code>(<var class="Fa" style="white-space: nowrap;">void
- *value</var>);</p>
-<p class="Pp"><var class="Ft">typedef int</var>
- <br/>
- <code class="Fn">(*osd_method_t)</code>(<var class="Fa" style="white-space: nowrap;">void
- *obj</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">osd_register</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">osd_destructor_t destructor</var>, <var class="Fa">const
- osd_method_t *methods</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">osd_deregister</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">u_int slot</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">osd_set</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int slot</var>,
- <var class="Fa">void *value</var>);</p>
-<p class="Pp"><var class="Ft">void **</var>
- <br/>
- <code class="Fn">osd_reserve</code>(<var class="Fa">u_int slot</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">osd_set_reserved</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int slot</var>,
- <var class="Fa">void **rsv</var>, <var class="Fa">void *value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">osd_free_reserved</code>(<var class="Fa">void
- **rsv</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">osd_get</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int
- slot</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">osd_del</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int
- slot</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">osd_call</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">u_int method</var>, <var class="Fa">void *obj</var>,
- <var class="Fa">void *data</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">osd_exit</code>(<var class="Fa">u_int type</var>,
- <var class="Fa">struct osd *osd</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">osd</code> framework provides a mechanism to
- dynamically associate arbitrary data at run-time with any kernel data
- structure which has been suitably modified for use with
- <code class="Nm">osd</code>. The one-off modification required involves
- embedding a <var class="Vt">struct osd</var> inside the kernel data
- structure.</p>
-<p class="Pp">An additional benefit is that after the initial change to a
- structure is made, all subsequent use of <code class="Nm">osd</code> with
- the structure involves no changes to the structure's layout. By extension,
- if the data structure is part of the ABI, <code class="Nm">osd</code>
- provides a way of extending the structure in an ABI preserving manner.</p>
-<p class="Pp">The details of the embedded <var class="Vt">struct osd</var> are
- not relevant to consumers of the <code class="Nm">osd</code> framework and
- should not be manipulated directly.</p>
-<p class="Pp" id="osd_register">Data associated with a structure is referenced
- by the <code class="Nm">osd</code> framework using a type/slot identifier
- pair. Types are statically defined in
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> and provide a
- high-level grouping for slots to be registered under. Slot identifiers are
- dynamically assigned by the framework when a data type is registered using
- <a class="permalink" href="#osd_register"><code class="Fn">osd_register</code></a>()
- and remains valid until a corresponding call to
- <code class="Fn">osd_deregister</code>().</p>
-<section class="Ss">
-<h2 class="Ss" id="Functions"><a class="permalink" href="#Functions">Functions</a></h2>
-<p class="Pp">The <code class="Fn">osd_register</code>() function registers a
- type/slot identifier pair with the <code class="Nm">osd</code> framework for
- use with a new data type. The function may sleep and therefore cannot be
- called from a non-sleepable context. The <var class="Fa">type</var> argument
- specifies which high-level type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> the slot
- identifier should be allocated under. The <var class="Fa">destructor</var>
- argument specifies an optional osd_destructor_t function pointer that will
- be called for objects of the type being registered which are later destroyed
- by the <code class="Fn">osd_del</code>() function. NULL may be passed if no
- destructor is required. The <var class="Fa">methods</var> argument specifies
- an optional array of osd_method_t function pointers which can be later
- invoked by the <code class="Fn">osd_call</code>() function. NULL may be
- passed if no methods are required. The <var class="Fa">methods</var>
- argument is currently only useful with the OSD_JAIL type identifier.</p>
-<p class="Pp" id="osd_deregister">The
- <a class="permalink" href="#osd_deregister"><code class="Fn">osd_deregister</code></a>()
- function deregisters a previously registered type/slot identifier pair. The
- function may sleep and therefore cannot be called from a non-sleepable
- context. The <var class="Fa">type</var> argument specifies which high-level
- type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> the slot
- identifier is allocated under. The <var class="Fa">slot</var> argument
- specifies the slot identifier which is being deregistered and should be the
- value that was returned by <code class="Fn">osd_register</code>() when the
- data type was registered.</p>
-<p class="Pp" id="osd_set">The
- <a class="permalink" href="#osd_set"><code class="Fn">osd_set</code></a>()
- function associates a data object pointer with a kernel data structure's
- <var class="Vt">struct osd</var> member. The <var class="Fa">type</var>
- argument specifies which high-level type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> the slot
- identifier is allocated under. The <var class="Fa">osd</var> argument is a
- pointer to the kernel data structure's <var class="Vt">struct osd</var>
- which will have the <var class="Fa">value</var> pointer associated with it.
- The <var class="Fa">slot</var> argument specifies the slot identifier to
- assign the <var class="Fa">value</var> pointer to. The
- <var class="Fa">value</var> argument points to a data object to associate
- with <var class="Fa">osd</var>.</p>
-<p class="Pp" id="osd_set_reserved">The
- <a class="permalink" href="#osd_set_reserved"><code class="Fn">osd_set_reserved</code></a>()
- function does the same as <code class="Fn">osd_set</code>(), but with an
- extra argument <var class="Fa">rsv</var> that is internal-use memory
- previously allocated via
- <a class="permalink" href="#osd_reserve"><code class="Fn" id="osd_reserve">osd_reserve</code></a>().</p>
-<p class="Pp" id="osd_get">The
- <a class="permalink" href="#osd_get"><code class="Fn">osd_get</code></a>()
- function returns the data pointer associated with a kernel data structure's
- <var class="Vt">struct osd</var> member from the specified type/slot
- identifier pair. The <var class="Fa">type</var> argument specifies which
- high-level type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> the slot
- identifier is allocated under. The <var class="Fa">osd</var> argument is a
- pointer to the kernel data structure's <var class="Vt">struct osd</var> to
- retrieve the data pointer from. The <var class="Fa">slot</var> argument
- specifies the slot identifier to retrieve the data pointer from.</p>
-<p class="Pp" id="osd_del">The
- <a class="permalink" href="#osd_del"><code class="Fn">osd_del</code></a>()
- function removes the data pointer associated with a kernel data structure's
- <var class="Vt">struct osd</var> member from the specified type/slot
- identifier pair. The <var class="Fa">type</var> argument specifies which
- high-level type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> the slot
- identifier is allocated under. The <var class="Fa">osd</var> argument is a
- pointer to the kernel data structure's <var class="Vt">struct osd</var> to
- remove the data pointer from. The <var class="Fa">slot</var> argument
- specifies the slot identifier to remove the data pointer from. If an
- osd_destructor_t function pointer was specified at registration time, the
- destructor function will be called and passed the data pointer for the
- type/slot identifier pair which is being deleted.</p>
-<p class="Pp" id="osd_call">The
- <a class="permalink" href="#osd_call"><code class="Fn">osd_call</code></a>()
- function calls the specified osd_method_t function pointer for all currently
- registered slots of a given type on the specified <var class="Fa">obj</var>
- and <var class="Fa">data</var> pointers. The function may sleep and
- therefore cannot be called from a non-sleepable context. The
- <var class="Fa">type</var> argument specifies which high-level type grouping
- from <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> to call the
- method for. The <var class="Fa">method</var> argument specifies the index
- into the osd_method_t array that was passed to
- <code class="Fn">osd_register</code>(). The <var class="Fa">obj</var> and
- <var class="Fa">data</var> arguments are passed to the method function
- pointer of each slot.</p>
-<p class="Pp" id="osd_exit">The
- <a class="permalink" href="#osd_exit"><code class="Fn">osd_exit</code></a>()
- function removes all data object pointers from all currently registered
- slots for a given type for the specified kernel data structure's
- <var class="Vt">struct osd</var> member. The <var class="Fa">type</var>
- argument specifies which high-level type grouping from
- <code class="In">&lt;<a class="In">sys/osd.h</a>&gt;</code> to remove data
- pointers from. The <var class="Fa">osd</var> argument is a pointer to the
- kernel data structure's <var class="Vt">struct osd</var> to remove all data
- object pointers for all currently registered slots from.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp"><code class="Nm">osd</code> uses a two dimensional matrix (array
- of arrays) as the data structure to manage the external data associated with
- a kernel data structure's <var class="Vt">struct osd</var> member. The type
- identifier is used as the index into the outer array, and the slot
- identifier is used as the index into the inner array. To set or retrieve a
- data pointer for a given type/slot identifier pair,
- <code class="Fn">osd_set</code>() and <code class="Fn">osd_get</code>()
- perform the equivalent of array[type][slot], which is both constant time and
- fast.</p>
-<p class="Pp">If <code class="Fn">osd_set</code>() is called on a
- <var class="Vt">struct osd</var> for the first time, the array for storing
- data pointers is dynamically allocated using <a class="Xr">malloc(9)</a>
- with M_NOWAIT to a size appropriate for the slot identifier being set. If a
- subsequent call to <code class="Fn">osd_set</code>() attempts to set a slot
- identifier which is numerically larger than the slot used in the previous
- <code class="Fn">osd_set</code>() call, <a class="Xr">realloc(9)</a> is used
- to grow the array to the appropriate size such that the slot identifier can
- be used. To maximise the efficiency of any code which calls
- <code class="Fn">osd_set</code>() sequentially on a number of different slot
- identifiers (e.g., during an initialisation phase) one should loop through
- the slot identifiers in descending order from highest to lowest. This will
- result in only a single <a class="Xr">malloc(9)</a> call to create an array
- of the largest slot size and all subsequent calls to
- <code class="Fn">osd_set</code>() will proceed without any
- <a class="Xr">realloc(9)</a> calls.</p>
-<p class="Pp">It is possible for <code class="Fn">osd_set</code>() to fail to
- allocate this array. To ensure that such allocation succeeds,
- <code class="Fn">osd_reserve</code>() may be called (in a non-blocking
- context), and it will pre-allocate the memory via
- <a class="Xr">malloc(9)</a> with M_WAITOK. Then this pre-allocated memory is
- passed to <code class="Fn">osd_set_reserved</code>(), which will use it if
- necessary or otherwise discard it. The memory may also be explicitly
- discarded by calling <code class="Fn">osd_free_reserved</code>(). As this
- method always allocates memory whether or not it is ultimately needed, it
- should be used only rarely, such as in the unlikely event that
- <code class="Fn">osd_set</code>() fails.</p>
-<p class="Pp">The <code class="Nm">osd</code> API is geared towards slot
- identifiers storing pointers to the same underlying data structure type for
- a given <code class="Nm">osd</code> type identifier. This is not a
- requirement, and <a class="Xr">khelp(9)</a> for example stores completely
- different data types in slots under the OSD_KHELP type identifier.</p>
-<section class="Ss">
-<h2 class="Ss" id="Locking"><a class="permalink" href="#Locking">Locking</a></h2>
-<p class="Pp"><code class="Nm">osd</code> internally uses a mix of
- <a class="Xr">mutex(9)</a>, <a class="Xr">rmlock(9)</a> and
- <a class="Xr">sx(9)</a> locks to protect its internal data structures and
- state.</p>
-<p class="Pp">Responsibility for synchronising access to a kernel data
- structure's <var class="Vt">struct osd</var> member is left to the subsystem
- that uses the data structure and calls the <code class="Nm">osd</code>
- API.</p>
-<p class="Pp"><code class="Fn">osd_get</code>() only acquires an
- <a class="Xr">rmlock(9)</a> in read mode, therefore making it safe to use in
- the majority of contexts within the kernel including most fast paths.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">osd_register</code>() returns the slot identifier
- for the newly registered data type.</p>
-<p class="Pp"><code class="Fn">osd_set</code>() and
- <code class="Fn">osd_set_reserved</code>() return zero on success or ENOMEM
- if the specified type/slot identifier pair triggered an internal
- <a class="Xr">realloc(9)</a> which failed
- (<code class="Fn">osd_set_reserved</code>() will always succeed when
- <var class="Fa">rsv</var> is non-NULL).</p>
-<p class="Pp"><code class="Fn">osd_get</code>() returns the data pointer for the
- specified type/slot identifier pair, or NULL if the slot has not been
- initialised yet.</p>
-<p class="Pp"><code class="Fn">osd_reserve</code>() returns a pointer suitable
- for passing to <code class="Fn">osd_set_reserved</code>() or
- <code class="Fn">osd_free_reserved</code>().</p>
-<p class="Pp"><code class="Fn">osd_call</code>() returns zero if no method is
- run or the method for each slot runs successfully. If a method for a slot
- returns non-zero, <code class="Fn">osd_call</code>() terminates prematurely
- and returns the method's error to the caller.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">khelp(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The Object Specific Data (OSD) facility first appeared in
- <span class="Ux">FreeBSD 8.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">osd</code> facility was written by
- <span class="An">Pawel Jakub Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">Lawrence
- Stewart</span>
- &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 7, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/owll.9 4.html b/static/freebsd/man9/owll.9 4.html
deleted file mode 100644
index 4c2a7efb..00000000
--- a/static/freebsd/man9/owll.9 4.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OWLL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OWLL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">owll</code>,
- <code class="Nm">OWLL_WRITE_ONE</code>,
- <code class="Nm">OWLL_WRITE_ZERO</code>,
- <code class="Nm">OWLL_READ_DATA</code>,
- <code class="Nm">OWLL_REASET_AND_PRESENCE</code> &#x2014;
- <span class="Nd">Dallas Semiconductor 1-Wire Link Layer Interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWLL_WRITE_ONE</code>(<var class="Fa" style="white-space: nowrap;">device_t
- lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing
- *timing</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWLL_WRITE_ZERO</code>(<var class="Fa" style="white-space: nowrap;">device_t
- lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing
- *timing</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWLL_READ_DATA</code>(<var class="Fa" style="white-space: nowrap;">device_t
- lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing
- *timing</var>, <var class="Fa" style="white-space: nowrap;">int
- *bit</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWLL_RESET_AND_PRESENCE</code>(<var class="Fa" style="white-space: nowrap;">device_t
- lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing
- *timing</var>, <var class="Fa" style="white-space: nowrap;">int
- *bit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">owll</code> interface provides access to the
- link layer of the Dallas Semiconductor 1-Wire from upper layers of the
- protocol.</p>
-<p class="Pp" id="OWLL_WRITE_ONE"><a class="permalink" href="#OWLL_WRITE_ONE"><code class="Fn">OWLL_WRITE_ONE</code></a>()
- and
- <a class="permalink" href="#OWLL_WRITE_ZERO"><code class="Fn" id="OWLL_WRITE_ZERO">OWLL_WRITE_ZERO</code></a>()
- writes a one bit or a zero bit respectively on the 1-Wire bus.</p>
-<p class="Pp" id="OWLL_READ_DATA"><a class="permalink" href="#OWLL_READ_DATA"><code class="Fn">OWLL_READ_DATA</code></a>()
- reads one bit from the 1-Wire bus. This is often referred to as a
- &#x201C;Read Time Slot&#x201D; in the 1-Wire device data sheets.</p>
-<p class="Pp" id="OWLL_RESET_AND_PRESENCE">The
- <a class="permalink" href="#OWLL_RESET_AND_PRESENCE"><code class="Fn">OWLL_RESET_AND_PRESENCE</code></a>()
- function starts a reset sequence and detects if any device(s) are present on
- the bus. This is the beginning of all 1-Wire transactions.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">This interface is intended to be used only by the
- <a class="Xr">ow(4)</a> device to talk to the low-level bus. By convention,
- the device that implements this interface is called
- <a class="Xr">owc(4)</a>. Only devices that implement
- <a class="Xr">own(9)</a> should call these interfaces.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ow(4)</a>, <a class="Xr">owc(4)</a>,
- <a class="Xr">own(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LEGAL"><a class="permalink" href="#LEGAL">LEGAL</a></h1>
-<p class="Pp">1-Wire is a registered trademark of Maxim Integrated Products,
- Inc.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">owll</code> driver first appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">owll</code> device driver and this manual
- page were written by <span class="An">Warner Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 22, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/own.9 4.html b/static/freebsd/man9/own.9 4.html
deleted file mode 100644
index 2d3f0288..00000000
--- a/static/freebsd/man9/own.9 4.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">OWN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">OWN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">own</code>,
- <code class="Nm">own_send_command</code>,
- <code class="Nm">own_command_wait</code>,
- <code class="Nm">own_self_command</code>,
- <code class="Nm">own_acquire_bus</code>, <code class="Nm">own crc</code>,
- <code class="Nm">own_release_bus</code>,
- <code class="Nm">OWN_ACQUIRE_BUS</code>, <code class="Nm">OWN_CRC</code>,
- <code class="Nm">OWN_RELEASE_BUS</code>,
- <code class="Nm">OWN_SEND_COMMAND</code> &#x2014; <span class="Nd">Dallas
- Semiconductor 1-Wire Network and Transport Interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/ow/own.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_send_command</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd
- *cmd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_command_wait</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd
- *cmd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_self_command</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd
- *cmd</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- xpt_cmd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_acquire_bus</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_release_bus</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">own_crc</code>(<var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWN_SEND_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">device_t
- ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd
- *cmd</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">OWN_ACQUIRE_BUS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">OWN_RELEASE_BUS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">OWN_CRC</code>(<var class="Fa" style="white-space: nowrap;">device_t
- ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">own</code> interface defines three sets of
- functions for interacting with 1-Wire devices: sending commands, reserving
- the bus, and ensuring data integrity. Wrappers are provided for the raw
- <code class="Nm">OWN</code> <a class="Xr">kobj(9)</a> interfaces and should
- be used for improved safety over the <a class="Xr">kobj(9)</a> ones.</p>
-<section class="Ss">
-<h2 class="Ss" id="Bus_Commands"><a class="permalink" href="#Bus_Commands">Bus
- Commands</a></h2>
-<p class="Pp">The 1-Wire bus defines different layers of access to the devices
- on the bus. The <code class="Nm">own</code> functions provide access to the
- network and transport layers. The network layer designates the next command
- as being either for all devices on the bus, or for a specific device. The
- network layer also specifies the speed used by the link layer.</p>
-<p class="Pp"><var class="Vt">struct ow_cmd</var> encapsulates network access,
- speed, and timing information. It specifies the commands to send and whether
- or not to read data. Its members are:</p>
-<dl class="Bl-tag">
- <dt id="flags"><var class="Va">flags</var></dt>
- <dd>Flags controlling the interpretation of the structure. These flags are
- defined in <code class="In">&lt;<a class="In">dev/ow/ow.h</a>&gt;</code>:
- <dl class="Bl-tag">
- <dt>OW_FLAG_OVERDRIVE</dt>
- <dd>Send <var class="Va">xpt_cmd</var> bytes and read
- <var class="Va">xpt_read</var> bytes at overdrive speed.</dd>
- <dt>OW_FLAG_READ_BIT</dt>
- <dd>Interpret <var class="Va">xpt_read_len</var> to be in bits to be read
- after <var class="Va">xpt_cmd</var> rather than bytes.</dd>
- </dl>
- </dd>
- <dt id="rom_cmd"><var class="Va">rom_cmd</var></dt>
- <dd>ROM command bytes to send.</dd>
- <dt id="rom_len"><var class="Va">rom_len</var></dt>
- <dd>Number of ROM command bytes to send.</dd>
- <dt id="rom_read_len"><var class="Va">rom_read_len</var></dt>
- <dd>Number of bytes to read after sending the ROM command.</dd>
- <dt id="rom_read"><var class="Va">rom_read</var></dt>
- <dd>Buffer for bytes read after the ROM command.</dd>
- <dt id="xpt_cmd"><var class="Va">xpt_cmd</var></dt>
- <dd>Transport command to send.</dd>
- <dt id="xpt_len"><var class="Va">xpt_len</var></dt>
- <dd>Length of the transport command bytes to send. Specify 0 for no transport
- command.</dd>
- <dt id="xpt_read_len"><var class="Va">xpt_read_len</var></dt>
- <dd>Number of bytes to read after <var class="Va">xpt_cmd</var> bytes are
- sent. If the <code class="Dv">OW_FLAG_READ_BIT</code> bit is set in
- <var class="Va">flags</var>, then it is the number of bits to read. Bits
- read are packed into bytes.</dd>
- <dt id="xpt_read"><var class="Va">xpt_read</var></dt>
- <dd>Buffer for data read.</dd>
-</dl>
-<p class="Pp" id="own_command_wait"><a class="permalink" href="#own_command_wait"><code class="Fn">own_command_wait</code></a>()
- acquires the 1-Wire bus, waiting if necessary, sends the command, and then
- releases the bus.
- <a class="permalink" href="#own_send_command"><code class="Fn" id="own_send_command">own_send_command</code></a>()
- sends the command without bus reservation. <var class="Fa">pdev</var> is the
- client device (the presentation layer device) sending the command. The
- <var class="Fa">cmd</var> argument describes the transaction to send to the
- 1-Wire bus.</p>
-<p class="Pp" id="own_self_command"><a class="permalink" href="#own_self_command"><code class="Fn">own_self_command</code></a>()
- fills in <var class="Fa">cmd</var> with a MATCH_ROM ROM command, the ROM
- address of <var class="Fa">pdev</var> and the <var class="Fa">xpt_cmd</var>
- as a convenient way to create directed commands.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Bus_Reservation"><a class="permalink" href="#Bus_Reservation">Bus
- Reservation</a></h2>
-<p class="Pp">The 1-Wire system includes an advisory lock for the bus that
- presentation layer devices can use to coordinate access. Locking is purely
- advisory at this time.</p>
-<p class="Pp" id="own_acquire_bus"><a class="permalink" href="#own_acquire_bus"><code class="Fn">own_acquire_bus</code></a>()
- reserves the bus. It waits indefinitely if the <var class="Fa">how</var>
- argument is <code class="Dv">OWN_WAIT</code> and returns the error
- <code class="Dv">EWOULDBLOCK</code> if passed
- <code class="Dv">OWN_DONTWAIT</code> when the bus is owned by another
- client.</p>
-<p class="Pp" id="own_release_bus"><a class="permalink" href="#own_release_bus"><code class="Fn">own_release_bus</code></a>()
- releases the bus.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Data_Integrity"><a class="permalink" href="#Data_Integrity">Data
- Integrity</a></h2>
-<p class="Pp"><a class="permalink" href="#own_crc"><code class="Fn" id="own_crc">own_crc</code></a>()
- computes the 1-Wire standard CRC function over the data passed in
- <var class="Fa">buffer</var> and <var class="Fa">len</var> and returns the
- result.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Notes"><a class="permalink" href="#Notes">Notes</a></h2>
-<p class="Pp">The 1-Wire standard (Maxim AN937) defines layers that are akin to
- ISO networking layers. The lowest relevant layer, the link layer, defines
- the polling windows and the timing of the signaling of different modes. The
- network layer is built on top of the link layer and is used to address
- devices in a unicast or multicast manner. The transport layer defines
- commands and responses from the devices. The presentation layer is composed
- of the device specific commands and actions used to control the specific
- 1-Wire devices on bus.</p>
-<p class="Pp">These interfaces are implemented by the <a class="Xr">ow(4)</a>
- device. Presentation layer devices (children of the newbus
- <a class="Xr">ow(4)</a> device) should only call the functions described
- here. The functionality provided by the <a class="Xr">owc(4)</a> device
- (specifically the <a class="Xr">owll(9)</a> interface) should only be called
- by the <a class="Xr">ow(4)</a> driver.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ow(4)</a>, <a class="Xr">owc(4)</a>,
- <a class="Xr">owll(9)</a>
- <span class="Pa">https://pdfserv.maximintegrated.com/en/an/AN937.pdf</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LEGAL"><a class="permalink" href="#LEGAL">LEGAL</a></h1>
-<p class="Pp">1-Wire is a registered trademark of Maxim Integrated Products,
- Inc.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">own</code> driver first appeared in
- <span class="Ux">FreeBSD 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">own</code> device driver and this manual page
- were written by <span class="An">Warner Losh</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 20, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/p_candebug.9 4.html b/static/freebsd/man9/p_candebug.9 4.html
deleted file mode 100644
index bea842ab..00000000
--- a/static/freebsd/man9/p_candebug.9 4.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">P_CANDEBUG(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">P_CANDEBUG(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">p_candebug</code> &#x2014;
- <span class="Nd">determine debuggability of a process</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">p_candebug</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc
- *p</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function determines if a given process
- <var class="Fa">p</var> is debuggable by some thread
- <var class="Fa">td</var>.</p>
-<p class="Pp" id="p_candebug">The following <a class="Xr">sysctl(8)</a>
- variables directly influence the behaviour of
- <a class="permalink" href="#p_candebug"><code class="Fn">p_candebug</code></a>():</p>
-<dl class="Bl-tag">
- <dt id="security.bsd.unprivileged_proc_debug"><var class="Va">security.bsd.unprivileged_proc_debug</var></dt>
- <dd>Must be set to a non-zero value to allow unprivileged processes access to
- the kernel's debug facilities.</dd>
- <dt id="kern.securelevel"><var class="Va">kern.securelevel</var></dt>
- <dd>Debugging of the init process is not allowed if this variable is
- <code class="Li">1</code> or greater.</dd>
-</dl>
-<p class="Pp">Other such variables indirectly influence it; see
- <a class="Xr">cr_bsd_visible(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">p_candebug</code>() function returns
- <code class="Li">0</code> if the process denoted by <var class="Fa">p</var>
- is debuggable by thread <var class="Fa">td</var>, or a non-zero error return
- value otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>An unprivileged process attempted to debug another process but the system
- is configured to deny it (see <a class="Xr">sysctl(8)</a> variable
- <var class="Va">security.bsd.unprivileged_proc_debug</var> above).</dd>
- <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt>
- <dd>Thread <var class="Fa">td</var> has been jailed and the process to debug
- does not belong to the same jail or one of its sub-jails, as determined by
- <a class="Xr">prison_check(9)</a>.</dd>
- <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt>
- <dd><a class="Xr">cr_bsd_visible(9)</a> denied visibility according to the BSD
- security policies in force.</dd>
- <dt id="EPERM~2">[<a class="permalink" href="#EPERM~2"><code class="Er">EPERM</code></a>]</dt>
- <dd>Thread <var class="Fa">td</var> lacks superuser credentials and its
- (effective) group set is not a superset of process
- <var class="Fa">p</var>'s whole group set (including real, effective and
- saved group IDs).</dd>
- <dt id="EPERM~3">[<a class="permalink" href="#EPERM~3"><code class="Er">EPERM</code></a>]</dt>
- <dd>Thread <var class="Fa">td</var> lacks superuser credentials and its
- (effective) user ID does not match all user IDs of process
- <var class="Fa">p</var>.</dd>
- <dt id="EPERM~4">[<a class="permalink" href="#EPERM~4"><code class="Er">EPERM</code></a>]</dt>
- <dd>Thread <var class="Fa">td</var> lacks superuser credentials and process
- <var class="Fa">p</var> is executing a set-user-ID or set-group-ID
- executable.</dd>
- <dt id="EPERM~5">[<a class="permalink" href="#EPERM~5"><code class="Er">EPERM</code></a>]</dt>
- <dd>Process <var class="Fa">p</var> denotes the initial process
- <code class="Fn">initproc</code>() and the <a class="Xr">sysctl(8)</a>
- variable <var class="Va">kern.securelevel</var> is greater than zero.</dd>
- <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
- <dd>Process <var class="Fa">p</var> is in the process of being
- <code class="Fn">exec</code>()'ed.</dd>
- <dt id="EPERM~6">[<a class="permalink" href="#EPERM~6"><code class="Er">EPERM</code></a>]</dt>
- <dd>Process <var class="Fa">p</var> denied debuggability (see
- <a class="Xr">procctl(2)</a>, command
- <code class="Dv">PROC_TRACE_CTL</code>).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">procctl(2)</a>, <a class="Xr">cr_bsd_visible(9)</a>,
- <a class="Xr">mac(9)</a>, <a class="Xr">p_cansee(9)</a>,
- <a class="Xr">prison_check(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/p_cansee.9 4.html b/static/freebsd/man9/p_cansee.9 4.html
deleted file mode 100644
index 42823bc6..00000000
--- a/static/freebsd/man9/p_cansee.9 4.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">P_CANSEE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">P_CANSEE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">p_cansee</code> &#x2014;
- <span class="Nd">determine visibility of a process</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">p_cansee</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc
- *p</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function determines if a given process
- <var class="Fa">p</var> is visible to the thread <var class="Fa">td</var>,
- where the notion of &#x201C;visibility&#x201D; may be read as
- &#x201C;awareness of existence&#x201D;.</p>
-<p class="Pp">This function explicitly allows a thread to always see its own
- process, even with pending credentials changes (see
- <a class="Xr">ucred(9)</a>). Otherwise, it simply defers to
- <a class="Xr">cr_cansee(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">p_cansee</code>() function returns
- <code class="Li">0</code> if the process denoted by <var class="Fa">p</var>
- is visible by thread <var class="Fa">td</var>, or ESRCH otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt>
- <dd>Thread <var class="Fa">td</var> is not part of process
- <var class="Fa">p</var> and cannot see it as determined by
- <a class="Xr">cr_cansee(9)</a>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cr_cansee(9)</a>, <a class="Xr">p_candebug(9)</a>,
- <a class="Xr">ucred(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/panic.9 3.html b/static/freebsd/man9/panic.9 3.html
deleted file mode 100644
index afde7a46..00000000
--- a/static/freebsd/man9/panic.9 3.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PANIC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PANIC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">panic</code> &#x2014; <span class="Nd">bring down
- system on fatal error</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern char *panicstr;</var></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">panic</code>(<var class="Fa" style="white-space: nowrap;">const
- char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vpanic</code>(<var class="Fa" style="white-space: nowrap;">const
- char *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list
- ap</var>);</p>
-<p class="Pp"><code class="Fn">KERNEL_PANICKED</code>();</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#panic"><code class="Fn" id="panic">panic</code></a>()
- and <code class="Fn">vpanic</code>() functions terminate the running system.
- The message <var class="Fa">fmt</var> is a <a class="Xr">printf(3)</a> style
- format string. The message is printed to the console and
- <var class="Va">panicstr</var> is set pointing to the address of the message
- text. This can be retrieved from a core dump at a later time.</p>
-<p class="Pp" id="panic~2">Upon entering the
- <a class="permalink" href="#panic~2"><code class="Fn">panic</code></a>()
- function the panicking thread disables interrupts and calls
- <a class="Xr">critical_enter(9)</a>. This prevents the thread from being
- preempted or interrupted while the system is still in a running state. Next,
- it will instruct the other CPUs in the system to stop. This synchronizes
- with other threads to prevent concurrent panic conditions from interfering
- with one another. In the unlikely event of concurrent panics, only one
- panicking thread will proceed.</p>
-<p class="Pp" id="kdb_enter">Control will be passed to the kernel debugger via
- <a class="permalink" href="#kdb_enter"><code class="Fn">kdb_enter</code></a>().
- This is conditional on a debugger being installed and enabled by the
- <var class="Va">debugger_on_panic</var> variable; see
- <a class="Xr">ddb(4)</a> and <a class="Xr">gdb(4)</a>. The debugger may
- initiate a system reset, or it may eventually return.</p>
-<p class="Pp" id="panic~3">Finally, <a class="Xr">kern_reboot(9)</a> is called
- to restart the system, and a kernel dump will be requested. If
- <a class="permalink" href="#panic~3"><code class="Fn">panic</code></a>() is
- called recursively (from the disk sync routines, for example),
- <a class="permalink" href="#kern_reboot"><code class="Fn" id="kern_reboot">kern_reboot</code></a>()
- will be instructed not to sync the disks.</p>
-<p class="Pp" id="vpanic">The
- <a class="permalink" href="#vpanic"><code class="Fn">vpanic</code></a>()
- function implements the main body of <code class="Fn">panic</code>(). It is
- suitable to be called by functions which perform their own variable-length
- argument processing. In all other cases, <code class="Fn">panic</code>() is
- preferred.</p>
-<p class="Pp" id="KERNEL_PANICKED">The
- <a class="permalink" href="#KERNEL_PANICKED"><code class="Fn">KERNEL_PANICKED</code></a>()
- macro is the preferred way to determine if the system has panicked. It
- returns a boolean value. Most often this is used to avoid taking an action
- that cannot possibly succeed in a panic context.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXECUTION_CONTEXT"><a class="permalink" href="#EXECUTION_CONTEXT">EXECUTION
- CONTEXT</a></h1>
-<p class="Pp">Once the panic has been initiated, code executing in a panic
- context is subject to the following restrictions:</p>
-<ul class="Bl-bullet">
- <li>Single-threaded execution. The scheduler is disabled, and other CPUs are
- stopped/forced idle. Functions that manipulate the scheduler state must be
- avoided. This includes, but is not limited to, <a class="Xr">wakeup(9)</a>
- and <a class="Xr">sleepqueue(9)</a> functions.</li>
- <li>Interrupts are disabled. Device I/O (e.g. to the console) must be achieved
- with polling.</li>
- <li>Dynamic memory allocation cannot be relied on, and must be avoided.</li>
- <li>Lock acquisition/release will be ignored, meaning these operations will
- appear to succeed.</li>
- <li>Sleeping on a resource is not strictly prohibited, but will result in an
- immediate return from the sleep function. Time-based sleeps such as
- <a class="Xr">pause(9)</a> may be performed as a busy-wait.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">panic</code>() and
- <code class="Fn">vpanic</code>() functions do not return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">ddb(4)</a>,
- <a class="Xr">gdb(4)</a>, <a class="Xr">KASSERT(9)</a>,
- <a class="Xr">kern_reboot(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 17, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pci.9 4.html b/static/freebsd/man9/pci.9 4.html
deleted file mode 100644
index 553c5a43..00000000
--- a/static/freebsd/man9/pci.9 4.html
+++ /dev/null
@@ -1,897 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PCI(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PCI(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pci</code>,
- <code class="Nm">pci_alloc_msi</code>,
- <code class="Nm">pci_alloc_msix</code>,
- <code class="Nm">pci_clear_pme</code>,
- <code class="Nm">pci_disable_busmaster</code>,
- <code class="Nm">pci_disable_io</code>,
- <code class="Nm">pci_enable_busmaster</code>,
- <code class="Nm">pci_enable_io</code>,
- <code class="Nm">pci_enable_pme</code>,
- <code class="Nm">pci_find_bsf</code>, <code class="Nm">pci_find_cap</code>,
- <code class="Nm">pci_find_dbsf</code>,
- <code class="Nm">pci_find_device</code>,
- <code class="Nm">pci_find_extcap</code>,
- <code class="Nm">pci_find_htcap</code>,
- <code class="Nm">pci_find_next_cap</code>,
- <code class="Nm">pci_find_next_extcap</code>,
- <code class="Nm">pci_find_next_htcap</code>,
- <code class="Nm">pci_find_pcie_root_port</code>,
- <code class="Nm">pci_get_id</code>,
- <code class="Nm">pci_get_max_payload</code>,
- <code class="Nm">pci_get_max_read_req</code>,
- <code class="Nm">pci_get_powerstate</code>,
- <code class="Nm">pci_get_vpd_ident</code>,
- <code class="Nm">pci_get_vpd_readonly</code>,
- <code class="Nm">pci_has_pm</code>, <code class="Nm">pci_iov_attach</code>,
- <code class="Nm">pci_iov_attach_name</code>,
- <code class="Nm">pci_iov_detach</code>,
- <code class="Nm">pci_msi_count</code>,
- <code class="Nm">pci_msix_count</code>,
- <code class="Nm">pci_msix_pba_bar</code>,
- <code class="Nm">pci_msix_table_bar</code>,
- <code class="Nm">pci_pending_msix</code>,
- <code class="Nm">pci_read_config</code>,
- <code class="Nm">pci_release_msi</code>,
- <code class="Nm">pci_remap_msix</code>,
- <code class="Nm">pci_restore_state</code>,
- <code class="Nm">pci_save_state</code>,
- <code class="Nm">pci_set_max_read_req</code>,
- <code class="Nm">pci_set_powerstate</code>,
- <code class="Nm">pci_write_config</code>,
- <code class="Nm">pcie_adjust_config</code>,
- <code class="Nm">pcie_flr</code>,
- <code class="Nm">pcie_get_max_completion_timeout</code>,
- <code class="Nm">pcie_read_config</code>,
- <code class="Nm">pcie_wait_for_pending_transactions</code>,
- <code class="Nm">pcie_write_config</code> &#x2014; <span class="Nd">PCI bus
- interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/pci/pcireg.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/pci/pcivar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_alloc_msi</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- *count</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_alloc_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- *count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_clear_pme</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_disable_busmaster</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_disable_io</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- space</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_enable_busmaster</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_enable_io</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- space</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_enable_pme</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">pci_find_bsf</code>(<var class="Fa" style="white-space: nowrap;">uint8_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">uint8_t slot</var>,
- <var class="Fa" style="white-space: nowrap;">uint8_t func</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_cap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">pci_find_dbsf</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- domain</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">uint8_t slot</var>,
- <var class="Fa" style="white-space: nowrap;">uint8_t func</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">pci_find_device</code>(<var class="Fa" style="white-space: nowrap;">uint16_t
- vendor</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- device</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_extcap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_htcap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_next_cap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- start</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_next_extcap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- start</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_find_next_htcap</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- capability</var>, <var class="Fa" style="white-space: nowrap;">int
- start</var>, <var class="Fa" style="white-space: nowrap;">int
- *capreg</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">pci_find_pcie_root_port</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_id</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">enum pci_id_type
- type</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t
- *id</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_max_payload</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_max_read_req</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_powerstate</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_vpd_ident</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- **identptr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_get_vpd_readonly</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *kw</var>, <var class="Fa" style="white-space: nowrap;">const char
- **vptr</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pci_has_pm</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_msi_count</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_msix_count</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_msix_pba_bar</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_msix_table_bar</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_pending_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">u_int
- index</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">pci_read_config</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>,
- <var class="Fa" style="white-space: nowrap;">int width</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_release_msi</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_remap_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int count</var>,
- <var class="Fa" style="white-space: nowrap;">const u_int
- *vectors</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_restore_state</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_save_state</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_set_max_read_req</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_set_powerstate</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int
- state</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_write_config</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t val</var>,
- <var class="Fa" style="white-space: nowrap;">int width</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">pcie_adjust_config</code>(<var class="Fa">device_t dev</var>,
- <var class="Fa">int reg</var>, <var class="Fa">uint32_t mask</var>,
- <var class="Fa">uint32_t val</var>, <var class="Fa">int width</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pcie_flr</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">u_int
- max_delay</var>, <var class="Fa" style="white-space: nowrap;">bool
- force</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pcie_get_max_completion_timeout</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">pcie_read_config</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>,
- <var class="Fa" style="white-space: nowrap;">int width</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pcie_wait_for_pending_transactions</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">u_int
- max_delay</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pcie_write_config</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t val</var>,
- <var class="Fa" style="white-space: nowrap;">int width</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_event_fn</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>, <var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">pci_add_device</var>,
- <var class="Fa" style="white-space: nowrap;">pci_event_fn</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">pci_delete_resource</var>,
- <var class="Fa" style="white-space: nowrap;">pci_event_fn</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/pci/pci_iov.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_iov_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *pf_schema</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t
- *vf_schema</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_iov_attach_name</code>(<var class="Fa">device_t
- dev</var>, <var class="Fa">nvlist_t *pf_schema</var>,
- <var class="Fa">nvlist_t *vf_schema</var>, <var class="Fa">const char
- *fmt</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pci_iov_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">pci</code> set of functions are used for
- managing PCI devices. The functions are split into several groups: raw
- configuration access, locating devices, device information, device
- configuration, and message signaled interrupts.</p>
-<section class="Ss">
-<h2 class="Ss" id="Raw_Configuration_Access"><a class="permalink" href="#Raw_Configuration_Access">Raw
- Configuration Access</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#pci_read_config"><code class="Fn" id="pci_read_config">pci_read_config</code></a>()
- function is used to read data from the PCI configuration space of the device
- <var class="Fa">dev</var>, at offset <var class="Fa">reg</var>, with
- <var class="Fa">width</var> specifying the size of the access.</p>
-<p class="Pp" id="pci_write_config">The
- <a class="permalink" href="#pci_write_config"><code class="Fn">pci_write_config</code></a>()
- function is used to write the value <var class="Fa">val</var> to the PCI
- configuration space of the device <var class="Fa">dev</var>, at offset
- <var class="Fa">reg</var>, with <var class="Fa">width</var> specifying the
- size of the access.</p>
-<p class="Pp" id="pcie_adjust_config">The
- <a class="permalink" href="#pcie_adjust_config"><code class="Fn">pcie_adjust_config</code></a>()
- function is used to modify the value of a register in the PCI-express
- capability register set of device <var class="Fa">dev</var>. The offset
- <var class="Fa">reg</var> specifies a relative offset in the register set
- with <var class="Fa">width</var> specifying the size of the access. The new
- value of the register is computed by modifying bits set in
- <var class="Fa">mask</var> to the value in <var class="Fa">val</var>. Any
- bits not specified in <var class="Fa">mask</var> are preserved. The previous
- value of the register is returned.</p>
-<p class="Pp" id="pcie_read_config">The
- <a class="permalink" href="#pcie_read_config"><code class="Fn">pcie_read_config</code></a>()
- function is used to read the value of a register in the PCI-express
- capability register set of device <var class="Fa">dev</var>. The offset
- <var class="Fa">reg</var> specifies a relative offset in the register set
- with <var class="Fa">width</var> specifying the size of the access.</p>
-<p class="Pp" id="pcie_write_config">The
- <a class="permalink" href="#pcie_write_config"><code class="Fn">pcie_write_config</code></a>()
- function is used to write the value <var class="Fa">val</var> to a register
- in the PCI-express capability register set of device
- <var class="Fa">dev</var>. The offset <var class="Fa">reg</var> specifies a
- relative offset in the register set with <var class="Fa">width</var>
- specifying the size of the access.</p>
-<p class="Pp" id="NOTE"><a class="permalink" href="#NOTE"><i class="Em">NOTE</i></a>:
- Device drivers should only use these functions for functionality that is not
- available via another
- <a class="permalink" href="#pci"><code class="Fn" id="pci">pci</code></a>()
- function.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Locating_Devices"><a class="permalink" href="#Locating_Devices">Locating
- Devices</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#pci_find_bsf"><code class="Fn" id="pci_find_bsf">pci_find_bsf</code></a>()
- function looks up the <var class="Vt">device_t</var> of a PCI device, given
- its <var class="Fa">bus</var>, <var class="Fa">slot</var>, and
- <var class="Fa">func</var>. The <var class="Fa">slot</var> number actually
- refers to the number of the device on the bus, which does not necessarily
- indicate its geographic location in terms of a physical slot. Note that in
- case the system has multiple PCI domains, the
- <code class="Fn">pci_find_bsf</code>() function only searches the first one.
- Actually, it is equivalent to:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>pci_find_dbsf(0, bus, slot, func);</pre>
-</div>
-<p class="Pp" id="pci_find_dbsf">The
- <a class="permalink" href="#pci_find_dbsf"><code class="Fn">pci_find_dbsf</code></a>()
- function looks up the <var class="Vt">device_t</var> of a PCI device, given
- its <var class="Fa">domain</var>, <var class="Fa">bus</var>,
- <var class="Fa">slot</var>, and <var class="Fa">func</var>. The
- <var class="Fa">slot</var> number actually refers to the number of the
- device on the bus, which does not necessarily indicate its geographic
- location in terms of a physical slot.</p>
-<p class="Pp" id="pci_find_device">The
- <a class="permalink" href="#pci_find_device"><code class="Fn">pci_find_device</code></a>()
- function looks up the <var class="Vt">device_t</var> of a PCI device, given
- its <var class="Fa">vendor</var> and <var class="Fa">device</var> IDs. Note
- that there can be multiple matches for this search; this function only
- returns the first matching device.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Information"><a class="permalink" href="#Device_Information">Device
- Information</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#pci_find_cap"><code class="Fn" id="pci_find_cap">pci_find_cap</code></a>()
- function is used to locate the first instance of a PCI capability register
- set for the device <var class="Fa">dev</var>. The capability to locate is
- specified by ID via <var class="Fa">capability</var>. Constant macros of the
- form <code class="Dv">PCIY_xxx</code> for standard capability IDs are
- defined in
- <code class="In">&lt;<a class="In">dev/pci/pcireg.h</a>&gt;</code>. If the
- capability is found, then <var class="Fa">*capreg</var> is set to the offset
- in configuration space of the capability register set, and
- <code class="Fn">pci_find_cap</code>() returns zero. If the capability is
- not found or the device does not support capabilities,
- <code class="Fn">pci_find_cap</code>() returns an error. The
- <a class="permalink" href="#pci_find_next_cap"><code class="Fn" id="pci_find_next_cap">pci_find_next_cap</code></a>()
- function is used to locate the next instance of a PCI capability register
- set for the device <var class="Fa">dev</var>. The
- <var class="Fa">start</var> should be the <var class="Fa">*capreg</var>
- returned by a prior <code class="Fn">pci_find_cap</code>() or
- <code class="Fn">pci_find_next_cap</code>(). When no more instances are
- located <code class="Fn">pci_find_next_cap</code>() returns an error.</p>
-<p class="Pp" id="pci_has_pm">The
- <a class="permalink" href="#pci_has_pm"><code class="Fn">pci_has_pm</code></a>()
- function returns true if <var class="Fa">dev</var> supports power
- management.</p>
-<p class="Pp" id="pci_find_extcap">The
- <a class="permalink" href="#pci_find_extcap"><code class="Fn">pci_find_extcap</code></a>()
- function is used to locate the first instance of a PCI-express extended
- capability register set for the device <var class="Fa">dev</var>. The
- extended capability to locate is specified by ID via
- <var class="Fa">capability</var>. Constant macros of the form
- <code class="Dv">PCIZ_xxx</code> for standard extended capability IDs are
- defined in
- <code class="In">&lt;<a class="In">dev/pci/pcireg.h</a>&gt;</code>. If the
- extended capability is found, then <var class="Fa">*capreg</var> is set to
- the offset in configuration space of the extended capability register set,
- and <code class="Fn">pci_find_extcap</code>() returns zero. If the extended
- capability is not found or the device is not a PCI-express device,
- <code class="Fn">pci_find_extcap</code>() returns an error. The
- <a class="permalink" href="#pci_find_next_extcap"><code class="Fn" id="pci_find_next_extcap">pci_find_next_extcap</code></a>()
- function is used to locate the next instance of a PCI-express extended
- capability register set for the device <var class="Fa">dev</var>. The
- <var class="Fa">start</var> should be the <var class="Fa">*capreg</var>
- returned by a prior <code class="Fn">pci_find_extcap</code>() or
- <code class="Fn">pci_find_next_extcap</code>(). When no more instances are
- located <code class="Fn">pci_find_next_extcap</code>() returns an error.</p>
-<p class="Pp" id="pci_find_htcap">The
- <a class="permalink" href="#pci_find_htcap"><code class="Fn">pci_find_htcap</code></a>()
- function is used to locate the first instance of a HyperTransport capability
- register set for the device <var class="Fa">dev</var>. The capability to
- locate is specified by type via <var class="Fa">capability</var>. Constant
- macros of the form <code class="Dv">PCIM_HTCAP_xxx</code> for standard
- HyperTransport capability types are defined in
- <code class="In">&lt;<a class="In">dev/pci/pcireg.h</a>&gt;</code>. If the
- capability is found, then <var class="Fa">*capreg</var> is set to the offset
- in configuration space of the capability register set, and
- <code class="Fn">pci_find_htcap</code>() returns zero. If the capability is
- not found or the device is not a HyperTransport device,
- <code class="Fn">pci_find_htcap</code>() returns an error. The
- <a class="permalink" href="#pci_find_next_htcap"><code class="Fn" id="pci_find_next_htcap">pci_find_next_htcap</code></a>()
- function is used to locate the next instance of a HyperTransport capability
- register set for the device <var class="Fa">dev</var>. The
- <var class="Fa">start</var> should be the <var class="Fa">*capreg</var>
- returned by a prior <code class="Fn">pci_find_htcap</code>() or
- <code class="Fn">pci_find_next_htcap</code>(). When no more instances are
- located <code class="Fn">pci_find_next_htcap</code>() returns an error.</p>
-<p class="Pp" id="pci_find_pcie_root_port">The
- <a class="permalink" href="#pci_find_pcie_root_port"><code class="Fn">pci_find_pcie_root_port</code></a>()
- function walks up the PCI device hierarchy to locate the PCI-express root
- port upstream of <var class="Fa">dev</var>. If a root port is not found,
- <code class="Fn">pci_find_pcie_root_port</code>() returns
- <code class="Dv">NULL</code>.</p>
-<p class="Pp" id="pci_get_id">The
- <a class="permalink" href="#pci_get_id"><code class="Fn">pci_get_id</code></a>()
- function is used to read an identifier from a device. The
- <var class="Fa">type</var> flag is used to specify which identifier to read.
- The following flags are supported:</p>
-<dl class="Bl-hang">
- <dt id="PCI_ID_RID"><a class="permalink" href="#PCI_ID_RID"><code class="Dv">PCI_ID_RID</code></a></dt>
- <dd>Read the routing identifier for the device.</dd>
- <dt id="PCI_ID_MSI"><a class="permalink" href="#PCI_ID_MSI"><code class="Dv">PCI_ID_MSI</code></a></dt>
- <dd>Read the MSI routing ID. This is needed by some interrupt controllers to
- route MSI and MSI-X interrupts.</dd>
-</dl>
-<p class="Pp" id="pci_get_vpd_ident">The
- <a class="permalink" href="#pci_get_vpd_ident"><code class="Fn">pci_get_vpd_ident</code></a>()
- function is used to fetch a device's Vital Product Data (VPD) identifier
- string. If the device <var class="Fa">dev</var> supports VPD and provides an
- identifier string, then <var class="Fa">*identptr</var> is set to point at a
- read-only, null-terminated copy of the identifier string, and
- <code class="Fn">pci_get_vpd_ident</code>() returns zero. If the device does
- not support VPD or does not provide an identifier string, then
- <code class="Fn">pci_get_vpd_ident</code>() returns an error.</p>
-<p class="Pp" id="pci_get_vpd_readonly">The
- <a class="permalink" href="#pci_get_vpd_readonly"><code class="Fn">pci_get_vpd_readonly</code></a>()
- function is used to fetch the value of a single VPD read-only keyword for
- the device <var class="Fa">dev</var>. The keyword to fetch is identified by
- the two character string <var class="Fa">kw</var>. If the device supports
- VPD and provides a read-only value for the requested keyword, then
- <var class="Fa">*vptr</var> is set to point at a read-only, null-terminated
- copy of the value, and <code class="Fn">pci_get_vpd_readonly</code>()
- returns zero. If the device does not support VPD or does not provide the
- requested keyword, then <code class="Fn">pci_get_vpd_readonly</code>()
- returns an error.</p>
-<p class="Pp" id="pcie_get_max_completion_timeout">The
- <a class="permalink" href="#pcie_get_max_completion_timeout"><code class="Fn">pcie_get_max_completion_timeout</code></a>()
- function returns the maximum completion timeout configured for the device
- <var class="Fa">dev</var> in microseconds. If the <var class="Fa">dev</var>
- device is not a PCI-express device,
- <code class="Fn">pcie_get_max_completion_timeout</code>() returns zero. When
- completion timeouts are disabled for <var class="Fa">dev</var>, this
- function returns the maximum timeout that would be used if timeouts were
- enabled.</p>
-<p class="Pp" id="pcie_wait_for_pending_transactions">The
- <a class="permalink" href="#pcie_wait_for_pending_transactions"><code class="Fn">pcie_wait_for_pending_transactions</code></a>()
- function waits for any pending transactions initiated by the
- <var class="Fa">dev</var> device to complete. The function checks for
- pending transactions by polling the transactions pending flag in the
- PCI-express device status register. It returns <code class="Dv">true</code>
- once the transaction pending flag is clear. If transactions are still
- pending after <var class="Fa">max_delay</var> milliseconds,
- <code class="Fn">pcie_wait_for_pending_transactions</code>() returns
- <code class="Dv">false</code>. If <var class="Fa">max_delay</var> is set to
- zero, <code class="Fn">pcie_wait_for_pending_transactions</code>() performs
- a single check; otherwise, this function may sleep while polling the
- transactions pending flag.
- <code class="Nm">pcie_wait_for_pending_transactions</code> returns
- <code class="Dv">true</code> if <var class="Fa">dev</var> is not a
- PCI-express device.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Configuration"><a class="permalink" href="#Device_Configuration">Device
- Configuration</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#pci_enable_busmaster"><code class="Fn" id="pci_enable_busmaster">pci_enable_busmaster</code></a>()
- function enables PCI bus mastering for the device <var class="Fa">dev</var>,
- by setting the <code class="Dv">PCIM_CMD_BUSMASTEREN</code> bit in the
- <code class="Dv">PCIR_COMMAND</code> register. The
- <a class="permalink" href="#pci_disable_busmaster"><code class="Fn" id="pci_disable_busmaster">pci_disable_busmaster</code></a>()
- function clears this bit.</p>
-<p class="Pp" id="pci_enable_io">The
- <a class="permalink" href="#pci_enable_io"><code class="Fn">pci_enable_io</code></a>()
- function enables memory or I/O port address decoding for the device
- <var class="Fa">dev</var>, by setting the
- <code class="Dv">PCIM_CMD_MEMEN</code> or
- <code class="Dv">PCIM_CMD_PORTEN</code> bit in the
- <code class="Dv">PCIR_COMMAND</code> register appropriately. The
- <a class="permalink" href="#pci_disable_io"><code class="Fn" id="pci_disable_io">pci_disable_io</code></a>()
- function clears the appropriate bit. The <var class="Fa">space</var>
- argument specifies which resource is affected; this can be either
- <code class="Dv">SYS_RES_MEMORY</code> or
- <code class="Dv">SYS_RES_IOPORT</code> as appropriate. Device drivers should
- generally not use these routines directly. The PCI bus will enable decoding
- automatically when a <code class="Dv">SYS_RES_MEMORY</code> or
- <code class="Dv">SYS_RES_IOPORT</code> resource is activated via
- <a class="Xr">bus_alloc_resource(9)</a> or
- <a class="Xr">bus_activate_resource(9)</a>.</p>
-<p class="Pp" id="pci_get_max_payload">The
- <a class="permalink" href="#pci_get_max_payload"><code class="Fn">pci_get_max_payload</code></a>()
- function returns the current maximum TLP payload size in bytes for a
- PCI-express device. If the <var class="Fa">dev</var> device is not a
- PCI-express device, <code class="Fn">pci_get_max_payload</code>() returns
- zero.</p>
-<p class="Pp" id="pci_get_max_read_req">The
- <a class="permalink" href="#pci_get_max_read_req"><code class="Fn">pci_get_max_read_req</code></a>()
- function returns the current maximum read request size in bytes for a
- PCI-express device. If the <var class="Fa">dev</var> device is not a
- PCI-express device, <code class="Fn">pci_get_max_read_req</code>() returns
- zero.</p>
-<p class="Pp" id="pci_set_max_read_req">The
- <a class="permalink" href="#pci_set_max_read_req"><code class="Fn">pci_set_max_read_req</code></a>()
- sets the PCI-express maximum read request size for
- <var class="Fa">dev</var>. The requested <var class="Fa">size</var> may be
- adjusted, and <code class="Fn">pci_set_max_read_req</code>() returns the
- actual size set in bytes. If the <var class="Fa">dev</var> device is not a
- PCI-express device, <code class="Fn">pci_set_max_read_req</code>() returns
- zero.</p>
-<p class="Pp" id="pci_get_powerstate">The
- <a class="permalink" href="#pci_get_powerstate"><code class="Fn">pci_get_powerstate</code></a>()
- function returns the current power state of the device
- <var class="Fa">dev</var>. If the device does not support power management
- capabilities, then the default state of
- <code class="Dv">PCI_POWERSTATE_D0</code> is returned. The following power
- states are defined by PCI:</p>
-<dl class="Bl-hang">
- <dt id="PCI_POWERSTATE_D0"><a class="permalink" href="#PCI_POWERSTATE_D0"><code class="Dv">PCI_POWERSTATE_D0</code></a></dt>
- <dd>State in which device is on and running. It is receiving full power from
- the system and delivering full functionality to the user.</dd>
- <dt id="PCI_POWERSTATE_D1"><a class="permalink" href="#PCI_POWERSTATE_D1"><code class="Dv">PCI_POWERSTATE_D1</code></a></dt>
- <dd>Class-specific low-power state in which device context may or may not be
- lost. Buses in this state cannot do anything to the bus, to force devices
- to lose context.</dd>
- <dt id="PCI_POWERSTATE_D2"><a class="permalink" href="#PCI_POWERSTATE_D2"><code class="Dv">PCI_POWERSTATE_D2</code></a></dt>
- <dd>Class-specific low-power state in which device context may or may not be
- lost. Attains greater power savings than
- <code class="Dv">PCI_POWERSTATE_D1</code>. Buses in this state can cause
- devices to lose some context. Devices
- <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be
- prepared for the bus to be in this state or higher.</dd>
- <dt id="PCI_POWERSTATE_D3_HOT"><a class="permalink" href="#PCI_POWERSTATE_D3_HOT"><code class="Dv">PCI_POWERSTATE_D3_HOT</code></a></dt>
- <dd>State in which the device is off and not running. Device context is lost,
- and power from the device can be (but is not necessarily) removed.</dd>
- <dt id="PCI_POWERSTATE_D3_COLD"><a class="permalink" href="#PCI_POWERSTATE_D3_COLD"><code class="Dv">PCI_POWERSTATE_D3_COLD</code></a></dt>
- <dd>Same as <code class="Dv">PCI_POWERSTATE_D3_HOT</code>, except power has
- been removed from the device.</dd>
- <dt id="PCI_POWERSTATE_UNKNOWN"><a class="permalink" href="#PCI_POWERSTATE_UNKNOWN"><code class="Dv">PCI_POWERSTATE_UNKNOWN</code></a></dt>
- <dd>State of the device is unknown.</dd>
-</dl>
-<p class="Pp" id="pci_set_powerstate">The
- <a class="permalink" href="#pci_set_powerstate"><code class="Fn">pci_set_powerstate</code></a>()
- function is used to transition the device <var class="Fa">dev</var> to the
- PCI power state <var class="Fa">state</var>. If the device does not support
- power management capabilities or it does not support the specific power
- state <var class="Fa">state</var>, then the function will fail with
- <code class="Er">EOPNOTSUPP</code>.</p>
-<p class="Pp" id="pci_clear_pme">The
- <a class="permalink" href="#pci_clear_pme"><code class="Fn">pci_clear_pme</code></a>()
- function is used to clear any pending PME# signal and disable generation of
- power management events.</p>
-<p class="Pp" id="pci_enable_pme">The
- <a class="permalink" href="#pci_enable_pme"><code class="Fn">pci_enable_pme</code></a>()
- function is used to enable generation of power management events before
- suspending a device.</p>
-<p class="Pp" id="pci_iov_attach">The
- <a class="permalink" href="#pci_iov_attach"><code class="Fn">pci_iov_attach</code></a>()
- function is used to advertise that the given device (and associated device
- driver) supports PCI Single-Root I/O Virtualization (SR-IOV). A driver that
- supports SR-IOV must implement the <a class="Xr">PCI_IOV_INIT(9)</a>,
- <a class="Xr">PCI_IOV_ADD_VF(9)</a> and <a class="Xr">PCI_IOV_UNINIT(9)</a>
- methods. This function should be called during the
- <a class="Xr">DEVICE_ATTACH(9)</a> method. If this function returns an
- error, it is recommended that the device driver still successfully attaches,
- but runs with SR-IOV disabled. The <var class="Fa">pf_schema</var> and
- <var class="Fa">vf_schema</var> parameters are used to define what
- device-specific configuration parameters the device driver accepts when
- SR-IOV is enabled for the Physical Function (PF) and for individual Virtual
- Functions (VFs) respectively. See <a class="Xr">pci_iov_schema(9)</a> for
- details on how to construct the schema. If either the
- <span class="Pa">pf_schema</span> or <span class="Pa">vf_schema</span> is
- invalid or specifies parameter names that conflict with parameter names that
- are already in use, <code class="Fn">pci_iov_attach</code>() will return an
- error and SR-IOV will not be available on the PF device. If a driver does
- not accept configuration parameters for either the PF device or the VF
- devices, the driver must pass an empty schema for that device. The SR-IOV
- infrastructure takes ownership of the <var class="Fa">pf_schema</var> and
- <var class="Fa">vf_schema</var> and is responsible for freeing them. The
- driver must never free the schemas itself.</p>
-<p class="Pp" id="pci_iov_attach_name">The
- <a class="permalink" href="#pci_iov_attach_name"><code class="Fn">pci_iov_attach_name</code></a>()
- function is a variant of <code class="Fn">pci_iov_attach</code>() that
- allows the name of the associated character device in
- <span class="Pa">/dev/iov</span> to be specified by
- <var class="Fa">fmt</var>. The <code class="Fn">pci_iov_attach</code>()
- function uses the name of <var class="Fa">dev</var> as the device name.</p>
-<p class="Pp" id="pci_iov_detach">The
- <a class="permalink" href="#pci_iov_detach"><code class="Fn">pci_iov_detach</code></a>()
- function is used to advise the SR-IOV infrastructure that the driver for the
- given device is attempting to detach and that all SR-IOV resources for the
- device must be released. This function must be called during the
- <a class="Xr">DEVICE_DETACH(9)</a> method if
- <code class="Fn">pci_iov_attach</code>() was successfully called on the
- device and <code class="Fn">pci_iov_detach</code>() has not subsequently
- been called on the device and returned no error. If this function returns an
- error, the <a class="Xr">DEVICE_DETACH(9)</a> method must fail and return an
- error, as detaching the PF driver while VF devices are active would cause
- system instability. This function is safe to call and will always succeed if
- <code class="Fn">pci_iov_attach</code>() previously failed with an error on
- the given device, or if <code class="Fn">pci_iov_attach</code>() was never
- called on the device.</p>
-<p class="Pp" id="pci_save_state">The
- <a class="permalink" href="#pci_save_state"><code class="Fn">pci_save_state</code></a>()
- and
- <a class="permalink" href="#pci_restore_state"><code class="Fn" id="pci_restore_state">pci_restore_state</code></a>()
- functions can be used by a device driver to save and restore standard PCI
- config registers. The <code class="Fn">pci_save_state</code>() function must
- be invoked while the device has valid state before
- <code class="Fn">pci_restore_state</code>() can be used. If the device is
- not in the fully-powered state (<code class="Dv">PCI_POWERSTATE_D0</code>)
- when <code class="Fn">pci_restore_state</code>() is invoked, then the device
- will be transitioned to <code class="Dv">PCI_POWERSTATE_D0</code> before any
- config registers are restored.</p>
-<p class="Pp" id="pcie_flr">The
- <a class="permalink" href="#pcie_flr"><code class="Fn">pcie_flr</code></a>()
- function requests a Function Level Reset (FLR) of <var class="Fa">dev</var>.
- If <var class="Fa">dev</var> is not a PCI-express device or does not support
- Function Level Resets via the PCI-express device control register,
- <code class="Dv">false</code> is returned. Pending transactions are drained
- by disabling busmastering and calling
- <code class="Fn">pcie_wait_for_pending_transactions</code>() before
- resetting the device. The <var class="Fa">max_delay</var> argument specifies
- the maximum timeout to wait for pending transactions as described for
- <code class="Fn">pcie_wait_for_pending_transactions</code>(). If
- <code class="Fn">pcie_wait_for_pending_transactions</code>() fails with a
- timeout and <var class="Fa">force</var> is <code class="Dv">false</code>,
- busmastering is re-enabled and <code class="Dv">false</code> is returned. If
- <code class="Fn">pcie_wait_for_pending_transactions</code>() fails with a
- timeout and <var class="Fa">force</var> is <code class="Dv">true</code>, the
- device is reset despite the timeout. After the reset has been requested,
- <code class="Nm">pcie_flr</code> sleeps for at least 100 milliseconds before
- returning <code class="Dv">true</code>. Note that
- <code class="Nm">pcie_flr</code> does not save and restore any state around
- the reset. The caller should save and restore state as needed.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Message_Signaled_Interrupts"><a class="permalink" href="#Message_Signaled_Interrupts">Message
- Signaled Interrupts</a></h2>
-<p class="Pp">Message Signaled Interrupts (MSI) and Enhanced Message Signaled
- Interrupts (MSI-X) are PCI capabilities that provide an alternate method for
- PCI devices to signal interrupts. The legacy INTx interrupt is available to
- PCI devices as a <code class="Dv">SYS_RES_IRQ</code> resource with a
- resource ID of zero. MSI and MSI-X interrupts are available to PCI devices
- as one or more <code class="Dv">SYS_RES_IRQ</code> resources with resource
- IDs greater than zero. A driver must ask the PCI bus to allocate MSI or
- MSI-X interrupts using <code class="Fn">pci_alloc_msi</code>() or
- <code class="Fn">pci_alloc_msix</code>() before it can use MSI or MSI-X
- <code class="Dv">SYS_RES_IRQ</code> resources. A driver is not allowed to
- use the legacy INTx <code class="Dv">SYS_RES_IRQ</code> resource if MSI or
- MSI-X interrupts have been allocated, and attempts to allocate MSI or MSI-X
- interrupts will fail if the driver is currently using the legacy INTx
- <code class="Dv">SYS_RES_IRQ</code> resource. A driver is only allowed to
- use either MSI or MSI-X, but not both.</p>
-<p class="Pp" id="pci_msi_count">The
- <a class="permalink" href="#pci_msi_count"><code class="Fn">pci_msi_count</code></a>()
- function returns the maximum number of MSI messages supported by the device
- <var class="Fa">dev</var>. If the device does not support MSI, then
- <code class="Fn">pci_msi_count</code>() returns zero.</p>
-<p class="Pp" id="pci_alloc_msi">The
- <a class="permalink" href="#pci_alloc_msi"><code class="Fn">pci_alloc_msi</code></a>()
- function attempts to allocate <var class="Fa">*count</var> MSI messages for
- the device <var class="Fa">dev</var>. The
- <code class="Fn">pci_alloc_msi</code>() function may allocate fewer messages
- than requested for various reasons including requests for more messages than
- the device <var class="Fa">dev</var> supports, or if the system has a
- shortage of available MSI messages. On success, <var class="Fa">*count</var>
- is set to the number of messages allocated and
- <code class="Fn">pci_alloc_msi</code>() returns zero. The
- <code class="Dv">SYS_RES_IRQ</code> resources for the allocated messages
- will be available at consecutive resource IDs beginning with one. If
- <code class="Fn">pci_alloc_msi</code>() is not able to allocate any
- messages, it returns an error. Note that MSI only supports message counts
- that are powers of two; requests to allocate a non-power of two count of
- messages will fail.</p>
-<p class="Pp" id="pci_release_msi">The
- <a class="permalink" href="#pci_release_msi"><code class="Fn">pci_release_msi</code></a>()
- function is used to release any allocated MSI or MSI-X messages back to the
- system. If any MSI or MSI-X <code class="Dv">SYS_RES_IRQ</code> resources
- are allocated by the driver or have a configured interrupt handler, this
- function will fail with <code class="Er">EBUSY</code>. The
- <code class="Fn">pci_release_msi</code>() function returns zero on success
- and an error on failure.</p>
-<p class="Pp" id="pci_msix_count">The
- <a class="permalink" href="#pci_msix_count"><code class="Fn">pci_msix_count</code></a>()
- function returns the maximum number of MSI-X messages supported by the
- device <var class="Fa">dev</var>. If the device does not support MSI-X, then
- <code class="Fn">pci_msix_count</code>() returns zero.</p>
-<p class="Pp" id="pci_msix_pba_bar">The
- <a class="permalink" href="#pci_msix_pba_bar"><code class="Fn">pci_msix_pba_bar</code></a>()
- function returns the offset in configuration space of the Base Address
- Register (BAR) containing the MSI-X Pending Bit Array (PBA) for device
- <var class="Fa">dev</var>. The returned value can be used as the resource ID
- with <a class="Xr">bus_alloc_resource(9)</a> and
- <a class="Xr">bus_release_resource(9)</a> to allocate the BAR. If the device
- does not support MSI-X, then <code class="Fn">pci_msix_pba_bar</code>()
- returns -1.</p>
-<p class="Pp" id="pci_msix_table_bar">The
- <a class="permalink" href="#pci_msix_table_bar"><code class="Fn">pci_msix_table_bar</code></a>()
- function returns the offset in configuration space of the BAR containing the
- MSI-X vector table for device <var class="Fa">dev</var>. The returned value
- can be used as the resource ID with <a class="Xr">bus_alloc_resource(9)</a>
- and <a class="Xr">bus_release_resource(9)</a> to allocate the BAR. If the
- device does not support MSI-X, then
- <code class="Fn">pci_msix_table_bar</code>() returns -1.</p>
-<p class="Pp" id="pci_alloc_msix">The
- <a class="permalink" href="#pci_alloc_msix"><code class="Fn">pci_alloc_msix</code></a>()
- function attempts to allocate <var class="Fa">*count</var> MSI-X messages
- for the device <var class="Fa">dev</var>. The
- <code class="Fn">pci_alloc_msix</code>() function may allocate fewer
- messages than requested for various reasons including requests for more
- messages than the device <var class="Fa">dev</var> supports, or if the
- system has a shortage of available MSI-X messages. On success,
- <var class="Fa">*count</var> is set to the number of messages allocated and
- <code class="Fn">pci_alloc_msix</code>() returns zero. For MSI-X messages,
- the resource ID for each <code class="Dv">SYS_RES_IRQ</code> resource
- identifies the index in the MSI-X table of the corresponding message. A
- resource ID of one maps to the first index of the MSI-X table; a resource ID
- two identifies the second index in the table, etc. The
- <code class="Fn">pci_alloc_msix</code>() function assigns the
- <var class="Fa">*count</var> messages allocated to the first
- <var class="Fa">*count</var> table indices. If
- <code class="Fn">pci_alloc_msix</code>() is not able to allocate any
- messages, it returns an error. Unlike MSI, MSI-X does not require message
- counts that are powers of two.</p>
-<p class="Pp" id="pci_alloc_msix~2">The BARs containing the MSI-X vector table
- and PBA must be allocated via <a class="Xr">bus_alloc_resource(9)</a> before
- calling
- <a class="permalink" href="#pci_alloc_msix~2"><code class="Fn">pci_alloc_msix</code></a>()
- and must not be released until after calling
- <code class="Fn">pci_release_msi</code>(). Note that the vector table and
- PBA may be stored in the same BAR or in different BARs.</p>
-<p class="Pp" id="pci_pending_msix">The
- <a class="permalink" href="#pci_pending_msix"><code class="Fn">pci_pending_msix</code></a>()
- function examines the <var class="Fa">dev</var> device's PBA to determine
- the pending status of the MSI-X message at table index
- <var class="Fa">index</var>. If the indicated message is pending, this
- function returns a non-zero value; otherwise, it returns zero. Passing an
- invalid <var class="Fa">index</var> to this function will result in
- undefined behavior.</p>
-<p class="Pp" id="pci_alloc_msix~3">As mentioned in the description of
- <a class="permalink" href="#pci_alloc_msix~3"><code class="Fn">pci_alloc_msix</code></a>(),
- MSI-X messages are initially assigned to the first N table entries. A driver
- may use a different distribution of available messages to table entries via
- the <code class="Fn">pci_remap_msix</code>() function. Note that this
- function must be called after a successful call to
- <code class="Fn">pci_alloc_msix</code>() but before any of the
- <code class="Dv">SYS_RES_IRQ</code> resources are allocated. The
- <code class="Fn">pci_remap_msix</code>() function returns zero on success,
- or an error on failure.</p>
-<p class="Pp" id="pci_alloc_msix~4">The <var class="Fa">vectors</var> array
- should contain <var class="Fa">count</var> message vectors. The array maps
- directly to the MSI-X table in that the first entry in the array specifies
- the message used for the first entry in the MSI-X table, the second entry in
- the array corresponds to the second entry in the MSI-X table, etc. The
- vector value in each array index can either be zero to indicate that no
- message should be assigned to the corresponding MSI-X table entry, or it can
- be a number from one to N (where N is the count returned from the previous
- call to
- <a class="permalink" href="#pci_alloc_msix~4"><code class="Fn">pci_alloc_msix</code></a>())
- to indicate which of the allocated messages should be assigned to the
- corresponding MSI-X table entry.</p>
-<p class="Pp" id="pci_remap_msix">If
- <a class="permalink" href="#pci_remap_msix"><code class="Fn">pci_remap_msix</code></a>()
- succeeds, each MSI-X table entry with a non-zero vector will have an
- associated <code class="Dv">SYS_RES_IRQ</code> resource whose resource ID
- corresponds to the table index as described above for
- <code class="Fn">pci_alloc_msix</code>(). MSI-X table entries that with a
- vector of zero will not have an associated
- <code class="Dv">SYS_RES_IRQ</code> resource. Additionally, if any of the
- original messages allocated by <code class="Fn">pci_alloc_msix</code>() are
- not used in the new distribution of messages in the MSI-X table, they will
- be released automatically. Note that if a driver wishes to use fewer
- messages than were allocated by <code class="Fn">pci_alloc_msix</code>(),
- the driver must use a single, contiguous range of messages beginning with
- one in the new distribution. The <code class="Fn">pci_remap_msix</code>()
- function will fail if this condition is not met.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Device_Events"><a class="permalink" href="#Device_Events">Device
- Events</a></h2>
-<p class="Pp">The <var class="Va">pci_add_device</var> event handler is invoked
- every time a new PCI device is added to the system. This includes the
- creation of Virtual Functions via SR-IOV.</p>
-<p class="Pp">The <var class="Va">pci_delete_device</var> event handler is
- invoked every time a PCI device is removed from the system.</p>
-<p class="Pp">Both event handlers pass the <var class="Vt">device_t</var> object
- of the relevant PCI device as <var class="Fa">dev</var> to each callback
- function. Both event handlers are invoked while <var class="Fa">dev</var> is
- unattached but with valid instance variables.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pci(4)</a>, <a class="Xr">pciconf(8)</a>,
- <a class="Xr">bus_alloc_resource(9)</a>, <a class="Xr">bus_dma(9)</a>,
- <a class="Xr">bus_release_resource(9)</a>,
- <a class="Xr">bus_setup_intr(9)</a>, <a class="Xr">bus_teardown_intr(9)</a>,
- <a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a>, <a class="Xr">eventhandler(9)</a>,
- <a class="Xr">rman(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsT">NewBus</span>,
- <i class="RsB">FreeBSD Developers' Handbook</i>,
- <a class="RsU" href="https://docs.freebsd.org/en/books/developers-handbook/">https://docs.freebsd.org/en/books/developers-handbook/</a>.</cite></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Shanley</span> and
- <span class="RsA">Anderson</span>, <i class="RsB">PCI System
- Architecture</i>, <i class="RsI">Addison-Wesley</i>, <span class="RsN">2nd
- Edition</span>, <span class="RsO">ISBN 0-201-30974-2</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>&gt; and
- <span class="An">John Baldwin</span>
- &lt;<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The kernel PCI code has a number of references to &#x201C;slot
- numbers&#x201D;. These do not refer to the geographic location of PCI
- devices, but to the device number assigned by the combination of the PCI
- IDSEL mechanism and the platform firmware. This should be taken note of when
- working with the kernel PCI code.</p>
-<p class="Pp">The PCI bus driver should allocate the MSI-X vector table and PBA
- internally as necessary rather than requiring the caller to do so.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 27, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pci_iov_schema.9 3.html b/static/freebsd/man9/pci_iov_schema.9 3.html
deleted file mode 100644
index ae4d9e47..00000000
--- a/static/freebsd/man9/pci_iov_schema.9 3.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PCI_IOV_SCHEMA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PCI_IOV_SCHEMA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pci_iov_schema</code>,
- <code class="Nm">pci_iov_schema_alloc_node</code>,
- <code class="Nm">pci_iov_schema_add_bool</code>,
- <code class="Nm">pci_iov_schema_add_string</code>,
- <code class="Nm">pci_iov_schema_add_uint8</code>,
- <code class="Nm">pci_iov_schema_add_uint16</code>,
- <code class="Nm">pci_iov_schema_add_uint32</code>,
- <code class="Nm">pci_iov_schema_add_uint64</code>,
- <code class="Nm">pci_iov_schema_add_unicast_mac</code> &#x2014;
- <span class="Nd">PCI SR-IOV config schema interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/stdarg.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/nv.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/iov_schema.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">nvlist_t *</var>
- <br/>
- <code class="Fn">pci_iov_schema_alloc_node</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">int
- defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">const char
- *defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_uint8</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_uint16</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">uint16_t
- defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_uint32</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_uint64</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">uint64_t
- defaultVal</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pci_iov_schema_add_unicast_mac</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t
- *schema</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t
- flags</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t
- *defaultVal</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The PCI Single-Root I/O Virtualization (SR-IOV) configuration
- schema is a data structure that describes the device-specific configuration
- parameters that a PF driver will accept when SR-IOV is enabled on the PF
- device. Each PF driver defines two schema instances: the PF schema and the
- VF schema. The PF schema describes configuration that applies to the PF
- device as a whole. The VF schema describes configuration that applies to an
- individual VF device. Different VF devices may have different configuration
- applied to them, as long as the configuration for each VF conforms to the VF
- schema.</p>
-<p class="Pp">A PF driver builds a configuration schema by first allocating a
- schema node and then adding configuration parameter specifications to the
- schema. The configuration parameter specification consists of a name and a
- value type.</p>
-<p class="Pp">Configuration parameter names are case-insensitive. It is an error
- to specify two or more configuration parameters with the same name. It is
- also an error to specific a configuration parameter that uses the same name
- as a configuration parameter used by the SR-IOV infrastructure. See
- <a class="Xr">iovctl.conf(5)</a> for documentation of all configuration
- parameters used by the SR-IOV infrastructure.</p>
-<p class="Pp">The parameter type constrains the possible values that the
- configuration parameter may take.</p>
-<p class="Pp">A configuration parameter may be specified as a required parameter
- by setting the <code class="Dv">IOV_SCHEMA_REQUIRED</code> flag in the
- <span class="Pa">flags</span> argument. Required parameters must be
- specified by the user when SR-IOV is enabled. If the user does not specify a
- required parameter, the SR-IOV infrastructure will abort the request to
- enable SR-IOV and return an error to the user.</p>
-<p class="Pp">Alternatively, a configuration parameter may be given a default
- value by setting the <code class="Dv">IOV_SCHEMA_HASDEFAULT</code> flag in
- the <span class="Pa">flags</span> argument. If a configuration parameter has
- a default value but the user has not specified a value for that parameter,
- then the SR-IOV infrastructure will apply <span class="Pa">defaultVal</span>
- for that parameter in the configuration before passing it to the PF driver.
- It is an error for the value of the <span class="Pa">defaultVal</span>
- parameter to not conform to the restrictions of the specified type. If this
- flag is not specified then the <span class="Pa">defaultVal</span> argument
- is ignored. This flag is not compatible with the
- <code class="Dv">IOV_SCHEMA_REQUIRED</code> flag; it is an error to specify
- both on the same parameter.</p>
-<p class="Pp">The SR-IOV infrastructure guarantees that all configuration
- parameters that are either specified as required or given a default value
- will be present in the configuration passed to the PF driver. Configuration
- parameters that are neither specified as required nor given a default value
- are optional and may or may not be present in the configuration passed to
- the PF driver.</p>
-<p class="Pp">It is highly recommended that a PF driver reserve the use of
- optional parameters for configuration that is truly optional. For example, a
- Network Interface PF device might have the option to encapsulate all traffic
- to and from a VF device in a vlan tag. The PF driver could expose that
- option as a &quot;vlan&quot; parameter accepting an integer argument
- specifying the vlan tag. In this case, it would be appropriate to set the
- &quot;vlan&quot; parameter as an optional parameter as it would be
- legitimate for a VF to be configured to have no vlan tagging enabled at
- all.</p>
-<p class="Pp">Alternatively, if the PF device had an boolean option that
- controlled whether the VF was allowed to change its MAC address, it would
- not be appropriate to set this parameter as optional. The PF driver must
- either allow the MAC to change or not, so it would be more appropriate for
- the PF driver to document the default behaviour by specifying a default
- value in the schema (or potentially force the user to make the choice by
- setting the parameter to be required).</p>
-<p class="Pp">Configuration parameters that have security implications must
- default to the most secure configuration possible.</p>
-<p class="Pp">All device-specific configuration parameters must be documented in
- the manual page for the PF driver, or in a separate manual page that is
- cross-referenced from the main driver manual page.</p>
-<p class="Pp">It is not necessary for a PF driver to check for failure from any
- of these functions. If an error occurs, it is flagged in the schema. The
- <a class="Xr">pci_iov_attach(9)</a> function checks for this error and will
- fail to initialize SR-IOV on the PF device if an error is set in the schema.
- If this occurs, it is recommended that the PF driver still succeed in
- attaching and run with SR-IOV disabled on the device.</p>
-<p class="Pp" id="pci_iov_schema_alloc_node">The
- <a class="permalink" href="#pci_iov_schema_alloc_node"><code class="Fn">pci_iov_schema_alloc_node</code></a>()
- function is used to allocate an empty configuration schema. It is not
- necessary to check for failure from this function. The SR-IOV infrastructure
- will gracefully handle failure to allocate a schema and will simply not
- enable SR-IOV on the PF device.</p>
-<p class="Pp" id="pci_iov_schema_add_bool">The
- <a class="permalink" href="#pci_iov_schema_add_bool"><code class="Fn">pci_iov_schema_add_bool</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a boolean type.
- Boolean values can only take the value true or false (1 or 0,
- respectively).</p>
-<p class="Pp" id="pci_iov_schema_add_string">The
- <a class="permalink" href="#pci_iov_schema_add_string"><code class="Fn">pci_iov_schema_add_string</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a string type. String
- values are standard C strings.</p>
-<p class="Pp" id="pci_iov_schema_add_uint8">The
- <a class="permalink" href="#pci_iov_schema_add_uint8"><code class="Fn">pci_iov_schema_add_uint8</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a
- <var class="Vt">uint8_t</var> type. Values of type
- <var class="Vt">uint8_t</var> are unsigned integers in the range 0 to 255,
- inclusive.</p>
-<p class="Pp" id="pci_iov_schema_add_uint16">The
- <a class="permalink" href="#pci_iov_schema_add_uint16"><code class="Fn">pci_iov_schema_add_uint16</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a
- <var class="Vt">uint16_t</var> type. Values of type
- <var class="Vt">uint16_t</var> are unsigned integers in the range 0 to
- 65535, inclusive.</p>
-<p class="Pp" id="pci_iov_schema_add_uint32">The
- <a class="permalink" href="#pci_iov_schema_add_uint32"><code class="Fn">pci_iov_schema_add_uint32</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a
- <var class="Vt">uint32_t</var> type. Values of type
- <var class="Vt">uint32_t</var> are unsigned integers in the range 0 to
- (2**32 - 1), inclusive.</p>
-<p class="Pp" id="pci_iov_schema_add_uint64">The
- <a class="permalink" href="#pci_iov_schema_add_uint64"><code class="Fn">pci_iov_schema_add_uint64</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a
- <var class="Vt">uint64_t</var> type. Values of type
- <var class="Vt">uint64_t</var> are unsigned integers in the range 0 to
- (2**64 - 1), inclusive.</p>
-<p class="Pp" id="pci_iov_schema_add_unicast_mac">The
- <a class="permalink" href="#pci_iov_schema_add_unicast_mac"><code class="Fn">pci_iov_schema_add_unicast_mac</code></a>()
- function is used to specify a configuration parameter in the given schema
- with the name <span class="Pa">name</span> and having a unicast-mac type.
- Values of type unicast-mac are binary values exactly 6 bytes long. The MAC
- address is guaranteed to not be a multicast or broadcast address.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pci_iov_schema_alloc_node</code>() function
- returns a pointer to the allocated schema, or NULL if a failure occurs.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pci(9)</a>, <a class="Xr">PCI_IOV_ADD_VF(9)</a>,
- <a class="Xr">PCI_IOV_INIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span>
- &#x27E8;rstone@FreeBSD.org&#x27E9;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 8, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pfil.9 3.html b/static/freebsd/man9/pfil.9 3.html
deleted file mode 100644
index 1a7b42e2..00000000
--- a/static/freebsd/man9/pfil.9 3.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PFIL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PFIL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pfil</code>,
- <code class="Nm">pfil_head_register</code>,
- <code class="Nm">pfil_head_unregister</code>,
- <code class="Nm">pfil_link</code>, <code class="Nm">pfil_run_hooks</code>
- &#x2014; <span class="Nd">packet filter interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mbuf.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/pfil.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">pfil_head_t</var>
- <br/>
- <code class="Fn">pfil_head_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- pfil_head_args *args</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pfil_head_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- pfil_head_t *head</var>);</p>
-<p class="Pp"><var class="Ft">pfil_hook_t</var>
- <br/>
- <code class="Fn">pfil_add_hook</code>(<var class="Fa" style="white-space: nowrap;">struct
- pfil_hook_args *</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pfil_remove_hook</code>(<var class="Fa" style="white-space: nowrap;">pfil_hook_t</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pfil_link</code>(<var class="Fa" style="white-space: nowrap;">struct
- pfil_link_args *args</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pfil_run_hooks</code>(<var class="Fa" style="white-space: nowrap;">phil_head_t
- *</var>, <var class="Fa" style="white-space: nowrap;">pfil_packet_t</var>,
- <var class="Fa" style="white-space: nowrap;">struct ifnet *</var>,
- <var class="Fa" style="white-space: nowrap;">int</var>,
- <var class="Fa" style="white-space: nowrap;">struct inpcb *</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">pfil</code> framework allows for a specified
- function or a list of functions to be invoked for every incoming or outgoing
- packet for a particular network I/O stream. These hooks may be used to
- implement a firewall or perform packet transformations.</p>
-<p class="Pp" id="heads">Packet filtering points, for historical reasons named
- <a class="permalink" href="#heads"><i class="Em">heads</i></a>, are
- registered with
- <a class="permalink" href="#pfil_head_register"><code class="Fn" id="pfil_head_register">pfil_head_register</code></a>().
- The function is supplied with special versioned <var class="Vt">struct
- pfil_head_args</var> structure that specifies type and features of the head
- as well as human readable name. If the filtering point to be ever destroyed,
- the subsystem that created it must unregister it with call to
- <a class="permalink" href="#pfil_head_unregister"><code class="Fn" id="pfil_head_unregister">pfil_head_unregister</code></a>().</p>
-<p class="Pp" id="hooks">Packet filtering systems may register arbitrary number
- of filters, for historical reasons named
- <a class="permalink" href="#hooks"><i class="Em">hooks</i></a>. To register
- a new hook
- <a class="permalink" href="#pfil_add_hook"><code class="Fn" id="pfil_add_hook">pfil_add_hook</code></a>()
- with special versioned <var class="Vt">struct pfil_hook_args</var> structure
- is called. The structure specifies type and features of the hook, pointer to
- the actual filtering function and user readable name of the filtering module
- and ruleset name. Later hooks can be removed with
- <a class="permalink" href="#pfil_remove_hook"><code class="Fn" id="pfil_remove_hook">pfil_remove_hook</code></a>()
- functions.</p>
-<p class="Pp" id="hook">To connect existing
- <a class="permalink" href="#hook"><i class="Em">hook</i></a> to an existing
- <i class="Em">head</i> function
- <a class="permalink" href="#pfil_link"><code class="Fn" id="pfil_link">pfil_link</code></a>()
- shall be used. The function is supplied with versioned
- <var class="Vt">struct pfil_link_args</var> structure that specifies either
- literal names of hook and head or pointers to them. Typically
- <code class="Fn">pfil_link</code>() is called by filtering modules to
- autoregister their default ruleset and default filtering points. It also
- serves on the kernel side of <a class="Xr">ioctl(2)</a> when user changes
- <code class="Nm">pfil</code> configuration with help of
- <a class="Xr">pfilctl(8)</a> utility.</p>
-<p class="Pp" id="pfil_run_hooks">For every packet traveling through a
- <i class="Em">head</i> the latter shall invoke
- <a class="permalink" href="#pfil_run_hooks"><code class="Fn">pfil_run_hooks</code></a>().
- The function can accept either <var class="Vt">struct mbuf *</var> pointer
- or a <var class="Vt">void *</var> pointer and length. In case if a hooked
- filtering module cannot understand <var class="Vt">void *</var> pointer
- <code class="Nm">pfil</code> will provide it with a fake one. All calls to
- <code class="Fn">pfil_run_hooks</code>() are performed in network
- <a class="Xr">epoch(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HEADS_(filtering_points)"><a class="permalink" href="#HEADS_(filtering_points)">HEADS
- (filtering points)</a></h1>
-<p class="Pp">By default kernel creates the following heads:</p>
-<dl class="Bl-tag">
- <dt>inet</dt>
- <dd>IPv4 packets.</dd>
- <dt>inet6</dt>
- <dd>IPv6 packets.</dd>
- <dt>ethernet</dt>
- <dd>Link-layer packets.</dd>
-</dl>
-<p class="Pp">Default rulesets are automatically linked to these heads to
- preserve historical behaviour.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ipfilter(4)</a>, <a class="Xr">ipfw(4)</a>,
- <a class="Xr">pf(4)</a>, <a class="Xr">pfilctl(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">pfil</code> interface first appeared in
- <span class="Ux">NetBSD 1.3</span>. The <code class="Nm">pfil</code>
- interface was imported into <span class="Ux">FreeBSD 5.2</span>. In
- <span class="Ux">FreeBSD 13.0</span> the interface was significantly
- rewritten.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 28, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pfind.9 4.html b/static/freebsd/man9/pfind.9 4.html
deleted file mode 100644
index 9ec43a3f..00000000
--- a/static/freebsd/man9/pfind.9 4.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PFIND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PFIND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pfind</code>, <code class="Nm">pfind_any</code>,
- <code class="Nm">pfind_any_locked</code> &#x2014; <span class="Nd">locate a
- process by number</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct proc *</var>
- <br/>
- <code class="Fn">pfind</code>(<var class="Fa" style="white-space: nowrap;">pid_t
- pid</var>);</p>
-<p class="Pp"><var class="Ft">struct proc *</var>
- <br/>
- <code class="Fn">pfind_any</code>(<var class="Fa" style="white-space: nowrap;">pid_t
- pid</var>);</p>
-<p class="Pp"><var class="Ft">struct proc *</var>
- <br/>
- <code class="Fn">pfind_any_locked</code>(<var class="Fa" style="white-space: nowrap;">pid_t
- pid</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pfind"><code class="Fn" id="pfind">pfind</code></a>()
- function walks the list of processes in the system, looking for the one with
- a process ID of <var class="Fa">pid</var>. If the process exists, and is not
- in the zombie state, a pointer to the process structure will be
- returned.</p>
-<p class="Pp" id="pfind_any"><a class="permalink" href="#pfind_any"><code class="Fn">pfind_any</code></a>()
- takes a <var class="Fa">pid</var> as its argument.
- <code class="Fn">pfind_any</code>() searches the
- <var class="Va">allproc</var> list and returns the first process with a
- matching PID, whose state may be <code class="Dv">PRS_ZOMBIE</code>.</p>
-<p class="Pp" id="pfind_any_locked"><a class="permalink" href="#pfind_any_locked"><code class="Fn">pfind_any_locked</code></a>()
- is similar to <code class="Fn">pfind_any</code>(), but it does not lock the
- process hash bucket for the given <var class="Vt">pid</var>. Instead, it
- asserts the corresponding process hash bucket is already locked.</p>
-<p class="Pp" id="pfind~2">All three functions
- <a class="permalink" href="#pfind~2"><code class="Fn">pfind</code></a>(),
- <code class="Fn">pfind_any</code>(), and
- <code class="Fn">pfind_any_locked</code>() lock the
- <var class="Vt">proc</var> structure before returning.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">pfind</code>(),
- <code class="Fn">pfind_any</code>(), and
- <code class="Fn">pfind_any_locked</code>() return pointer to a
- <var class="Vt">proc</var> structure on success or
- <code class="Dv">NULL</code> on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pget(9)</a>, <a class="Xr">pgfind(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Evan
- Sarmiento</span>
- &lt;<a class="Mt" href="mailto:kaworu@sektor7.ath.cx">kaworu@sektor7.ath.cx</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 3, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pget.9 4.html b/static/freebsd/man9/pget.9 4.html
deleted file mode 100644
index 5f143c73..00000000
--- a/static/freebsd/man9/pget.9 4.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PGET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PGET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pget</code> &#x2014; <span class="Nd">locate a
- process by number</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pget</code>(<var class="Fa" style="white-space: nowrap;">pid_t
- pid</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">struct proc **pp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function takes a <var class="Fa">pid</var> as its argument,
- which can be either a process or thread id, and fills a pointer to the
- <var class="Vt">proc</var> structure in <var class="Fa">*pp</var>. In the
- latter case, a process owning the specified thread is looked for. The
- operation is performed by invoking the <a class="Xr">pfind(9)</a> function.
- The found process is returned locked. For the
- <code class="Dv">PGET_HOLD</code> case, it is returned unlocked (but held).
- The
- <a class="permalink" href="#pget"><code class="Fn" id="pget">pget</code></a>()
- function can perform additional manipulations, depending on a
- <var class="Fa">flags</var> argument.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument is the logical OR of some
- subset of:</p>
-<dl class="Bl-tag">
- <dt id="PGET_HOLD"><a class="permalink" href="#PGET_HOLD"><code class="Dv">PGET_HOLD</code></a></dt>
- <dd>If set, the found process will be held and unlocked.</dd>
- <dt id="PGET_CANSEE"><a class="permalink" href="#PGET_CANSEE"><code class="Dv">PGET_CANSEE</code></a></dt>
- <dd>If set, the found process will be checked for its visibility. See
- <a class="Xr">p_cansee(9)</a>.</dd>
- <dt id="PGET_CANDEBUG"><a class="permalink" href="#PGET_CANDEBUG"><code class="Dv">PGET_CANDEBUG</code></a></dt>
- <dd>If set, the found process will be checked for its debuggability. See
- <a class="Xr">p_candebug(9)</a>.</dd>
- <dt id="PGET_ISCURRENT"><a class="permalink" href="#PGET_ISCURRENT"><code class="Dv">PGET_ISCURRENT</code></a></dt>
- <dd>If set, the found process will be checked that it matches the current
- process context.</dd>
- <dt id="PGET_NOTWEXIT"><a class="permalink" href="#PGET_NOTWEXIT"><code class="Dv">PGET_NOTWEXIT</code></a></dt>
- <dd>If set, the found process will be checked that it does not have the
- process flag <code class="Dv">P_WEXIT</code> set.</dd>
- <dt id="PGET_NOTINEXEC"><a class="permalink" href="#PGET_NOTINEXEC"><code class="Dv">PGET_NOTINEXEC</code></a></dt>
- <dd>If set, the found process will be checked that it does not have the
- process flag <code class="Dv">P_INEXEC</code> set.</dd>
- <dt id="PGET_NOTID"><a class="permalink" href="#PGET_NOTID"><code class="Dv">PGET_NOTID</code></a></dt>
- <dd>If set, <var class="Fa">pid</var> is not assumed as a thread id for values
- larger than <code class="Dv">PID_MAX</code>.</dd>
- <dt id="PGET_WANTREAD"><a class="permalink" href="#PGET_WANTREAD"><code class="Dv">PGET_WANTREAD</code></a></dt>
- <dd>If set, the found process will be checked that the caller may get a read
- access to its structure. A shorthand for
- (<code class="Dv">PGET_HOLD</code> | <code class="Dv">PGET_CANDEBUG</code>
- | <code class="Dv">PGET_NOTWEXIT</code>).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the process is found in the specified way, then zero is
- returned, otherwise an appropriate error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">p_candebug(9)</a>, <a class="Xr">p_cansee(9)</a>,
- <a class="Xr">pfind(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 3, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pgfind.9 4.html b/static/freebsd/man9/pgfind.9 4.html
deleted file mode 100644
index e9830402..00000000
--- a/static/freebsd/man9/pgfind.9 4.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PGFIND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PGFIND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pgfind</code> &#x2014; <span class="Nd">locate a
- process group by number</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct pgrp *</var>
- <br/>
- <code class="Fn">pgfind</code>(<var class="Fa" style="white-space: nowrap;">pid_t
- pgid</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pgfind"><code class="Fn" id="pgfind">pgfind</code></a>()
- function takes a <var class="Fa">pgid</var> as its argument and returns a
- pointer to the <var class="Vt">pgrp</var> structure whose
- <var class="Va">pg_id</var> is specified in the argument.</p>
-<p class="Pp" id="pgfind~2"><a class="permalink" href="#pgfind~2"><code class="Fn">pgfind</code></a>()
- locks the <var class="Vt">pgrp</var> structure that is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pgfind</code>() function returns
- <code class="Dv">NULL</code> on failure or a pointer to a
- <var class="Vt">pgrp</var> structure on successful completion.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pfind(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Evan
- Sarmiento</span>
- &lt;<a class="Mt" href="mailto:kaworu@sektor7.ath.cx">kaworu@sektor7.ath.cx</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 8, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/physio.9 4.html b/static/freebsd/man9/physio.9 4.html
deleted file mode 100644
index 2992988d..00000000
--- a/static/freebsd/man9/physio.9 4.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PHYSIO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PHYSIO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">physio</code> &#x2014; <span class="Nd">initiate
- I/O on raw devices</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bio.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">physio</code>(<var class="Fa" style="white-space: nowrap;">struct
- cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">int
- ioflag</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#physio"><code class="Fn" id="physio">physio</code></a>()
- is a helper function typically called from character device
- <code class="Fn">read</code>() and <code class="Fn">write</code>() routines
- to start I/O on a user process buffer. The maximum amount of data to
- transfer with each call is determined by
- <var class="Fa">dev-&gt;si_iosize_max</var>. The
- <code class="Fn">physio</code>() call converts the I/O request into a
- <a class="permalink" href="#strategy"><code class="Fn" id="strategy">strategy</code></a>()
- request and passes the new request to the driver's
- <code class="Fn">strategy</code>() routine for processing.</p>
-<p class="Pp" id="physio~2">Since <var class="Fa">uio</var> normally describes
- user space addresses,
- <a class="permalink" href="#physio~2"><code class="Fn">physio</code></a>()
- needs to lock those pages into memory. This is done by calling
- <a class="permalink" href="#vmapbuf"><code class="Fn" id="vmapbuf">vmapbuf</code></a>()
- for the appropriate pages. <code class="Fn">physio</code>() always awaits
- the completion of the entire requested transfer before returning, unless an
- error condition is detected earlier.</p>
-<p class="Pp">A break-down of the arguments follows:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">dev</var></dt>
- <dd>The device number identifying the device to interact with.</dd>
- <dt><var class="Fa">uio</var></dt>
- <dd>The description of the entire transfer as requested by the user process.
- Currently, the results of passing a <var class="Fa">uio</var> structure
- with the <var class="Va">uio_segflg</var> set to anything other than
- <code class="Dv">UIO_USERSPACE</code> are undefined.</dd>
- <dt id="read"><var class="Fa">ioflag</var></dt>
- <dd>The ioflag argument from the
- <a class="permalink" href="#read"><code class="Fn">read</code></a>() or
- <a class="permalink" href="#write"><code class="Fn" id="write">write</code></a>()
- function calling <code class="Fn">physio</code>().</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful <code class="Fn">physio</code>() returns 0.
- <code class="Er">EFAULT</code> is returned if the address range described by
- <var class="Fa">uio</var> is not accessible by the requesting process.
- <code class="Fn">physio</code>() will return any error resulting from calls
- to the device strategy routine, by examining the
- <code class="Dv">B_ERROR</code> buffer flag and the
- <var class="Va">b_error</var> field. Note that the actual transfer size may
- be less than requested by <var class="Fa">uio</var> if the device signals an
- &#x201C;end of file&#x201D; condition.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">read(2)</a>, <a class="Xr">write(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">physio</code> manual page is originally from
- <span class="Ux">NetBSD</span> with minor changes for applicability with
- <span class="Ux">FreeBSD</span>.</p>
-<p class="Pp">The <code class="Nm">physio</code> call has been completely
- re-written for providing higher I/O and paging performance.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 19, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap.9 4.html b/static/freebsd/man9/pmap.9 4.html
deleted file mode 100644
index 7f71ac8d..00000000
--- a/static/freebsd/man9/pmap.9 4.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap</code> &#x2014;
- <span class="Nd">machine-dependent portion of virtual memory
- subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">pmap</code> module is the machine-dependent
- portion of the <span class="Ux">FreeBSD</span> VM (Virtual Memory)
- sub-system. Each function documented herein must have its own
- architecture-dependent implementation.</p>
-<p class="Pp">The <code class="Nm">pmap</code> module is responsible for
- managing hardware-dependent objects such as page tables, address maps, TLBs,
- etc.</p>
-<p class="Pp">Machine-dependent code must provide the header file
- <code class="In">&lt;<a class="In">machine/pmap.h</a>&gt;</code>. This file
- contains the definition of the <var class="Vt">pmap</var> structure:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct pmap {
- /* Contents defined by pmap implementation. */
-};
-typedef struct pmap *pmap_t;</pre>
-</div>
-<p class="Pp">This header file may also define other data structures used by the
- <code class="Nm">pmap</code> implementation.</p>
-<p class="Pp">The header file
- <code class="In">&lt;<a class="In">vm/pmap.h</a>&gt;</code> defines a
- structure for tracking <code class="Nm">pmap</code> statistics (see below).
- This structure is defined as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct pmap_statistics {
- long resident_count; /* number of mapped pages */
- long wired_count; /* number of wired pages */
-};</pre>
-</div>
-<p class="Pp">The implementation's <var class="Vt">struct pmap</var> must
- contain an instance of this structure having the name
- <var class="Va">pm_stats</var>, and it must be updated by the implementation
- after each relevant <code class="Nm">pmap</code> operation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap_activate(9)</a>,
- <a class="Xr">pmap_clear_modify(9)</a>, <a class="Xr">pmap_copy(9)</a>,
- <a class="Xr">pmap_copy_page(9)</a>, <a class="Xr">pmap_enter(9)</a>,
- <a class="Xr">pmap_extract(9)</a>,
- <a class="Xr">pmap_extract_and_hold(9)</a>,
- <a class="Xr">pmap_growkernel(9)</a>, <a class="Xr">pmap_init(9)</a>,
- <a class="Xr">pmap_is_modified(9)</a>,
- <a class="Xr">pmap_is_prefaultable(9)</a>,
- <a class="Xr">pmap_kextract(9)</a>, <a class="Xr">pmap_map(9)</a>,
- <a class="Xr">pmap_mincore(9)</a>, <a class="Xr">pmap_object_init_pt(9)</a>,
- <a class="Xr">pmap_page_exists_quick(9)</a>,
- <a class="Xr">pmap_page_init(9)</a>, <a class="Xr">pmap_pinit(9)</a>,
- <a class="Xr">pmap_pinit0(9)</a>, <a class="Xr">pmap_protect(9)</a>,
- <a class="Xr">pmap_qenter(9)</a>, <a class="Xr">pmap_qremove(9)</a>,
- <a class="Xr">pmap_quick_enter_page(9)</a>,
- <a class="Xr">pmap_quick_remove_page(9)</a>,
- <a class="Xr">pmap_release(9)</a>, <a class="Xr">pmap_remove(9)</a>,
- <a class="Xr">pmap_remove_all(9)</a>,
- <a class="Xr">pmap_remove_pages(9)</a>,
- <a class="Xr">pmap_resident_count(9)</a>,
- <a class="Xr">pmap_ts_referenced(9)</a>, <a class="Xr">pmap_unwire(9)</a>,
- <a class="Xr">pmap_wired_count(9)</a>, <a class="Xr">pmap_zero_area(9)</a>,
- <a class="Xr">pmap_zero_page(9)</a>, <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 12, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_activate.9 4.html b/static/freebsd/man9/pmap_activate.9 4.html
deleted file mode 100644
index de2fd7da..00000000
--- a/static/freebsd/man9/pmap_activate.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_ACTIVATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_ACTIVATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_activate</code> &#x2014;
- <span class="Nd">activate a physical map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_activate</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_activate"><code class="Fn" id="pmap_activate">pmap_activate</code></a>()
- function activates the physical map for a user thread
- <var class="Fa">td</var>. This function must be called before the thread's
- address space may be accessed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_clear_modify.9 4.html b/static/freebsd/man9/pmap_clear_modify.9 4.html
deleted file mode 100644
index 1debe353..00000000
--- a/static/freebsd/man9/pmap_clear_modify.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_CLEAR_MODIFY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_CLEAR_MODIFY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_clear_modify</code> &#x2014;
- <span class="Nd">set information about physical pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_clear_modify</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_clear_modify"><code class="Fn" id="pmap_clear_modify">pmap_clear_modify</code></a>()
- function clears the &#x201C;modified&#x201D; bit on the physical page
- <var class="Fa">m</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>,
- <a class="Xr">pmap_is_modified(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 17, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_copy.9 4.html b/static/freebsd/man9/pmap_copy.9 4.html
deleted file mode 100644
index 0126b737..00000000
--- a/static/freebsd/man9/pmap_copy.9 4.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_COPY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_COPY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_copy</code>,
- <code class="Nm">pmap_copy_page</code> &#x2014; <span class="Nd">copy
- physical memory pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_copy</code>(<var class="Fa">pmap_t dst_pmap</var>,
- <var class="Fa">pmap_t src_pmap</var>, <var class="Fa">vm_offset_t
- dst_addr</var>, <var class="Fa">vm_size_t len</var>,
- <var class="Fa">vm_offset_t src_addr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_copy_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- src</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t
- dst</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_copy"><code class="Fn" id="pmap_copy">pmap_copy</code></a>()
- function copies the range specified by <var class="Fa">src_addr</var> and
- <var class="Fa">len</var> from the source physical map
- <var class="Fa">src_pmap</var> to the destination physical map
- <var class="Fa">dst_pmap</var> at the address
- <var class="Fa">dst_addr</var>.</p>
-<p class="Pp" id="pmap_copy_page">The
- <a class="permalink" href="#pmap_copy_page"><code class="Fn">pmap_copy_page</code></a>()
- function copies the physical page <var class="Fa">src</var> to the physical
- page <var class="Fa">dst</var>, by mapping the page into kernel virtual
- address space (KVA), and using
- <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>()
- to copy the page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_copy</code>() routine is only advisory
- and need not do anything. Actually implementing it may seriously reduce
- system performance.</p>
-<p class="Pp">The <code class="Fn">pmap_copy_page</code>() routine only operates
- upon a single page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bcopy(3)</a>, <a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_enter.9 3.html b/static/freebsd/man9/pmap_enter.9 3.html
deleted file mode 100644
index 2070b99f..00000000
--- a/static/freebsd/man9/pmap_enter.9 3.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_ENTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_ENTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_enter</code> &#x2014;
- <span class="Nd">insert a virtual page into a physical map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pmap_enter</code>(<var class="Fa">pmap_t pmap</var>,
- <var class="Fa">vm_offset_t va</var>, <var class="Fa">vm_page_t m</var>,
- <var class="Fa">vm_prot_t prot</var>, <var class="Fa">u_int flags</var>,
- <var class="Fa">int8_t psind</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_enter"><code class="Fn" id="pmap_enter">pmap_enter</code></a>()
- function creates a mapping in the physical map <var class="Fa">pmap</var>
- from the virtual address <var class="Fa">va</var> to the physical page
- <var class="Fa">m</var> with the protection <var class="Fa">prot</var>. Any
- previous mapping at the virtual address <var class="Fa">va</var> is
- destroyed.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument may have the following
- values:</p>
-<dl class="Bl-tag">
- <dt id="VM_PROT_READ"><a class="permalink" href="#VM_PROT_READ"><code class="Dv">VM_PROT_READ</code></a></dt>
- <dd>A read access to the given virtual address triggered the call.</dd>
- <dt id="VM_PROT_WRITE"><a class="permalink" href="#VM_PROT_WRITE"><code class="Dv">VM_PROT_WRITE</code></a></dt>
- <dd>A write access to the given virtual address triggered the call.</dd>
- <dt id="VM_PROT_EXECUTE"><a class="permalink" href="#VM_PROT_EXECUTE"><code class="Dv">VM_PROT_EXECUTE</code></a></dt>
- <dd>An execute access to the given virtual address triggered the call.</dd>
- <dt id="PMAP_ENTER_WIRED"><a class="permalink" href="#PMAP_ENTER_WIRED"><code class="Dv">PMAP_ENTER_WIRED</code></a></dt>
- <dd>The mapping should be marked as wired.</dd>
- <dt id="PMAP_ENTER_NOSLEEP"><a class="permalink" href="#PMAP_ENTER_NOSLEEP"><code class="Dv">PMAP_ENTER_NOSLEEP</code></a></dt>
- <dd>This function may not sleep during creation of the mapping. If the mapping
- cannot be created without sleeping, an appropriate Mach VM error is
- returned.</dd>
-</dl>
-If the <code class="Dv">PMAP_ENTER_NOSLEEP</code> flag is not specified, this
- function must create the requested mapping before returning. It may not fail.
- In order to create the requested mapping, this function may destroy any
- non-wired mapping in any pmap.
-<p class="Pp">The <var class="Fa">psind</var> parameter specifies the page size
- that should be used by the mapping. The supported page sizes are described
- by the global array <code class="Dv">pagesizes[]</code>. The desired page
- size is specified by passing the index of the array element that equals the
- desired page size.</p>
-<p class="Pp" id="pmap_enter~2">When the
- <a class="permalink" href="#pmap_enter~2"><code class="Fn">pmap_enter</code></a>()
- function destroys or updates a managed mapping, including an existing
- mapping at virtual address <var class="Fa">va</var>, it updates the
- <var class="Ft">vm_page</var> structure corresponding to the previously
- mapped physical page. If the physical page was accessed through the managed
- mapping, then the <var class="Ft">vm_page</var> structure's
- <code class="Dv">PGA_REFERENCED</code> aflag is set. If the physical page
- was modified through the managed mapping, then the
- <a class="permalink" href="#vm_page_dirty"><code class="Fn" id="vm_page_dirty">vm_page_dirty</code></a>()
- function is called on the <var class="Ft">vm_page</var> structure.</p>
-<p class="Pp">The <code class="Dv">PGA_WRITEABLE</code> aflag must be set for
- the page <var class="Fa">m</var> if the new mapping is managed and
- writeable. It is advised to clear <code class="Dv">PGA_WRITEABLE</code> for
- destroyed mappings if the implementation can ensure that no other writeable
- managed mappings for the previously mapped pages exist.</p>
-<p class="Pp">If the request modifies an existing mapping to use a different
- physical page, an implementation of <code class="Nm">pmap_enter</code> must
- invalidate the previous mapping before installing the new one. This ensures
- that all threads sharing the pmap keep a consistent view of the mapping,
- which is necessary for the correct handling of CoW (copy on write)
- faults.</p>
-<p class="Pp">If the page <var class="Fa">m</var> is managed, the page must be
- busied by the caller or the owning object must be locked. In the later case,
- the <code class="Dv">PMAP_ENTER_NOSLEEP</code> must be specified by the
- caller.</p>
-<p class="Pp" id="pmap_enter~3">The
- <a class="permalink" href="#pmap_enter~3"><code class="Fn">pmap_enter</code></a>()
- function must handle the multiprocessor TLB consistency for the given
- address.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">On arm and i386 architectures the existing implementation of the
- <code class="Nm">pmap_enter</code> function is incomplete, only value 0 for
- <var class="Fa">psind</var> is supported. Other supported architectures,
- except amd64, have <code class="Dv">pagesizes[]</code> array of size 1.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, the <code class="Fn">pmap_enter</code>() function
- returns <code class="Er">KERN_SUCCESS</code>. If the
- <code class="Dv">PMAP_ENTER_NOSLEEP</code> flag was specified and the
- resources required for the mapping cannot be acquired without sleeping,
- <code class="Dv">KERN_RESOURCE_SHORTAGE</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was first written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt; and then
- rewritten by
- <br/>
- <span class="An">Alan Cox</span>
- &lt;<a class="Mt" href="mailto:alc@FreeBSD.org">alc@FreeBSD.org</a>&gt; and
- <br/>
- <span class="An">Konstantin Belousov</span>
- &lt;<a class="Mt" href="mailto:kib@FreeBSD.org">kib@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 16, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_extract.9 4.html b/static/freebsd/man9/pmap_extract.9 4.html
deleted file mode 100644
index b78eb29a..00000000
--- a/static/freebsd/man9/pmap_extract.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_EXTRACT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_EXTRACT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_extract</code>,
- <code class="Nm">pmap_extract_and_hold</code> &#x2014; <span class="Nd">map
- a virtual address to a physical page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_paddr_t</var>
- <br/>
- <code class="Fn">pmap_extract</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- va</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">pmap_extract_and_hold</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- va</var>, <var class="Fa" style="white-space: nowrap;">vm_prot_t
- prot</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_extract"><code class="Fn" id="pmap_extract">pmap_extract</code></a>()
- function maps a virtual address to a physical page. In certain situations,
- callers may use <code class="Fn">pmap_extract_and_hold</code>() instead, to
- ensure that the returned page is held.</p>
-<p class="Pp" id="pmap_extract_and_hold">The
- <a class="permalink" href="#pmap_extract_and_hold"><code class="Fn">pmap_extract_and_hold</code></a>()
- function maps a virtual address to a physical page, and atomically holds the
- returned page for use by the caller, only if the mapping permits the given
- page protection.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Currently, the page protection requested by the caller is not
- verified.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_extract</code>() function will return
- the physical page address associated with the virtual address
- <var class="Fa">va</var> inside the physical map <var class="Fa">pmap</var>.
- If the mapping does not exist, or if the <var class="Fa">pmap</var>
- parameter is <code class="Dv">NULL</code>, then <code class="Dv">NULL</code>
- will be returned.</p>
-<p class="Pp">The <code class="Fn">pmap_extract_and_hold</code>() function will
- return the <var class="Ft">vm_page_t</var> associated with the virtual
- address <var class="Fa">va</var> inside the physical map
- <var class="Fa">pmap</var>. If the mapping does not exist, the result is a
- no-op, and <code class="Dv">NULL</code> will be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mutex(9)</a>, <a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Fn">pmap_extract_and_hold</code>() function was
- implemented by <span class="An">Alan L. Cox</span>
- &lt;<a class="Mt" href="mailto:alc@imimic.com">alc@imimic.com</a>&gt;. This
- manual page was written by <span class="An">Bruce M Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_growkernel.9 4.html b/static/freebsd/man9/pmap_growkernel.9 4.html
deleted file mode 100644
index 54b08971..00000000
--- a/static/freebsd/man9/pmap_growkernel.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_GROWKERNEL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_GROWKERNEL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_growkernel</code> &#x2014;
- <span class="Nd">grow the kernel virtual address (KVA) space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_growkernel</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t
- addr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_growkernel"><code class="Fn" id="pmap_growkernel">pmap_growkernel</code></a>()
- function grows the kernel virtual address space to the virtual address
- <var class="Fa">addr</var>.</p>
-<p class="Pp">It will allocate more page entries if required.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_init.9 4.html b/static/freebsd/man9/pmap_init.9 4.html
deleted file mode 100644
index 6c49b889..00000000
--- a/static/freebsd/man9/pmap_init.9 4.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_INIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_INIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_init</code> &#x2014;
- <span class="Nd">initialize the pmap subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_init</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_init"><code class="Fn" id="pmap_init">pmap_init</code></a>()
- function initializes the <a class="Xr">pmap(9)</a> sub-system. It is called
- during system initialization by
- <a class="permalink" href="#vm_mem_init"><code class="Fn" id="vm_mem_init">vm_mem_init</code></a>(),
- to initialize any structures that the <code class="Nm">pmap_init</code>
- system needs in order to map between physical and virtual memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 12, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_is_modified.9 4.html b/static/freebsd/man9/pmap_is_modified.9 4.html
deleted file mode 100644
index 66598ad0..00000000
--- a/static/freebsd/man9/pmap_is_modified.9 4.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_IS_MODIFIED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_IS_MODIFIED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_is_modified</code>,
- <code class="Nm">pmap_ts_modified</code> &#x2014; <span class="Nd">return
- information about physical pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pmap_is_modified</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pmap_ts_referenced</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_is_modified"><code class="Fn" id="pmap_is_modified">pmap_is_modified</code></a>()
- and
- <a class="permalink" href="#pmap_ts_referenced"><code class="Fn" id="pmap_ts_referenced">pmap_ts_referenced</code></a>()
- functions return information about physical pages.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_is_modified</code>() function returns
- the status of the &#x201C;page modified&#x201D; bit for the physical page
- <var class="Fa">m</var>.</p>
-<p class="Pp">The <code class="Fn">pmap_ts_referenced</code>() function returns
- a count of reference bits for a page <var class="Fa">m</var>, clearing those
- bits. It is not necessary for every reference bit to be cleared, but it is
- necessary that 0 only be returned when there are no remaining reference bits
- set on the page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>,
- <a class="Xr">pmap_clear_modify(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 17, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_is_prefaultable.9 4.html b/static/freebsd/man9/pmap_is_prefaultable.9 4.html
deleted file mode 100644
index 5ff4daae..00000000
--- a/static/freebsd/man9/pmap_is_prefaultable.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_IS_PREFAULTABLE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_IS_PREFAULTABLE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_is_prefaultable</code> &#x2014;
- <span class="Nd">determine if a page may be prefaulted</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pmap_is_prefaultable</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- va</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_is_prefaultable"><code class="Fn" id="pmap_is_prefaultable">pmap_is_prefaultable</code></a>()
- function provides a means of determining if the page residing at virtual
- address <var class="Fa">va</var> in the physical map
- <var class="Fa">pmap</var> may be pre-faulted into main memory.</p>
-<p class="Pp">This is a helper function which is called by
- <a class="Xr">vm_fault_prefault(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>,
- <a class="Xr">vm_fault_prefault(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_kextract.9 4.html b/static/freebsd/man9/pmap_kextract.9 4.html
deleted file mode 100644
index 7a829224..00000000
--- a/static/freebsd/man9/pmap_kextract.9 4.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_KEXTRACT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_KEXTRACT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_kextract</code>,
- <code class="Nm">vtophys</code> &#x2014; <span class="Nd">extract a physical
- address from the kernel page table</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_paddr_t</var>
- <br/>
- <code class="Fn">pmap_kextract</code>(<var class="Fa">vm_offset_t
- va</var>);</p>
-<p class="Pp"><var class="Ft">vm_paddr_t</var>
- <br/>
- <code class="Fn">vtophys</code>(<var class="Fa">vm_offset_t va</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_kextract"><code class="Fn" id="pmap_kextract">pmap_kextract</code></a>()
- function retrieves the underlying physical memory address corresponding to
- the given kernel virtual address <var class="Fa">va</var>. The caller is
- responsible for ensuring that <var class="Fa">va</var> belongs to a valid
- mapping in the kernel address space. The returned physical address is only
- meaningful as long as the mapping remains stable, so the caller must also
- have some knowledge or guarantee of the mapping's lifetime. For example, it
- is invalid to call <code class="Fn">pmap_kextract</code>() with the address
- of a malloc'd object while there is a possibility for that object to be
- freed concurrently.</p>
-<p class="Pp" id="pmap_kextract~2">Unlike <a class="Xr">pmap_extract(9)</a>,
- <a class="permalink" href="#pmap_kextract~2"><code class="Fn">pmap_kextract</code></a>()
- is safe to be called from any context; it has no internal locking or
- sleep.</p>
-<p class="Pp" id="vtophys"><a class="permalink" href="#vtophys"><code class="Fn">vtophys</code></a>()
- is an alias for <code class="Fn">pmap_kextract</code>() and behaves
- identically.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_kextract</code>() function returns the
- physical address of memory mapped at the kernel virtual address
- <var class="Fa">va</var>.</p>
-<p class="Pp"><code class="Fn">pmap_kextract</code>() generally does not fail.
- However, if supplied with an illegitimate value for
- <var class="Fa">va</var>, the function may return zero, an invalid non-zero
- value, or call <a class="Xr">panic(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_extract(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Mina
- Gali&#x0107;</span>
- &lt;<a class="Mt" href="mailto:FreeBSD@igalic.co">FreeBSD@igalic.co</a>&gt;,
- based on the <a class="Xr">pmap_extract(9)</a> page written by
- <span class="An">Bruce M Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 16, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_map.9 4.html b/static/freebsd/man9/pmap_map.9 4.html
deleted file mode 100644
index ea955ec5..00000000
--- a/static/freebsd/man9/pmap_map.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_MAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_MAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_map</code> &#x2014; <span class="Nd">map a
- physical memory range into kernel virtual address (KVA) space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_offset_t</var>
- <br/>
- <code class="Fn">pmap_map</code>(<var class="Fa">vm_offset_t *virt</var>,
- <var class="Fa">vm_paddr_t start</var>, <var class="Fa">vm_paddr_t
- end</var>, <var class="Fa">int prot</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_map"><code class="Fn" id="pmap_map">pmap_map</code></a>()
- function maps a range of physical addresses into kernel virtual address
- (KVA) space, from <var class="Fa">start</var> to <var class="Fa">end</var>,
- with protection bits <var class="Fa">prot</var>.</p>
-<p class="Pp">The value passed in <var class="Fa">*virt</var> is treated as a
- hint for the virtual address of the beginning of the mapping.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <var class="Fa">prot</var> argument is currently ignored by
- machine-dependent implementations.</p>
-<p class="Pp">Architectures which can support a direct mapped physical to
- virtual region can return the appropriate address within that region,
- leaving <var class="Fa">*virt</var> unchanged.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_map</code>() function returns the
- virtual address of the beginning of the mapping, if the mapping was
- successfully made; <var class="Fa">*virt</var> will also be updated with the
- first usable address after the mapped region.</p>
-<p class="Pp">If the function is unsuccessful, <code class="Dv">NULL</code> is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_mincore.9 4.html b/static/freebsd/man9/pmap_mincore.9 4.html
deleted file mode 100644
index 837ec067..00000000
--- a/static/freebsd/man9/pmap_mincore.9 4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_MINCORE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_MINCORE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_mincore</code> &#x2014;
- <span class="Nd">determine if a virtual address is resident in physical
- memory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pmap_mincore</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- addr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_mincore"><code class="Fn" id="pmap_mincore">pmap_mincore</code></a>()
- function determines if the page at the virtual address
- <var class="Fa">addr</var> in the physical map <var class="Fa">pmap</var> is
- resident in physical memory. It is the machine-dependent interface used by
- the <a class="Xr">mincore(2)</a> system call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the page is resident in physical memory, a mask of flags is
- returned, whose meaning is documented in <a class="Xr">mincore(2)</a>;
- otherwise, 0 is returned.</p>
-<p class="Pp">The <var class="Fa">pmap</var> must exist and
- <var class="Fa">addr</var> must be mapped into the
- <var class="Fa">pmap</var>. If any error occurs, the machine-dependent
- implementation should return 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mincore(2)</a>, <a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_object_init_pt.9 4.html b/static/freebsd/man9/pmap_object_init_pt.9 4.html
deleted file mode 100644
index 012081b1..00000000
--- a/static/freebsd/man9/pmap_object_init_pt.9 4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_OBJECT_INIT_PT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_OBJECT_INIT_PT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_object_init_pt</code> &#x2014;
- <span class="Nd">initialize page tables for a VM object</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_object_init_pt</code>(<var class="Fa">pmap_t pmap</var>,
- <var class="Fa">vm_offset_t addr</var>, <var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>,
- <var class="Fa">vm_size_t size</var>, <var class="Fa">int limit</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_object_init_pt"><code class="Fn" id="pmap_object_init_pt">pmap_object_init_pt</code></a>()
- function preloads the page table entries into the specified physical map
- <var class="Fa">pmap</var>, for the given <var class="Fa">object</var> at
- the virtual address <var class="Fa">addr</var>, for
- <var class="Fa">size</var> bytes, beginning at the page index
- <var class="Fa">pindex</var> within the object. The map bits
- <var class="Fa">limit</var> are heeded when creating the mapping.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function is not strictly required by an architecture's
- <a class="Xr">pmap(9)</a> implementation, but it does provide performance
- benefits if implemented.</p>
-<p class="Pp">It is intended to eliminate the blast of soft faults on process
- startup, and immediately following a call to <a class="Xr">mmap(2)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_page_exists_quick.9 4.html b/static/freebsd/man9/pmap_page_exists_quick.9 4.html
deleted file mode 100644
index 310bc4b8..00000000
--- a/static/freebsd/man9/pmap_page_exists_quick.9 4.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_PAGE_EXISTS_QUICK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_PAGE_EXISTS_QUICK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_page_exists_quick</code> &#x2014;
- <span class="Nd">determine if a page exists in a physical map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">pmap_page_exists_quick</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_page_exists_quick"><code class="Fn" id="pmap_page_exists_quick">pmap_page_exists_quick</code></a>()
- function is used to quickly determine if the page <var class="Fa">m</var>
- exists in the physical map <var class="Fa">pmap</var>. It is typically
- called from the VM paging code.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The PV count used above may be changed upwards or downwards in
- future; it is only necessary that <code class="Dv">true</code> be returned
- for a small subset of pmaps for proper page aging.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_page_exists_quick</code>() returns
- <code class="Dv">true</code> only if the PV entry for the physical map
- <var class="Fa">pmap</var> is one of the first 16 PVs linked from the page
- <var class="Fa">m</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_page_init.9 4.html b/static/freebsd/man9/pmap_page_init.9 4.html
deleted file mode 100644
index 8a3c7789..00000000
--- a/static/freebsd/man9/pmap_page_init.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_PAGE_INIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_PAGE_INIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_page_init</code> &#x2014;
- <span class="Nd">initialize machine-dependent fields of a VM page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_page_init</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_page_init"><code class="Fn" id="pmap_page_init">pmap_page_init</code></a>()
- function initializes the machine-dependent fields of a VM page structure.
- This procedure is normally used when adding new pages to the VM page queue
- management lists.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_pinit(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Hiten
- Pandya</span>
- &lt;<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 10, 2005</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_pinit.9 4.html b/static/freebsd/man9/pmap_pinit.9 4.html
deleted file mode 100644
index 174f0b8f..00000000
--- a/static/freebsd/man9/pmap_pinit.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_PINIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_PINIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_pinit</code>,
- <code class="Nm">pmap_pinit0</code> &#x2014; <span class="Nd">initialize
- pmap structures</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_pinit</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_pinit0</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pm</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_pinit"><code class="Fn" id="pmap_pinit">pmap_pinit</code></a>()
- function initializes the preallocated and zeroed structure
- <var class="Fa">pmap</var>, such as one in a <var class="Vt">vmspace</var>
- structure.</p>
-<p class="Pp" id="pmap_pinit0">The
- <a class="permalink" href="#pmap_pinit0"><code class="Fn">pmap_pinit0</code></a>()
- function initializes the physical map <var class="Fa">pm</var>, associated
- with process 0, the first process created in the system.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>,
- <a class="Xr">pmap_growkernel(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 12, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_protect.9 4.html b/static/freebsd/man9/pmap_protect.9 4.html
deleted file mode 100644
index 7aeee7d9..00000000
--- a/static/freebsd/man9/pmap_protect.9 4.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_PROTECT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_PROTECT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_protect</code> &#x2014; <span class="Nd">set
- physical page protection</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_protect</code>(<var class="Fa">pmap_t pmap</var>,
- <var class="Fa">vm_offset_t sva</var>, <var class="Fa">vm_offset_t
- eva</var>, <var class="Fa">vm_prot_t prot</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_protect"><code class="Fn" id="pmap_protect">pmap_protect</code></a>()
- function sets the physical page permissions to <var class="Fa">prot</var>
- for all physical pages in the physical map <var class="Fa">pmap</var> in the
- virtual address range between <var class="Fa">sva</var> and
- <var class="Fa">eva</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 18, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_qenter.9 4.html b/static/freebsd/man9/pmap_qenter.9 4.html
deleted file mode 100644
index d104731a..00000000
--- a/static/freebsd/man9/pmap_qenter.9 4.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_QENTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_QENTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_qenter</code>,
- <code class="Nm">pmap_qremove</code> &#x2014; <span class="Nd">manage
- temporary kernel space mappings</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_qenter</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t
- sva</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t *m</var>,
- <var class="Fa" style="white-space: nowrap;">int count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_qremove</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t
- sva</var>, <var class="Fa" style="white-space: nowrap;">int
- count</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_qenter"><code class="Fn" id="pmap_qenter">pmap_qenter</code></a>()
- function accepts a linear array of <var class="Fa">count</var> pointers to
- wired pages <var class="Fa">*m</var>, and enters each of these pages into
- the kernel virtual address (KVA) space, beginning at the address
- <var class="Fa">sva</var>. The pages are mapped non-executable, if possible.
- (For example, non-PAE i386 has no capability to map pages
- non-executable.)</p>
-<p class="Pp" id="pmap_qremove">The
- <a class="permalink" href="#pmap_qremove"><code class="Fn">pmap_qremove</code></a>()
- function tears out a mapping from the kernel virtual address space,
- beginning at <var class="Fa">sva</var> and for <var class="Fa">count</var>
- pages.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_qenter</code>() function is intended for
- temporary mappings that do not require page modification or reference
- counting. Old mappings are simply overwritten. The pages
- <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be
- wired into physical memory.</p>
-<p class="Pp">The corresponding <code class="Fn">pmap_qremove</code>() function
- is intended to remove such temporary mappings.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 15, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_quick_enter_page.9 4.html b/static/freebsd/man9/pmap_quick_enter_page.9 4.html
deleted file mode 100644
index 0f1b7876..00000000
--- a/static/freebsd/man9/pmap_quick_enter_page.9 4.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_QUICK_ENTER_PAGE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_QUICK_ENTER_PAGE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_quick_enter_page</code>,
- <code class="Nm">pmap_quick_remove_page</code> &#x2014;
- <span class="Nd">manage fast, single-page kernel address space
- mappings</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_offset_t</var>
- <br/>
- <code class="Fn">pmap_quick_enter_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_quick_remove_page</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t
- kva</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_quick_enter_page"><code class="Fn" id="pmap_quick_enter_page">pmap_quick_enter_page</code></a>()
- function accepts a single page <var class="Fa">m</var>, and enters this page
- into a preallocated address in kernel virtual address (KVA) space. This
- function is intended for temporary mappings that will only be used for a
- very short period, for example a copy operation on the page contents.</p>
-<p class="Pp" id="pmap_quick_remove_page">The
- <a class="permalink" href="#pmap_quick_remove_page"><code class="Fn">pmap_quick_remove_page</code></a>()
- function removes a mapping previously created by
- <code class="Fn">pmap_quick_enter_page</code>() at
- <var class="Fa">kva</var>, making the KVA frame used by
- <code class="Fn">pmap_quick_enter_page</code>() available for reuse.</p>
-<p class="Pp" id="pmap_quick_enter_page~2">On many architectures,
- <a class="permalink" href="#pmap_quick_enter_page~2"><code class="Fn">pmap_quick_enter_page</code></a>()
- uses a per-CPU pageframe. In those cases, it must disable preemption on the
- local CPU. The corresponding call to
- <code class="Fn">pmap_quick_remove_page</code>() then re-enables preemption.
- It is therefore not safe for machine-independent code to sleep or perform
- locking operations while holding these mappings. Current implementations
- only guarantee the availability of a single page for the calling thread, so
- calls to <code class="Fn">pmap_quick_enter_page</code>() must not be
- nested.</p>
-<p class="Pp" id="pmap_quick_enter_page~3"><a class="permalink" href="#pmap_quick_enter_page~3"><code class="Fn">pmap_quick_enter_page</code></a>()
- and <code class="Fn">pmap_quick_remove_page</code>() do not sleep, and
- <code class="Fn">pmap_quick_enter_page</code>() always returns a valid
- address. It is safe to use these functions under all types of locks except
- spin mutexes. It is also safe to use them in all thread contexts except
- primary interrupt context.</p>
-<p class="Pp" id="must">The page
- <a class="permalink" href="#must"><i class="Em">must</i></a> not be swapped
- or otherwise reused while the mapping is active. It must be either wired or
- held, or it must belong to an unmanaged region such as I/O device
- memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_quick_enter_page</code>() function
- returns the kernel virtual address that is mapped to the page
- <var class="Fa">m</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Jason A
- Harmening</span>
- &lt;<a class="Mt" href="mailto:jah@FreeBSD.org">jah@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 6, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_release.9 4.html b/static/freebsd/man9/pmap_release.9 4.html
deleted file mode 100644
index 7f4d72b3..00000000
--- a/static/freebsd/man9/pmap_release.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_RELEASE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_RELEASE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_release</code> &#x2014;
- <span class="Nd">release resources held by a physical map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_release</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_release"><code class="Fn" id="pmap_release">pmap_release</code></a>()
- function releases any resources held by the physical map
- <var class="Fa">pmap</var>. This function is called when a pmap initialized
- by the corresponding function,
- <a class="permalink" href="#pmap_pinit"><code class="Fn" id="pmap_pinit">pmap_pinit</code></a>()
- is being released.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function should only be called if <var class="Fa">pmap</var>
- no longer contains any valid mappings.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_pinit(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_remove.9 4.html b/static/freebsd/man9/pmap_remove.9 4.html
deleted file mode 100644
index be66a28e..00000000
--- a/static/freebsd/man9/pmap_remove.9 4.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_REMOVE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_REMOVE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_remove</code>,
- <code class="Nm">pmap_remove_all</code>,
- <code class="Nm">pmap_remove_pages</code> &#x2014; <span class="Nd">remove
- pages from a physical map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_remove</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- sva</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- eva</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_remove_all</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_remove_pages</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_remove"><code class="Fn" id="pmap_remove">pmap_remove</code></a>()
- function removes the range of addresses between <var class="Fa">sva</var>
- and <var class="Fa">eva</var> from the physical map
- <var class="Fa">pmap</var>. If <var class="Fa">eva</var> is less than
- <var class="Fa">sva</var>, then the result is undefined. It is assumed that
- both <var class="Fa">sva</var> and <var class="Fa">eva</var> are
- page-aligned addresses.</p>
-<p class="Pp" id="pmap_remove_all">The
- <a class="permalink" href="#pmap_remove_all"><code class="Fn">pmap_remove_all</code></a>()
- removes the physical page <var class="Fa">m</var> from all physical maps in
- which it resides, and reflects back the modify bits to the appropriate
- pager.</p>
-<p class="Pp" id="pmap_remove_pages">The
- <a class="permalink" href="#pmap_remove_pages"><code class="Fn">pmap_remove_pages</code></a>()
- function removes all user pages from the physical map
- <var class="Fa">pmap</var>. This function is called when a process exits to
- run down its address space more quickly than would be the case for calling
- <code class="Fn">pmap_remove</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><code class="Fn">pmap</code>(<var class="Fa">9</var>)</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_resident_count.9 4.html b/static/freebsd/man9/pmap_resident_count.9 4.html
deleted file mode 100644
index bab357ac..00000000
--- a/static/freebsd/man9/pmap_resident_count.9 4.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_RESIDENT_COUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_RESIDENT_COUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_resident_count</code>,
- <code class="Nm">pmap_wired_count</code> &#x2014; <span class="Nd">return
- page resident and wiring statistics</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">pmap_resident_count</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>);</p>
-<p class="Pp"><var class="Ft">long</var>
- <br/>
- <code class="Fn">pmap_wired_count</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_resident_count"><code class="Fn" id="pmap_resident_count">pmap_resident_count</code></a>()
- and
- <a class="permalink" href="#pmap_wired_count"><code class="Fn" id="pmap_wired_count">pmap_wired_count</code></a>()
- macros allow <code class="Nm">pmap</code> consumers to retrieve statistics
- from the <var class="Va">pm_stats</var> member of the machine-dependent
- structure <var class="Vt">struct pmap</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Both functions are defined as in-line macros. The members which
- they access have type <var class="Vt">long</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">pmap_resident_count</code>() returns the
- number of pages in the physical map <var class="Va">pmap</var> which are
- currently resident in main memory.</p>
-<p class="Pp">The <code class="Fn">pmap_wired_count</code>() returns the number
- of pages in the physical map <var class="Va">pmap</var> which are currently
- wired into in main memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_unwire.9 4.html b/static/freebsd/man9/pmap_unwire.9 4.html
deleted file mode 100644
index 30b1fa11..00000000
--- a/static/freebsd/man9/pmap_unwire.9 4.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_UNWIRE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_UNWIRE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_unwire</code> &#x2014;
- <span class="Nd">unwire a range of virtual pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_unwire</code>(<var class="Fa">pmap_t pmap</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The function
- <a class="permalink" href="#pmap_unwire"><code class="Fn" id="pmap_unwire">pmap_unwire</code></a>()
- removes the wired attribute from each of the virtual-to-physical page
- mappings within the virtual address range from <var class="Fa">start</var>
- to <var class="Fa">end</var> of the physical map <var class="Fa">pmap</var>.
- Every valid mapping within that range is required to have the wired
- attribute set. Invalid mappings are ignored, since they cannot have the
- wired attribute set.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">Only the function <a class="Xr">pmap_enter(9)</a> can be used to
- set the wired attribute of a virtual-to-physical page mapping.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_enter(9)</a>,
- <a class="Xr">pmap_wired_count(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alan L.
- Cox</span> &#x27E8;alc@rice.edu&#x27E9;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 17, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pmap_zero_page.9 4.html b/static/freebsd/man9/pmap_zero_page.9 4.html
deleted file mode 100644
index 139cc54e..00000000
--- a/static/freebsd/man9/pmap_zero_page.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PMAP_ZERO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PMAP_ZERO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pmap_zero_page</code>,
- <code class="Nm">pmap_zero_area</code> &#x2014; <span class="Nd">zero-fill a
- page using machine-dependent optimizations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_zero_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pmap_zero_page_area</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int off</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#pmap_zero_page"><code class="Fn" id="pmap_zero_page">pmap_zero_page</code></a>()
- function zero-fills an entire page using machine-dependent optimizations.
- The
- <a class="permalink" href="#pmap_zero_page_area"><code class="Fn" id="pmap_zero_page_area">pmap_zero_page_area</code></a>()
- function is used to zero-fill an area of a page. The range specified must
- not cross a page boundary; it must be contained entirely within a single
- page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function is required to be implemented for each architecture
- supported by <span class="Ux">FreeBSD</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bzero(3)</a>, <a class="Xr">pmap(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 30, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/printf.9 3.html b/static/freebsd/man9/printf.9 3.html
deleted file mode 100644
index 174c8ca8..00000000
--- a/static/freebsd/man9/printf.9 3.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PRINTF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PRINTF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">printf</code>, <code class="Nm">uprintf</code>,
- <code class="Nm">tprintf</code>, <code class="Nm">log</code> &#x2014;
- <span class="Nd">formatted output conversion</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">printf</code>(<var class="Fa" style="white-space: nowrap;">const
- char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">tprintf</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>,
- <var class="Fa" style="white-space: nowrap;">const char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uprintf</code>(<var class="Fa" style="white-space: nowrap;">const
- char *fmt</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vprintf</code>(<var class="Fa" style="white-space: nowrap;">const
- char *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list
- ap</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/syslog.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">log</code>(<var class="Fa" style="white-space: nowrap;">int
- pri</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vlog</code>(<var class="Fa" style="white-space: nowrap;">int
- pri</var>, <var class="Fa" style="white-space: nowrap;">const char
- *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list
- ap</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">printf</code> family of functions are similar
- to the <a class="Xr">printf(3)</a> family of functions. The different
- functions each use a different output stream. The
- <a class="permalink" href="#uprintf"><code class="Fn" id="uprintf">uprintf</code></a>()
- function outputs to the current process' controlling tty, while
- <a class="permalink" href="#printf"><code class="Fn" id="printf">printf</code></a>()
- writes to the console as well as to the logging facility. The
- <a class="permalink" href="#tprintf"><code class="Fn" id="tprintf">tprintf</code></a>()
- function outputs to the tty associated with the process
- <var class="Fa">p</var> and the logging facility if
- <var class="Fa">pri</var> is not -1. The <code class="Fn">log</code>()
- function sends the message to the kernel logging facility, using the log
- level as indicated by <var class="Fa">pri</var>, and to the console if no
- process is yet reading the log.</p>
-<p class="Pp">Each of these related functions use the <var class="Fa">fmt</var>
- parameter in the same manner as <a class="Xr">printf(3)</a>. However,
- <code class="Nm">printf</code> adds two other conversion specifiers and
- omits one.</p>
-<p class="Pp">The <code class="Cm">%b</code> identifier expects two arguments:
- an <var class="Vt">int</var> and a <var class="Vt">char *</var>. These are
- used as a register value and a print mask for decoding bitmasks. The print
- mask is made up of two parts: the base and the arguments. The base value is
- the output base (radix) expressed as an octal value; for example, \10 gives
- octal and \20 gives hexadecimal. The arguments are made up of a sequence of
- bit identifiers. Each bit identifier begins with a character specifying the
- number of the bit (starting from 1) this identifier describes. The
- characters from \01 to \40 can be used to specify bit numbers in the range
- from 1 to 32 and characters from \200 to \377 to specify bit numbers in the
- range from 1 to 128. The rest of the identifier is a string of characters
- containing the name of the bit. The identifier is terminated by either the
- bit number at the start of the next bit identifier or by
- <code class="Dv">NUL</code> for the last bit identifier.</p>
-<p class="Pp">The <code class="Cm">%D</code> identifier is meant to assist in
- hexdumps. It requires two arguments: a <var class="Vt">u_char *</var>
- pointer and a <var class="Vt">char *</var> string. The memory pointed to by
- the pointer is output in hexadecimal one byte at a time. The string is used
- as a delimiter between individual bytes. If present, a width directive will
- specify the number of bytes to display. By default, 16 bytes of data are
- output.</p>
-<p class="Pp">The <code class="Cm">%n</code> conversion specifier is not
- supported.</p>
-<p class="Pp" id="log">The
- <a class="permalink" href="#log"><code class="Fn">log</code></a>() function
- uses <a class="Xr">syslog(3)</a> level values
- <code class="Dv">LOG_DEBUG</code> through <code class="Dv">LOG_EMERG</code>
- for its <var class="Fa">pri</var> parameter (mistakenly called
- &#x2018;priority&#x2019; here). Alternatively, if a
- <var class="Fa">pri</var> of -1 is given, the message will be appended to
- the last log message started by a previous call to
- <code class="Fn">log</code>(). As these messages are generated by the kernel
- itself, the facility will always be <code class="Dv">LOG_KERN</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">printf</code>() and the
- <code class="Fn">uprintf</code>() functions return the number of characters
- displayed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">This example demonstrates the use of the
- <code class="Cm">%b</code> and <code class="Cm">%D</code> conversion
- specifiers. The function</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-printf_test(void)
-{
- printf(&quot;reg=%b\n&quot;, 3, &quot;\10\2BITTWO\1BITONE&quot;);
- printf(&quot;out: %4D\n&quot;, &quot;AAZZ&quot;, &quot;:&quot;);
-}</pre>
-</div>
-<p class="Pp">will produce the following output:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>reg=3&lt;BITTWO,BITONE&gt;
-out: 41:41:5a:5a</pre>
-</div>
-<p class="Pp">The same output will be generated by the following function:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-printf_test(void)
-{
- printf(&quot;reg=%b\n&quot;, 3, &quot;\10\201BITTWO\200BITONE&quot;);
- printf(&quot;out: %4D\n&quot;, &quot;AAZZ&quot;, &quot;:&quot;);
-}</pre>
-</div>
-<p class="Pp">The call</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>log(LOG_DEBUG, &quot;%s%d: been there.\n&quot;, sc-&gt;sc_name, sc-&gt;sc_unit);</pre>
-</div>
-<p class="Pp">will add the appropriate debug message at priority
- &#x201C;<code class="Li">kern.debug</code>&#x201D; to the system log.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">syslog(3)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 19, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/prison_check.9 4.html b/static/freebsd/man9/prison_check.9 4.html
deleted file mode 100644
index cefd7eac..00000000
--- a/static/freebsd/man9/prison_check.9 4.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PRISON_CHECK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PRISON_CHECK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">prison_check</code> &#x2014;
- <span class="Nd">determine if subjects may see entities according to jail
- restrictions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/jail.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">prison_check</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cred1</var>, <var class="Fa" style="white-space: nowrap;">struct
- ucred *cred2</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This function determines if a subject with credentials
- <var class="Fa">cred1</var> is denied access to subjects or objects with
- credentials <var class="Fa">cred2</var> according to the policy that a
- subject can see subjects or objects in its own jail or any sub-jail of
- it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">prison_check</code>() function returns
- <code class="Er">ESRCH</code> if <var class="Fa">cred2</var> is not in the
- same jail or a sub-jail of that of <var class="Fa">cred1</var>. In all other
- cases, <code class="Fn">prison_check</code>() returns zero.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">jail(2)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 18, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/priv.9 3.html b/static/freebsd/man9/priv.9 3.html
deleted file mode 100644
index 175e0eb9..00000000
--- a/static/freebsd/man9/priv.9 3.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PRIV(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PRIV(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">priv</code> &#x2014; <span class="Nd">kernel
- privilege checking API</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/priv.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">priv_check</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- priv</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">priv_check_cred</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cred</var>, <var class="Fa" style="white-space: nowrap;">int
- priv</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">priv</code> interfaces check to see if
- specific system privileges are granted to the passed thread,
- <var class="Fa">td</var>, or credential, <var class="Fa">cred</var>. This
- interface replaces the now removed <a class="Xr">suser(9)</a> privilege
- checking interface. Privileges typically represent rights in one of two
- categories: the right to manage a particular component of the system, or an
- exemption to a specific policy or access control list. The caller identifies
- the desired privilege via the <var class="Fa">priv</var> argument.</p>
-<section class="Ss">
-<h2 class="Ss" id="Privilege_Policies"><a class="permalink" href="#Privilege_Policies">Privilege
- Policies</a></h2>
-<p class="Pp">Privileges are typically granted based on one of two base system
- policies: the superuser policy, which grants privilege based on the
- effective (or sometimes real) UID having a value of 0, and the
- <a class="Xr">jail(2)</a> policy, which permits only certain privileges to
- be granted to processes in a jail. The set of available privileges may also
- be influenced by the TrustedBSD MAC Framework, described in
- <a class="Xr">mac(9)</a>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">When adding a new privilege check to a code path, first check the
- complete list of current privileges in <span class="Pa">sys/priv.h</span> to
- see if one already exists for the class of privilege required. Only if there
- is not an exact match should a new privilege be added to the privilege list.
- As privilege numbers becomes encoded in the kernel module ABI, privilege
- constants must not be changed as any kernel modules depending on privileges
- will then need to be recompiled. When adding a new privilege, be certain to
- also determine whether it should be listed in
- <code class="Fn">prison_priv_check</code>(), which includes a complete list
- of privileges granted to the root user in <a class="Xr">jail(2)</a>.</p>
-<p class="Pp">Certain catch-all privileges exist, such as
- <code class="Dv">PRIV_DRIVER</code>, intended to be used by device drivers,
- rather than adding a new driver-specific privilege.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Typically, 0 will be returned for success, and
- <code class="Er">EPERM</code> will be returned on failure. Most consumers of
- <code class="Nm">priv</code> will wish to directly return the error code
- from a failed privilege check to user space; a small number will wish to
- translate it to another error code appropriate to a specific context.</p>
-<p class="Pp">When designing new APIs, it is preferable to return explicit
- errors from a call if privilege is not granted rather than changing the
- semantics of the call but returning success. For example, the behavior
- exhibited by <a class="Xr">stat(2)</a>, in which the generation field is
- optionally zero'd out when there is insufficient privilege is highly
- undesirable, as it results in frequent privilege checks, and the caller is
- unable to tell if an access control failure occurred.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">dtrace_priv(4)</a>,
- <a class="Xr">mac(9)</a>, <a class="Xr">ucred(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">priv</code> API and implementation were
- created by <span class="An">Robert Watson</span> under contract to nCircle
- Network Security, Inc.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 12, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/prng.9 4.html b/static/freebsd/man9/prng.9 4.html
deleted file mode 100644
index 5665dccc..00000000
--- a/static/freebsd/man9/prng.9 4.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PRNG(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PRNG(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">prng</code> &#x2014; <span class="Nd">Kernel
- pseudo-random number generators</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/prng.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">prng32</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">prng32_bounded</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- bound</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">prng64</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">prng64_bounded</code>(<var class="Fa" style="white-space: nowrap;">uint64_t
- bound</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="GENERIC_PRNG_ROUTINES"><a class="permalink" href="#GENERIC_PRNG_ROUTINES">GENERIC
- PRNG ROUTINES</a></h2>
-<p class="Pp"><code class="Nm">prng</code> is a family of fast,
- <a class="permalink" href="#non-cryptographic"><i class="Em" id="non-cryptographic">non-cryptographic</i></a>
- pseudo-random number generators. Unlike <a class="Xr">random(9)</a>,
- <a class="permalink" href="#prng32"><code class="Fn" id="prng32">prng32</code></a>(),
- <a class="permalink" href="#prng32_bounded"><code class="Fn" id="prng32_bounded">prng32_bounded</code></a>(),
- <a class="permalink" href="#prng64"><code class="Fn" id="prng64">prng64</code></a>(),
- and
- <a class="permalink" href="#prng64_bounded"><code class="Fn" id="prng64_bounded">prng64_bounded</code></a>()
- avoid shared global state, removing unnecessary contention on SMP systems.
- The routines are not explicitly tied to any specific implementation, and may
- produce different specific sequences on different hosts, reboots, or
- versions of <span class="Ux">FreeBSD</span>. Different CPUs in SMP systems
- are guaranteed to produce different sequences of integers.</p>
-<p class="Pp" id="cryptographically">For
- <a class="permalink" href="#cryptographically"><i class="Em">cryptographically
- secure</i></a> random numbers generated by the <a class="Xr">random(4)</a>
- kernel cryptographically secure random number generator subsystem, see
- <a class="Xr">arc4random(9)</a>.</p>
-<dl class="Bl-tag">
- <dt id="prng32~2"><a class="permalink" href="#prng32~2"><code class="Fn">prng32</code></a>()</dt>
- <dd>Generate a 32-bit integer uniformly distributed in [0, 2^32-1].</dd>
- <dt id="prng32_bounded~2"><a class="permalink" href="#prng32_bounded~2"><code class="Fn">prng32_bounded</code></a>(<var class="Fa">bound</var>)</dt>
- <dd>Generate an integer uniformly in the range [0, bound-1].</dd>
- <dt id="prng64~2"><a class="permalink" href="#prng64~2"><code class="Fn">prng64</code></a>()</dt>
- <dd>Generate a 64-bit integer uniformly distributed in [0, 2^64-1].</dd>
- <dt id="prng64_bounded~2"><a class="permalink" href="#prng64_bounded~2"><code class="Fn">prng64_bounded</code></a>(<var class="Fa">bound</var>)</dt>
- <dd>Generate an integer uniformly in the range [0, bound-1].</dd>
-</dl>
-<p class="Pp">These routines are not reentrant; they are not safe to use in
- interrupt handlers (&quot;interrupt filters&quot; in
- <a class="Xr">bus_setup_intr(9)</a> terminology). They are safe to use in
- all other kernel contexts, including interrupt threads
- (&quot;ithreads&quot;).</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="REPRODUCIBLE_PRNG_APIS"><a class="permalink" href="#REPRODUCIBLE_PRNG_APIS">REPRODUCIBLE
- PRNG APIS</a></h2>
-<p class="Pp">In addition to these per-CPU helpers, the
- <code class="In">&lt;<a class="In">sys/prng.h</a>&gt;</code> header also
- exposes the entire API of the PCG family of PRNGs as inline functions. The
- PCG-C API is described in full at
- <a class="Lk" href="https://www.pcg-random.org/using-pcg-c.html">https://www.pcg-random.org/using-pcg-c.html</a>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">prng</code> was introduced in
- <span class="Ux">FreeBSD 13</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 5, 2020</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/proc_rwmem.9 4.html b/static/freebsd/man9/proc_rwmem.9 4.html
deleted file mode 100644
index 0d391845..00000000
--- a/static/freebsd/man9/proc_rwmem.9 4.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PROC_RWMEM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PROC_RWMEM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">proc_rwmem</code>,
- <code class="Nm">proc_readmem</code>, <code class="Nm">proc_writemem</code>
- &#x2014; <span class="Nd">read from or write to a process address
- space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ptrace.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">proc_rwmem</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">proc_readmem</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc
- *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t va</var>,
- <var class="Fa" style="white-space: nowrap;">void *buf</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">proc_writemem</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc
- *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t va</var>,
- <var class="Fa" style="white-space: nowrap;">void *buf</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions are used to read to or write from the address
- space of the process <var class="Fa">p</var>. The
- <a class="permalink" href="#proc_rwmem"><code class="Fn" id="proc_rwmem">proc_rwmem</code></a>()
- function requires the caller to specify the I/O parameters using a
- <var class="Vt">struct uio</var>, described in <a class="Xr">uio(9)</a>. The
- <a class="permalink" href="#proc_readmem"><code class="Fn" id="proc_readmem">proc_readmem</code></a>()
- and
- <a class="permalink" href="#proc_writemem"><code class="Fn" id="proc_writemem">proc_writemem</code></a>()
- functions provide a simpler, less general interface which allows the caller
- to read into or write the kernel buffer <var class="Fa">buf</var> of size
- <var class="Fa">len</var> from or to the memory at offset
- <var class="Fa">va</var> in the address space of <var class="Fa">p</var>.
- The operation is performed on behalf of thread <var class="Fa">td</var>,
- which will most often be the current thread.</p>
-<p class="Pp">These functions may sleep and thus may not be called with any
- non-sleepable locks held. The process <var class="Fa">p</var> must be held
- by the caller using <a class="Xr">PHOLD(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">proc_rwmem</code>() function returns
- <code class="Dv">0</code> on success. <code class="Dv">EFAULT</code> is
- returned if the specified user address is invalid, and
- <code class="Dv">ENOMEM</code> is returned if the target pages could not be
- faulted in due to a resource shortage.</p>
-<p class="Pp">The <code class="Fn">proc_readmem</code>() and
- <code class="Fn">proc_writemem</code>() functions return the number of bytes
- read or written, respectively. This may be smaller than the number of bytes
- requested, for example if the request spans multiple pages in the process
- address space and one of them after the first is not mapped. Otherwise, -1
- is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">copyin(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">PHOLD(9)</a>, <a class="Xr">uio(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Mark
- Johnston</span>
- &lt;<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 7, 2015</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pseudofs.9 4.html b/static/freebsd/man9/pseudofs.9 4.html
deleted file mode 100644
index 23c58be2..00000000
--- a/static/freebsd/man9/pseudofs.9 4.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PSEUDOFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PSEUDOFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pseudofs</code> &#x2014; <span class="Nd">pseudo
- file system construction kit</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">fs/pseudofs/pseudofs.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">pseudofs</code> module offers an abstract API
- for pseudo-file systems such as <a class="Xr">procfs(4)</a> and
- <a class="Xr">linprocfs(4)</a>. It takes care of all the hairy bits like
- interfacing with the VFS system, enforcing access control, keeping track of
- file numbers, and cloning files and directories that are process-specific.
- The consumer module, i.e., the module that implements the actual guts of the
- file system, needs only provide the directory structure (represented by a
- collection of structures declared and initialized by macros provided by
- <code class="Nm">pseudofs</code>) and callbacks that report file attributes
- or write the actual file contents into sbufs.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">linprocfs(4)</a>, <a class="Xr">linsysfs(4)</a>,
- <a class="Xr">procfs(4)</a>, <a class="Xr">sbuf(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">pseudofs</code> module appeared in
- <span class="Ux">FreeBSD 5.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">pseudofs</code> module and this manual page
- were written by <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 20, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/psignal.9 3.html b/static/freebsd/man9/psignal.9 3.html
deleted file mode 100644
index 7f9f81ab..00000000
--- a/static/freebsd/man9/psignal.9 3.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PSIGNAL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PSIGNAL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">psignal</code>,
- <code class="Nm">kern_psignal</code>, <code class="Nm">pgsignal</code>,
- <code class="Nm">tdsignal</code> &#x2014; <span class="Nd">post signal to a
- thread, process, or process group</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/signalvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">kern_psignal</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">int
- signum</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pgsignal</code>(<var class="Fa" style="white-space: nowrap;">struct
- pgrp *pgrp</var>, <var class="Fa" style="white-space: nowrap;">int
- signum</var>, <var class="Fa" style="white-space: nowrap;">int
- checkctty</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">tdsignal</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- signum</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions post a signal to a thread or one or more
- processes. The argument <var class="Fa">signum</var> common to all three
- functions should be in the range [1-<code class="Dv">NSIG</code>].</p>
-<p class="Pp" id="kern_psignal">The
- <a class="permalink" href="#kern_psignal"><code class="Fn">kern_psignal</code></a>()
- function posts signal number <var class="Fa">signum</var> to the process
- represented by the process structure <var class="Fa">p</var>. The
- <code class="Fn">kern_psignal</code>() function used to be called
- <a class="permalink" href="#psignal"><code class="Fn" id="psignal">psignal</code></a>()
- but was renamed in order to eliminate a name collision with the libc
- function of that name and facilitate code reuse. With a few exceptions noted
- below, the target process signal disposition is updated and is marked as
- runnable, so further handling of the signal is done in the context of the
- target process after a context switch. Note that
- <code class="Fn">kern_psignal</code>() does not by itself cause a context
- switch to happen.</p>
-<p class="Pp">The target process is not marked as runnable in the following
- cases:</p>
-<ul class="Bl-bullet Bd-indent">
- <li>The target process is sleeping uninterruptibly. The signal will be noticed
- when the process returns from the system call or trap.</li>
- <li>The target process is currently ignoring the signal.</li>
- <li>If a stop signal is sent to a sleeping process that takes the default
- action (see <a class="Xr">sigaction(2)</a>), the process is stopped
- without awakening it.</li>
- <li id="SIGCONT"><a class="permalink" href="#SIGCONT"><code class="Dv">SIGCONT</code></a>
- restarts a stopped process (or puts them back to sleep) regardless of the
- signal action (e.g., blocked or ignored).</li>
-</ul>
-<p class="Pp" id="kern_psignal~2">If the target process is being traced
- <a class="permalink" href="#kern_psignal~2"><code class="Fn">kern_psignal</code></a>()
- behaves as if the target process were taking the default action for
- <var class="Fa">signum</var>. This allows the tracing process to be notified
- of the signal.</p>
-<p class="Pp" id="pgsignal">The
- <a class="permalink" href="#pgsignal"><code class="Fn">pgsignal</code></a>()
- function posts signal number <var class="Fa">signum</var> to each member of
- the process group described by <var class="Fa">pgrp</var>. If
- <var class="Fa">checkctty</var> is non-zero, the signal will be posted only
- to processes that have a controlling terminal.
- <code class="Fn">pgsignal</code>() is implemented by walking along the
- process list headed by the field <code class="Li">pg_members</code> of the
- process group structure pointed at by <var class="Fa">pgrp</var> and calling
- <code class="Fn">kern_psignal</code>() as appropriate. If
- <var class="Fa">pgrp</var> is <code class="Dv">NULL</code> no action is
- taken.</p>
-<p class="Pp" id="tdsignal">The
- <a class="permalink" href="#tdsignal"><code class="Fn">tdsignal</code></a>()
- function posts signal number <var class="Fa">signum</var> to the thread
- represented by the thread structure <var class="Fa">td</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sigaction(2)</a>, <a class="Xr">signal(9)</a>,
- <a class="Xr">tsleep(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">psignal</code>() function was renamed to
- <code class="Fn">kern_psignal</code>() in <span class="Ux">FreeBSD
- 9.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 14, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/pwmbus.9 3.html b/static/freebsd/man9/pwmbus.9 3.html
deleted file mode 100644
index d9fcebd1..00000000
--- a/static/freebsd/man9/pwmbus.9 3.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">PWMBUS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">PWMBUS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">pwmbus</code>,
- <code class="Nm">PWMBUS_CHANNEL_CONFIG</code>,
- <code class="Nm">PWMBUS_CHANNEL_COUNT</code>,
- <code class="Nm">PWMBUS_CHANNEL_ENABLE</code>,
- <code class="Nm">PWMBUS_CHANNEL_GET_CONFIG</code>,
- <code class="Nm">PWMBUS_CHANNEL_GET_FLAGS</code>,
- <code class="Nm">PWMBUS_CHANNEL_IS_ENABLED</code>,
- <code class="Nm">PWMBUS_CHANNEL_SET_FLAGS</code>,
- <code class="Nm">PWMBUS_GET_BUS</code> &#x2014; <span class="Nd">PWMBUS
- methods</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">device pwm</code>
- <br/>
- <code class="In">#include &lt;<a class="In">pwmbus_if.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_CONFIG</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">u_int period</var>,
- <var class="Fa" style="white-space: nowrap;">u_int duty</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_COUNT</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int
- *nchannel</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_ENABLE</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">bool enable</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_GET_CONFIG</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">u_int *period</var>,
- <var class="Fa" style="white-space: nowrap;">u_int *duty</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_GET_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t *flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_IS_ENABLED</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">bool *enabled</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">PWMBUS_CHANNEL_SET_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">device_t
- bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>,
- <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The PWMBUS (Pulse-Width Modulation) interface allows a device
- driver to register to a global bus so other devices in the kernel can use
- them in a generic way.</p>
-<p class="Pp">For all <code class="Nm">pwmbus</code> methods, the
- <var class="Va">period</var> argument is the duration in nanoseconds of one
- complete on-off cycle, and the <var class="Va">duty</var> argument is the
- duration in nanoseconds of the on portion of that cycle.</p>
-<p class="Pp">Some PWM hardware is organized as a single controller with
- multiple channels. Channel numbers count up from zero. When multiple
- channels are present, they sometimes share a common clock or other
- resources. In such cases, changing the period or duty cycle of any one
- channel may affect other channels within the hardware which share the same
- resources. Consult the documentation for the underlying PWM hardware device
- driver for details on channels that share resources.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1>
-<dl class="Bl-tag">
- <dt id="PWMBUS_CHANNEL_CONFIG"><a class="permalink" href="#PWMBUS_CHANNEL_CONFIG"><code class="Fn">PWMBUS_CHANNEL_CONFIG</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">u_int
- period</var>, <var class="Fa">u_int duty</var>)</dt>
- <dd>Configure the period and duty (in nanoseconds) in the PWM controller on
- the bus for the specified channel. Returns 0 on success or
- <code class="Er">EINVAL</code> if the values are not supported by the
- controller or <code class="Er">EBUSY</code> if the PWMBUS controller is in
- use and does not support changing the value on the fly.</dd>
- <dt id="PWMBUS_CHANNEL_COUNT"><a class="permalink" href="#PWMBUS_CHANNEL_COUNT"><code class="Fn">PWMBUS_CHANNEL_COUNT</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int *nchannel</var>)</dt>
- <dd>Get the number of channels supported by the controller.</dd>
- <dt id="PWMBUS_CHANNEL_ENABLE"><a class="permalink" href="#PWMBUS_CHANNEL_ENABLE"><code class="Fn">PWMBUS_CHANNEL_ENABLE</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">bool
- enable</var>)</dt>
- <dd>Enable the PWM channel.</dd>
- <dt id="PWMBUS_CHANNEL_GET_CONFIG"><a class="permalink" href="#PWMBUS_CHANNEL_GET_CONFIG"><code class="Fn">PWMBUS_CHANNEL_GET_CONFIG</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">u_int
- *period</var>, <var class="Fa">u_int *duty</var>)</dt>
- <dd>Get the current configuration of the period and duty for the specified
- channel.</dd>
- <dt id="PWMBUS_CHANNEL_GET_FLAGS"><a class="permalink" href="#PWMBUS_CHANNEL_GET_FLAGS"><code class="Fn">PWMBUS_CHANNEL_GET_FLAGS</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">uint32_t
- *flags</var>)</dt>
- <dd>Get the current flags for the channel. If the driver or controller does
- not support this, a default method returns a flags value of zero.</dd>
- <dt id="PWMBUS_CHANNEL_IS_ENABLED"><a class="permalink" href="#PWMBUS_CHANNEL_IS_ENABLED"><code class="Fn">PWMBUS_CHANNEL_IS_ENABLED</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">bool
- *enable</var>)</dt>
- <dd>Test whether the PWM channel is enabled.</dd>
- <dt id="PWMBUS_CHANNEL_SET_FLAGS"><a class="permalink" href="#PWMBUS_CHANNEL_SET_FLAGS"><code class="Fn">PWMBUS_CHANNEL_SET_FLAGS</code></a>(<var class="Fa">device_t
- bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">uint32_t
- flags</var>)</dt>
- <dd>Set the flags of the channel (such as inverted polarity). If the driver or
- controller does not support this a do-nothing default method is used.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">pwmbus</code> interface first appear in
- <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">pwmbus</code>
- interface and manual page was written by <span class="An">Emmanuel
- Vadot</span>
- &lt;<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 9, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/random.9 4.html b/static/freebsd/man9/random.9 4.html
deleted file mode 100644
index dea2d113..00000000
--- a/static/freebsd/man9/random.9 4.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RANDOM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RANDOM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">arc4rand</code>,
- <code class="Nm">arc4random</code>, <code class="Nm">arc4random_buf</code>,
- <code class="Nm">is_random_seeded</code>, <code class="Nm">random</code>,
- <code class="Nm">read_random</code>, <code class="Nm">read_random_uio</code>
- &#x2014; <span class="Nd">supply pseudo-random numbers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/libkern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">arc4random</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">arc4random_buf</code>(<var class="Fa" style="white-space: nowrap;">void
- *ptr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">arc4rand</code>(<var class="Fa" style="white-space: nowrap;">void
- *ptr</var>, <var class="Fa" style="white-space: nowrap;">u_int length</var>,
- <var class="Fa" style="white-space: nowrap;">int reseed</var>);</p>
-<p class="Pp">
- <br/>
- <code class="In">#include &lt;<a class="In">sys/random.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">is_random_seeded</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">read_random</code>(<var class="Fa" style="white-space: nowrap;">void
- *buffer</var>, <var class="Fa" style="white-space: nowrap;">int
- count</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">read_random_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- uio *uio</var>, <var class="Fa" style="white-space: nowrap;">bool
- nonblock</var>);</p>
-<section class="Ss">
-<h2 class="Ss" id="LEGACY_ROUTINES"><a class="permalink" href="#LEGACY_ROUTINES">LEGACY
- ROUTINES</a></h2>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/libkern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">u_long</var>
- <br/>
- <code class="Fn">random</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#arc4random"><code class="Fn" id="arc4random">arc4random</code></a>()
- and
- <a class="permalink" href="#arc4random_buf"><code class="Fn" id="arc4random_buf">arc4random_buf</code></a>()
- functions will return very good quality random numbers, suited for
- security-related purposes. Both are wrappers around the underlying
- <code class="Fn">arc4rand</code>() interface.
- <code class="Fn">arc4random</code>() returns a 32-bit random value, while
- <code class="Fn">arc4random_buf</code>() fills <var class="Fa">ptr</var>
- with <var class="Fa">len</var> bytes of random data.</p>
-<p class="Pp" id="arc4rand">The
- <a class="permalink" href="#arc4rand"><code class="Fn">arc4rand</code></a>()
- CSPRNG is seeded from the <a class="Xr">random(4)</a> kernel abstract
- entropy device. Automatic reseeding happens at unspecified time and bytes
- (of output) intervals. A reseed can be forced by passing a non-zero
- <var class="Fa">reseed</var> value.</p>
-<p class="Pp" id="read_random">The
- <a class="permalink" href="#read_random"><code class="Fn">read_random</code></a>()
- function is used to read entropy directly from the kernel abstract entropy
- device. <code class="Fn">read_random</code>() blocks if and until the
- entropy device is seeded. The provided <var class="Fa">buffer</var> is
- filled with no more than <var class="Fa">count</var> bytes. It is strongly
- advised that <code class="Fn">read_random</code>() is not used directly;
- instead, use the <code class="Fn">arc4rand</code>() family of functions.</p>
-<p class="Pp" id="is_random_seeded">The
- <a class="permalink" href="#is_random_seeded"><code class="Fn">is_random_seeded</code></a>()
- function can be used to check in advance if
- <code class="Fn">read_random</code>() will block. (If random is seeded, it
- will not block.)</p>
-<p class="Pp" id="read_random_uio">The
- <a class="permalink" href="#read_random_uio"><code class="Fn">read_random_uio</code></a>()
- function behaves identically to <a class="Xr">read(2)</a> on
- <span class="Pa">/dev/random</span>. The <var class="Fa">uio</var> argument
- points to a buffer where random data should be stored. If
- <var class="Fa">nonblock</var> is true and the random device is not seeded,
- this function does not return any data. Otherwise, this function may block
- interruptibly until the random device is seeded. If the function is
- interrupted before the random device is seeded, no data is returned.</p>
-<p class="Pp" id="random">The deprecated
- <a class="permalink" href="#random"><code class="Fn">random</code></a>()
- function will return a 31-bit value. It is obsolete and scheduled to be
- removed in <span class="Ux">FreeBSD 16.0</span>. Consider
- <a class="Xr">prng(9)</a> instead and see
- <a class="Sx" href="#SECURITY_CONSIDERATIONS">SECURITY
- CONSIDERATIONS</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">arc4rand</code>() function uses the Chacha20
- algorithm to generate a pseudo-random sequence of bytes. The
- <code class="Fn">arc4random</code>() function uses
- <code class="Fn">arc4rand</code>() to generate pseudo-random numbers in the
- range from 0 to (2**32)&#x2212;1.</p>
-<p class="Pp">The <code class="Fn">read_random</code>() function returns the
- number of bytes placed in <var class="Fa">buffer</var>.</p>
-<p class="Pp"><code class="Fn">read_random_uio</code>() returns zero when
- successful, otherwise an error code is returned.</p>
-<p class="Pp"><code class="Fn">random</code>() returns numbers in the range from
- 0 to (2**31)&#x2212;1.</p>
-<p class="Pp"></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">read_random_uio</code>() may fail if:</p>
-<dl class="Bl-tag">
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd><var class="Fa">uio</var> points to an invalid memory region.</dd>
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>The random device is unseeded and <var class="Fa">nonblock</var> is
- true.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Dan Moschuk</span> wrote
- <code class="Fn">arc4random</code>().
- <br/>
- <span class="An">Mark R V Murray</span> wrote
- <code class="Fn">read_random</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SECURITY_CONSIDERATIONS"><a class="permalink" href="#SECURITY_CONSIDERATIONS">SECURITY
- CONSIDERATIONS</a></h1>
-<p class="Pp">Do not use <code class="Fn">random</code>() in new code.</p>
-<p class="Pp">It is important to remember that the
- <code class="Fn">random</code>() function is entirely predictable. It is
- easy for attackers to predict future output of
- <code class="Fn">random</code>() by recording some generated values. We
- cannot emphasize strongly enough that <code class="Fn">random</code>() must
- not be used to generate values that are intended to be unpredictable.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 11, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/random_harvest.9 4.html b/static/freebsd/man9/random_harvest.9 4.html
deleted file mode 100644
index 973e5ff1..00000000
--- a/static/freebsd/man9/random_harvest.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RANDOM_HARVEST(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RANDOM_HARVEST(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">random_harvest</code> &#x2014;
- <span class="Nd">gather entropy from the kernel for the entropy
- device</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/random.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">random_harvest_direct</code>(<var class="Fa">void
- *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum
- esource source</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">random_harvest_fast</code>(<var class="Fa">void
- *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum
- esource source</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">random_harvest_queue</code>(<var class="Fa">void
- *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum
- esource source</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#random_harvest_*"><code class="Fn" id="random_harvest_*">random_harvest_*</code></a>()
- functions are used by device drivers and other kernel processes to pass data
- that is considered (at least partially) stochastic to the entropy
- device.</p>
-<p class="Pp">The caller should pass a pointer pointing to the
- &#x201C;random&#x201D; data in <var class="Fa">entropy</var>. The argument
- <var class="Fa">size</var> contains the number of bytes pointed to. The
- <var class="Fa">source</var> is chosen from one of the values enumerated in
- <span class="Pa">sys/dev/random.h</span>. and is used to indicate the source
- of the entropy.</p>
-<p class="Pp" id="random_harvest_direct">The
- <a class="permalink" href="#random_harvest_direct"><code class="Fn">random_harvest_direct</code></a>();
- variant is used for early harvesting before any multitasking is enabled.</p>
-<p class="Pp" id="random_harvest_fast">The
- <a class="permalink" href="#random_harvest_fast"><code class="Fn">random_harvest_fast</code></a>()
- variant is used by sources that should not take a performance hit from
- harvesting, as they are high-rate sources. Some entropy is sacrificed, but
- the high rate of supply will compensate for this.</p>
-<p class="Pp" id="random_harvest_queue">The
- <a class="permalink" href="#random_harvest_queue"><code class="Fn">random_harvest_queue</code></a>()
- variant is used for general harvesting and is the default choice for most
- entropy sources such as interrupts or console events.</p>
-<p class="Pp">Interrupt harvesting has been in part simplified for the kernel
- programmer. If a device driver registers an interrupt handler with
- <a class="Xr">BUS_SETUP_INTR(9)</a> or <a class="Xr">bus_setup_intr(9)</a>,
- then it is only necessary to include the
- <code class="Dv">INTR_ENTROPY</code> bit in the <var class="Fa">flags</var>
- argument to have that interrupt source be used for entropy harvesting. This
- should be done wherever practicable.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">random(4)</a>,
- <a class="Xr">BUS_SETUP_INTR(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <span class="Ux">FreeBSD</span> <a class="Xr">random(4)</a>
- entropy device and supporting documentation was written by
- <span class="An">Mark R V Murray</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 26, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ratecheck.9 4.html b/static/freebsd/man9/ratecheck.9 4.html
deleted file mode 100644
index 49d3b4e9..00000000
--- a/static/freebsd/man9/ratecheck.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RATECHECK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RATECHECK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ratecheck</code>,
- <code class="Nm">ppsratecheck</code> &#x2014; <span class="Nd">event rate
- limiting</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/time.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *lasttime</var>, <var class="Fa" style="white-space: nowrap;">const
- struct timeval *mininterval</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">ppsratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *lasttime</var>, <var class="Fa" style="white-space: nowrap;">int
- *curpps</var>, <var class="Fa" style="white-space: nowrap;">int
- maxpps</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">ratecheck</code> and
- <code class="Nm">ppsratecheck</code> functions facilitate rate-limiting of
- arbitrary events. The former enforces a minimum interval between events
- while the latter enforces a maximum number of events per second.</p>
-<p class="Pp">The <code class="Nm">ratecheck</code> function compares the
- current time to the value pointed to by <var class="Fa">lasttime</var>. If
- the difference is equal to or greater than
- <var class="Fa">mininterval</var>, it returns a non-zero value and updates
- <var class="Fa">lasttime</var> to the current time. Otherwise, it returns
- zero.</p>
-<p class="Pp">The <code class="Nm">ppsratecheck</code> function first compares
- the current time to <var class="Fa">lasttime</var>. If at least a full
- second has passed, the value pointed to by the <var class="Fa">curpps</var>
- argument is reset to 1 and <var class="Fa">lasttime</var> is updated to the
- current time. Otherwise, <var class="Fa">curpps</var> is incremented and
- <var class="Fa">lasttime</var> is left untouched. In either case,
- <code class="Nm">ppsratecheck</code> returns a non-zero value if and only if
- the updated <var class="Fa">curpps</var> is less than or equal to
- <var class="Fa">maxpps</var> or <var class="Fa">maxpps</var> is
- negative.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">counter(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">ratecheck</code> and
- <code class="Nm">ppsratecheck</code> functions first appeared in
- <span class="Ux">FreeBSD 5.1</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 11, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/redzone.9 4.html b/static/freebsd/man9/redzone.9 4.html
deleted file mode 100644
index d44b494c..00000000
--- a/static/freebsd/man9/redzone.9 4.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">REDZONE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">REDZONE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">RedZone</code> &#x2014; <span class="Nd">buffer
- corruptions detector</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">options KDB</code>
- <br/>
- <code class="Cd">options DDB</code>
- <br/>
- <code class="Cd">options DEBUG_REDZONE</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">RedZone</code> detects buffer underflow and
- buffer overflow bugs at runtime. Currently <code class="Nm">RedZone</code>
- only detects buffer corruptions for memory allocated with
- <a class="Xr">malloc(9)</a>. When such corruption is detected two backtraces
- are printed on the console. The first one shows from where memory was
- allocated, the second one shows from where memory was freed. By default the
- system will not panic when buffer corruption is detected. This can be
- changed by setting the <var class="Va">vm.redzone.panic</var>
- <a class="Xr">sysctl(8)</a> variable to 1. The amount of extra memory
- allocated for <code class="Nm">RedZone</code>'s needs is stored in the
- <var class="Va">vm.redzone.extra_mem</var> <a class="Xr">sysctl(8)</a>
- variable.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLE"><a class="permalink" href="#EXAMPLE">EXAMPLE</a></h1>
-<p class="Pp">The example below shows the logs from the detection of a buffer
- underflow and a buffer overflow.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>REDZONE: Buffer underflow detected. 2 bytes corrupted before 0xc8688580 (16 bytes allocated).
-Allocation backtrace:
-#0 0xc0583e4e at redzone_setup+0x3c
-#1 0xc04a23fa at malloc+0x19e
-#2 0xcdeb69ca at redzone_modevent+0x60
-#3 0xc04a3f3c at module_register_init+0x82
-#4 0xc049d96a at linker_file_sysinit+0x8e
-#5 0xc049dc7c at linker_load_file+0xed
-#6 0xc04a041f at linker_load_module+0xc4
-#7 0xc049e883 at kldload+0x116
-#8 0xc05d9b3d at syscall+0x325
-#9 0xc05c944f at Xint0x80_syscall+0x1f
-Free backtrace:
-#0 0xc0583f92 at redzone_check+0xd4
-#1 0xc04a2422 at free+0x1c
-#2 0xcdeb69a6 at redzone_modevent+0x3c
-#3 0xc04a438d at module_unload+0x61
-#4 0xc049e0b3 at linker_file_unload+0x89
-#5 0xc049e979 at kern_kldunload+0x96
-#6 0xc049ea00 at kldunloadf+0x2c
-#7 0xc05d9b3d at syscall+0x325
-#8 0xc05c944f at Xint0x80_syscall+0x1f
-
-REDZONE: Buffer overflow detected. 4 bytes corrupted after 0xc8688590 (16 bytes allocated).
-Allocation backtrace:
-#0 0xc0583e4e at redzone_setup+0x3c
-#1 0xc04a23fa at malloc+0x19e
-#2 0xcdeb69ca at redzone_modevent+0x60
-#3 0xc04a3f3c at module_register_init+0x82
-#4 0xc049d96a at linker_file_sysinit+0x8e
-#5 0xc049dc7c at linker_load_file+0xed
-#6 0xc04a041f at linker_load_module+0xc4
-#7 0xc049e883 at kldload+0x116
-#8 0xc05d9b3d at syscall+0x325
-#9 0xc05c944f at Xint0x80_syscall+0x1f
-Free backtrace:
-#0 0xc0584020 at redzone_check+0x162
-#1 0xc04a2422 at free+0x1c
-#2 0xcdeb69a6 at redzone_modevent+0x3c
-#3 0xc04a438d at module_unload+0x61
-#4 0xc049e0b3 at linker_file_unload+0x89
-#5 0xc049e979 at kern_kldunload+0x96
-#6 0xc049ea00 at kldunloadf+0x2c
-#7 0xc05d9b3d at syscall+0x325
-#8 0xc05c944f at Xint0x80_syscall+0x1f</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">memguard(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp"><code class="Nm">RedZone</code> first appeared in
- <span class="Ux">FreeBSD 7.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Pawel Jakub Dawidek</span>
- &lt;<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>&gt;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Currently, <code class="Nm">RedZone</code> does not cooperate with
- <a class="Xr">memguard(9)</a>. Allocations from a memory type controlled by
- <a class="Xr">memguard(9)</a> are simply skipped, so buffer corruptions will
- not be detected there.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 9, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/refcount.9 3.html b/static/freebsd/man9/refcount.9 3.html
deleted file mode 100644
index b0622f5f..00000000
--- a/static/freebsd/man9/refcount.9 3.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">REFCOUNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">REFCOUNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">refcount</code>,
- <code class="Nm">refcount_init</code>,
- <code class="Nm">refcount_acquire</code>,
- <code class="Nm">refcount_release</code> &#x2014; <span class="Nd">manage a
- simple reference counter</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/refcount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">refcount_init</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>, <var class="Fa" style="white-space: nowrap;">u_int
- value</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">refcount_load</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">refcount_acquire</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">refcount_acquire_checked</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">refcount_acquire_if_not_zero</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">refcount_release</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">refcount_release_if_last</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">refcount_release_if_not_last</code>(<var class="Fa" style="white-space: nowrap;">volatile
- u_int *count</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">refcount</code> functions provide an API to
- manage a simple reference counter. The caller provides the storage for the
- counter in an unsigned integer. A pointer to this integer is passed via
- <var class="Fa">count</var>. Usually the counter is used to manage the
- lifetime of an object and is stored as a member of the object.</p>
-<p class="Pp">Currently all functions are implemented as static inline.</p>
-<p class="Pp" id="refcount_init">The
- <a class="permalink" href="#refcount_init"><code class="Fn">refcount_init</code></a>()
- function is used to set the initial value of the counter to
- <var class="Fa">value</var>. It is normally used when creating a
- reference-counted object.</p>
-<p class="Pp" id="refcount_load">The
- <a class="permalink" href="#refcount_load"><code class="Fn">refcount_load</code></a>()
- function returns a snapshot of the counter value. This value may immediately
- become out-of-date in the absence of external synchronization.
- <code class="Fn">refcount_load</code>() should be used instead of relying on
- the properties of the <var class="Vt">volatile</var> qualifier.</p>
-<p class="Pp" id="refcount_acquire">The
- <a class="permalink" href="#refcount_acquire"><code class="Fn">refcount_acquire</code></a>()
- function is used to acquire a new reference. It returns the counter value
- before the new reference was acquired. The caller is responsible for
- ensuring that it holds a valid reference while obtaining a new reference.
- For example, if an object is stored on a list and the list holds a reference
- on the object, then holding a lock that protects the list provides
- sufficient protection for acquiring a new reference.</p>
-<p class="Pp" id="refcount_acquire_checked">The
- <a class="permalink" href="#refcount_acquire_checked"><code class="Fn">refcount_acquire_checked</code></a>()
- variant performs the same operation as
- <code class="Fn">refcount_acquire</code>(), but additionally checks that the
- <var class="Fa">count</var> value does not overflow as result of the
- operation. It returns <code class="Dv">true</code> if the reference was
- successfully obtained, and <code class="Dv">false</code> if it was not, due
- to the overflow.</p>
-<p class="Pp" id="refcount_acquire_if_not_zero">The
- <a class="permalink" href="#refcount_acquire_if_not_zero"><code class="Fn">refcount_acquire_if_not_zero</code></a>()
- function is yet another variant of
- <code class="Fn">refcount_acquire</code>(), which only obtains the reference
- when some reference already exists. In other words,
- <var class="Fa">*count</var> must be already greater than zero for the
- function to succeed, in which case the return value is
- <code class="Dv">true</code>, otherwise <code class="Dv">false</code> is
- returned.</p>
-<p class="Pp" id="refcount_release">The
- <a class="permalink" href="#refcount_release"><code class="Fn">refcount_release</code></a>()
- function is used to release an existing reference. The function returns true
- if the reference being released was the last reference; otherwise, it
- returns false.</p>
-<p class="Pp" id="refcount_release_if_last">The
- <a class="permalink" href="#refcount_release_if_last"><code class="Fn">refcount_release_if_last</code></a>()
- and
- <a class="permalink" href="#refcount_release_if_not_last"><code class="Fn" id="refcount_release_if_not_last">refcount_release_if_not_last</code></a>()
- functions are variants of <code class="Fn">refcount_release</code>() which
- only drop the reference when it is or is not the last reference,
- respectively. In other words,
- <code class="Fn">refcount_release_if_last</code>() returns
- <code class="Dv">true</code> when <var class="Fa">*count</var> is equal to
- one, in which case it is decremented to zero. Otherwise,
- <var class="Fa">*count</var> is not modified and the function returns
- <code class="Dv">false</code>. Similarly,
- <code class="Fn">refcount_release_if_not_last</code>() returns
- <code class="Dv">true</code> when <var class="Fa">*count</var> is greater
- than one, in which case <var class="Fa">*count</var> is decremented.
- Otherwise, if <var class="Fa">*count</var> is equal to one, the reference is
- not released and the function returns <code class="Dv">false</code>.</p>
-<p class="Pp">Note that these routines do not provide any inter-CPU
- synchronization or data protection for managing the counter. The caller is
- responsible for any additional synchronization needed by consumers of any
- containing objects. In addition, the caller is also responsible for managing
- the life cycle of any containing objects including explicitly releasing any
- resources when the last reference is released.</p>
-<p class="Pp" id="refcount_release~2">The
- <a class="permalink" href="#refcount_release~2"><code class="Fn">refcount_release</code></a>()
- unconditionally executes a release fence (see <a class="Xr">atomic(9)</a>)
- before releasing the reference, which synchronizes with an acquire fence
- executed right before returning the <code class="Dv">true</code> value. This
- ensures that the destructor, supposedly executed by the caller after the
- last reference was dropped, sees all updates done during the lifetime of the
- object.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Nm">refcount_release</code> function returns true
- when releasing the last reference and false when releasing any other
- reference.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD
- 6.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 12, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/regulator.9 4.html b/static/freebsd/man9/regulator.9 4.html
deleted file mode 100644
index 7c9a410b..00000000
--- a/static/freebsd/man9/regulator.9 4.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">REGULATOR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">REGULATOR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">regulator</code>,
- <code class="Nm">regulator_get_by_name</code>,
- <code class="Nm">regulator_get_by_id</code>,
- <code class="Nm">regulator_release</code>,
- <code class="Nm">regulator_get_name</code>,
- <code class="Nm">regulator_enable</code>,
- <code class="Nm">regulator_disable</code>,
- <code class="Nm">regulator_stop</code>,
- <code class="Nm">regulator_status</code>,
- <code class="Nm">regulator_get_voltage</code>,
- <code class="Nm">regulator_set_voltage</code>,
- <code class="Nm">regulator_check_voltage</code>,
- <code class="Nm">regulator_get_by_ofw_property</code> &#x2014;
- <span class="Nd">regulator methods</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">device regulator</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/extres/regulator/regulator.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_get_by_name</code>(<var class="Fa" style="white-space: nowrap;">device_t
- cdev</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">regulator_t
- *regulator</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_get_by_id</code>(<var class="Fa" style="white-space: nowrap;">device_t
- cdev</var>, <var class="Fa" style="white-space: nowrap;">device_t
- pdev</var>, <var class="Fa" style="white-space: nowrap;">intptr_t id</var>,
- <var class="Fa" style="white-space: nowrap;">regulator_t
- *regulator</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_release</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- regulator</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_get_name</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- regulator</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_enable</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_disable</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_stop</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_status</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>, <var class="Fa" style="white-space: nowrap;">int
- *status</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_get_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>, <var class="Fa" style="white-space: nowrap;">int
- *uvolt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_set_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>, <var class="Fa" style="white-space: nowrap;">int min_uvolt</var>,
- <var class="Fa" style="white-space: nowrap;">int max_uvolt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_check_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t
- reg</var>, <var class="Fa" style="white-space: nowrap;">int
- uvolt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">regulator_get_by_ofw_property</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">phandle_t
- node</var>, <var class="Fa" style="white-space: nowrap;">char *name</var>,
- <var class="Fa" style="white-space: nowrap;">regulator_t *reg</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The regulator framework allow drivers to enable, disable and
- change regulator voltage.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">All functions returns 0 on success or
- <code class="Er">ENODEV</code> if the regulator or one of its parent was not
- found.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1>
-<dl class="Bl-tag">
- <dt id="regulator_get_by_name"><a class="permalink" href="#regulator_get_by_name"><code class="Fn">regulator_get_by_name</code></a>(<var class="Fa">device_t
- cdev</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">regulator_t *regulator</var>)</dt>
- <dd>Resolve a regulator based on its name. All regulators names are unique.
- This will also increment the refcount on the regulator.</dd>
- <dt id="regulator_get_by_id"><a class="permalink" href="#regulator_get_by_id"><code class="Fn">regulator_get_by_id</code></a>(<var class="Fa">device_t
- cdev</var>, <var class="Fa">device_t pdev</var>, <var class="Fa">intptr_t
- id</var>, <var class="Fa">regulator_t *regulator</var>)</dt>
- <dd>Resolve a regulator based on its id. All regulators ids are unique. This
- will also increment the refcount on the regulator.</dd>
- <dt id="regulator_get_by_ofw_property"><a class="permalink" href="#regulator_get_by_ofw_property"><code class="Fn">regulator_get_by_ofw_property</code></a>(<var class="Fa">device_t
- dev</var>, <var class="Fa">phandle_t node</var>, <var class="Fa">char
- *name</var>, <var class="Fa">regulator_t *reg</var>)</dt>
- <dd>Resolve a regulator based on the fdt property named name. If node is 0
- then the function will get the ofw node itself. This will also increment
- the refcount on the regulator. Returns 0 on success or
- <code class="Er">ENOENT</code> if the ofw property does not exists.</dd>
- <dt id="regulator_release"><a class="permalink" href="#regulator_release"><code class="Fn">regulator_release</code></a>(<var class="Fa">regulator_t
- regulator</var>)</dt>
- <dd>This disables the regulator, decrements the refcount on it and frees the
- regulator variable passed.</dd>
- <dt id="regulator_get_name"><a class="permalink" href="#regulator_get_name"><code class="Fn">regulator_get_name</code></a>(<var class="Fa">regulator_t
- regulator</var>)</dt>
- <dd>Returns the name of the regulator. All regulator names are unique.</dd>
- <dt id="regulator_enable"><a class="permalink" href="#regulator_enable"><code class="Fn">regulator_enable</code></a>(<var class="Fa">regulator_t
- reg</var>)</dt>
- <dd>Enable the regulator. If the regulator supports a voltage range, the one
- configured in the hardware will be the output voltage. If the regulator
- was already enabled by another driver this simply increments the enable
- counter.</dd>
- <dt id="regulator_disable"><a class="permalink" href="#regulator_disable"><code class="Fn">regulator_disable</code></a>(<var class="Fa">regulator_t
- reg</var>)</dt>
- <dd>Disable the regulator. If the regulator was also enabled by another driver
- this simply decrements the enable counter. If the regulator was not
- previously enabled we will kassert.</dd>
- <dt id="regulator_stop"><a class="permalink" href="#regulator_stop"><code class="Fn">regulator_stop</code></a>(<var class="Fa">regulator_t
- reg</var>)</dt>
- <dd>Disable the regulator in hardware. This ensures the regulator is disabled
- even if it was enabled by bootloader. This should not be called on
- regulator that has previously been enabled by a driver. Returns 0 on
- success or <code class="Er">EBUSY</code> if another consumer enabled
- it.</dd>
- <dt id="regulator_status"><a class="permalink" href="#regulator_status"><code class="Fn">regulator_status</code></a>(<var class="Fa">regulator_t
- reg</var>, <var class="Fa">int *status</var>)</dt>
- <dd>Get the hardware status of the regulator. status will contain a bit mask
- with thoses possible value :
- <dl class="Bl-tag">
- <dt>REGULATOR_STATUS_ENABLED</dt>
- <dd>The regulator is enabled.</dd>
- <dt>REGULATOR_STATUS_OVERCURRENT</dt>
- <dd>The hardware reports that too much current is being drawn.</dd>
- </dl>
- </dd>
- <dt id="regulator_get_voltage"><a class="permalink" href="#regulator_get_voltage"><code class="Fn">regulator_get_voltage</code></a>(<var class="Fa">regulator_t
- reg</var>, <var class="Fa">int *uvolt</var>)</dt>
- <dd>Get the current voltage set for the regulator in microvolts.</dd>
- <dt id="regulator_set_voltage"><a class="permalink" href="#regulator_set_voltage"><code class="Fn">regulator_set_voltage</code></a>(<var class="Fa">regulator_t
- reg</var>, <var class="Fa">int min_uvolt</var>, <var class="Fa">int
- max_uvolt</var>)</dt>
- <dd>Change the voltage for the regulator. If a range is acceptable by the
- hardware or driver different values can be provided as min and max.
- Returns 0 on success or <code class="Er">ERANGE</code> if the regulator
- doesn't support this voltage range.</dd>
- <dt id="regulator_check_voltage"><a class="permalink" href="#regulator_check_voltage"><code class="Fn">regulator_check_voltage</code></a>(<var class="Fa">regulator_t
- reg</var>, <var class="Fa">int uvolt</var>)</dt>
- <dd>Checks if the regulator support the given voltage. Returns 0 on success or
- <code class="Er">ERANGE</code> if the regulator doesn't support this
- voltage range.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">regulator</code> framework first appear in
- <span class="Ux">FreeBSD 12.0</span>. The <code class="Nm">regulator</code>
- framework was written by <span class="An">Michal Meloun</span>
- &lt;<a class="Mt" href="mailto:mmel@FreeBSD.org">mmel@FreeBSD.org</a>&gt;.
- The <code class="Nm">regulator</code> manual page was written by
- <span class="An">Emmanuel Vadot</span>
- &lt;<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 14, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/resettodr.9 4.html b/static/freebsd/man9/resettodr.9 4.html
deleted file mode 100644
index 9b499684..00000000
--- a/static/freebsd/man9/resettodr.9 4.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RESETTODR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RESETTODR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">resettodr</code> &#x2014; <span class="Nd">set
- battery-backed clock from system time</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">resettodr</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#resettodr"><code class="Fn" id="resettodr">resettodr</code></a>()
- function sets the system's battery-backed clock based on the contents of the
- system <var class="Va">time</var> variable.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">inittodr(9)</a>, <a class="Xr">time(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">On many systems, <code class="Fn">resettodr</code>() has to
- convert from <var class="Va">time</var> to a time expressed in terms of
- year, month, day, hours, minutes, and seconds. Many of the implementations
- could share code, but do not.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 13, 1995</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/resource_int_value.9 4.html b/static/freebsd/man9/resource_int_value.9 4.html
deleted file mode 100644
index ec56381f..00000000
--- a/static/freebsd/man9/resource_int_value.9 4.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RESOURCE_INT_VALUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RESOURCE_INT_VALUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">resource_int_value</code>,
- <code class="Nm">resource_long_value</code>,
- <code class="Nm">resource_string_value</code> &#x2014; <span class="Nd">get
- a value from the hints mechanism</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">resource_int_value</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>, <var class="Fa" style="white-space: nowrap;">const char
- *resname</var>, <var class="Fa" style="white-space: nowrap;">int
- *result</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">resource_long_value</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>, <var class="Fa" style="white-space: nowrap;">const char
- *resname</var>, <var class="Fa" style="white-space: nowrap;">long
- *result</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">resource_string_value</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- unit</var>, <var class="Fa" style="white-space: nowrap;">const char
- *resname</var>, <var class="Fa" style="white-space: nowrap;">const char
- **result</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions fetch a value from the &#x201C;hints&#x201D;
- mechanism.</p>
-<p class="Pp">The functions take the following arguments:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">name</var></dt>
- <dd>The name of the device to get the resource value from.</dd>
- <dt><var class="Fa">unit</var></dt>
- <dd>The unit number of the device. -1 is special and is used for wildcard
- entries.</dd>
- <dt><var class="Fa">resname</var></dt>
- <dd>The resource name.</dd>
- <dt><var class="Fa">result</var></dt>
- <dd>A pointer to memory in which to store the resource value.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, the functions return 0. Otherwise, a non-zero error
- code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The functions will fail if:</p>
-<dl class="Bl-tag">
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The resource could not be found.</dd>
- <dt id="EFTYPE">[<a class="permalink" href="#EFTYPE"><code class="Er">EFTYPE</code></a>]</dt>
- <dd>Inappropriate resource type.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Warner
- Losh</span>
- &lt;<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 1, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/rijndael.9 3.html b/static/freebsd/man9/rijndael.9 3.html
deleted file mode 100644
index bb3a114a..00000000
--- a/static/freebsd/man9/rijndael.9 3.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RIJNDAEL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RIJNDAEL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">rijndael_makeKey</code>,
- <code class="Nm">rijndael_cipherInit</code>,
- <code class="Nm">rijndael_blockEncrypt</code>,
- <code class="Nm">rijndael_padEncrypt</code>,
- <code class="Nm">rijndael_blockDecrypt</code>,
- <code class="Nm">rijndael_padDecrypt</code> &#x2014; <span class="Nd">AES
- encryption</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">crypto/rijndael.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_makeKey</code>(<var class="Fa">keyInstance
- *key</var>, <var class="Fa">uint8_t direction</var>, <var class="Fa">int
- keyLen</var>, <var class="Fa">char *keyMaterial</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_cipherInit</code>(<var class="Fa">cipherInstance
- *cipher</var>, <var class="Fa">uint8_t mode</var>, <var class="Fa">char
- *IV</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_blockEncrypt</code>(<var class="Fa">cipherInstance
- *cipher</var>, <var class="Fa">keyInstance *key</var>,
- <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputLen</var>,
- <var class="Fa">uint8_t *outBuffer</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_padEncrypt</code>(<var class="Fa">cipherInstance
- *cipher</var>, <var class="Fa">keyInstance *key</var>,
- <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputOctets</var>,
- <var class="Fa">uint8_t *outBuffer</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_blockDecrypt</code>(<var class="Fa">cipherInstance
- *cipher</var>, <var class="Fa">keyInstance *key</var>,
- <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputLen</var>,
- <var class="Fa">uint8_t *outBuffer</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rijndael_padDecrypt</code>(<var class="Fa">cipherInstance
- *cipher</var>, <var class="Fa">keyInstance *key</var>,
- <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputOctets</var>,
- <var class="Fa">uint8_t *outBuffer</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#rijndael_makeKey"><code class="Fn" id="rijndael_makeKey">rijndael_makeKey</code></a>()
- function is used to set up the key schedule in <var class="Fa">key</var>.
- The <var class="Fa">direction</var> (which may be
- <code class="Dv">DIR_ENCRYPT</code> or <code class="Dv">DIR_DECRYPT</code>)
- specifies the intended use of the key. The length of the key (in bits) is
- given in <var class="Fa">keyLen</var>, and must be 128, 192 or 256. The
- actual key is supplied in the buffer pointed to by
- <var class="Fa">keyMaterial</var>. This material may be raw binary data, or
- an ASCII string containing a hexadecimal rendition of the raw binary data,
- dependent on a compile-time option in the
- <code class="Nm">rijndael_makeKey</code> sources,
- <code class="Dv">BINARY_KEY_MATERIAL</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">rijndael_makeKey</code>() function will
- return <code class="Dv">BAD_KEY_INSTANCE</code> if a
- <code class="Dv">NULL</code> <var class="Fa">key</var> is passed,
- <code class="Dv">BAD_KEY_DIR</code> if <var class="Fa">direction</var> is
- not <code class="Dv">DIR_ENCRYPT</code> or
- <code class="Dv">DIR_DECRYPT</code>, <code class="Dv">BAD_KEY_MAT</code> if
- the key materials are not a hexadecimal string (and binary keys are not
- set), and <code class="Dv">TRUE</code> otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Mark R V Murray</span></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 6, 2002</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/rman.9 4.html b/static/freebsd/man9/rman.9 4.html
deleted file mode 100644
index 12719e79..00000000
--- a/static/freebsd/man9/rman.9 4.html
+++ /dev/null
@@ -1,411 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RMAN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RMAN(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">rman</code>,
- <code class="Nm">rman_activate_resource</code>,
- <code class="Nm">rman_adjust_resource</code>,
- <code class="Nm">rman_deactivate_resource</code>,
- <code class="Nm">rman_fini</code>, <code class="Nm">rman_init</code>,
- <code class="Nm">rman_init_from_resource</code>,
- <code class="Nm">rman_is_region_manager</code>,
- <code class="Nm">rman_manage_region</code>,
- <code class="Nm">rman_first_free_region</code>,
- <code class="Nm">rman_last_free_region</code>,
- <code class="Nm">rman_release_resource</code>,
- <code class="Nm">rman_reserve_resource</code>,
- <code class="Nm">rman_make_alignment_flags</code>,
- <code class="Nm">rman_get_start</code>,
- <code class="Nm">rman_get_end</code>,
- <code class="Nm">rman_get_device</code>,
- <code class="Nm">rman_get_size</code>,
- <code class="Nm">rman_get_flags</code>,
- <code class="Nm">rman_set_mapping</code>,
- <code class="Nm">rman_get_mapping</code>,
- <code class="Nm">rman_set_virtual</code>,
- <code class="Nm">rman_get_virtual</code>,
- <code class="Nm">rman_set_bustag</code>,
- <code class="Nm">rman_get_bustag</code>,
- <code class="Nm">rman_set_bushandle</code>,
- <code class="Nm">rman_get_bushandle</code>,
- <code class="Nm">rman_set_rid</code>, <code class="Nm">rman_get_rid</code>,
- <code class="Nm">rman_set_type</code>, <code class="Nm">rman_get_type</code>
- &#x2014; <span class="Nd">resource management functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rman.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_activate_resource</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_adjust_resource</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- end</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_deactivate_resource</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_fini</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_init_from_resource</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>, <var class="Fa" style="white-space: nowrap;">struct resource
- *r</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_is_region_manager</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct rman
- *rm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_manage_region</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- end</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_first_free_region</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- *start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- *end</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_last_free_region</code>(<var class="Fa" style="white-space: nowrap;">struct
- rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- *start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t
- *end</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_release_resource</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">struct resource *</var>
- <br/>
- <code class="Fn">rman_reserve_resource</code>(<var class="Fa">struct rman
- *rm</var>, <var class="Fa">rman_res_t start</var>,
- <var class="Fa">rman_res_t end</var>, <var class="Fa">rman_res_t
- count</var>, <var class="Fa">u_int flags</var>, <var class="Fa">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">rman_make_alignment_flags</code>(<var class="Fa" style="white-space: nowrap;">uint32_t
- size</var>);</p>
-<p class="Pp"><var class="Ft">rman_res_t</var>
- <br/>
- <code class="Fn">rman_get_start</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">rman_res_t</var>
- <br/>
- <code class="Fn">rman_get_end</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">rman_get_device</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">rman_res_t</var>
- <br/>
- <code class="Fn">rman_get_size</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">rman_get_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_mapping</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct
- resource_map *map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_get_mapping</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct
- resource_map *map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_virtual</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">void
- *v</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">rman_get_virtual</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_bustag</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_space_tag_t t</var>);</p>
-<p class="Pp"><var class="Ft">bus_space_tag_t</var>
- <br/>
- <code class="Fn">rman_get_bustag</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_bushandle</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>,
- <var class="Fa" style="white-space: nowrap;">bus_space_handle_t
- h</var>);</p>
-<p class="Pp"><var class="Ft">bus_space_handle_t</var>
- <br/>
- <code class="Fn">rman_get_bushandle</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_rid</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">int
- rid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_get_rid</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rman_set_type</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>, <var class="Fa" style="white-space: nowrap;">int
- type</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rman_get_type</code>(<var class="Fa" style="white-space: nowrap;">struct
- resource *r</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">rman</code> set of functions provides a
- flexible resource management abstraction. It is used extensively by the bus
- management code. It implements the abstractions of region and resource. A
- region descriptor is used to manage a region; this could be memory or some
- other form of bus space.</p>
-<p class="Pp">Each region has a set of bounds. Within these bounds, allocated
- segments may reside. Each segment, termed a resource, has several properties
- which are represented by a 16-bit flag register, as follows.</p>
-<div class="Bd Pp Li">
-<pre>#define RF_ALLOCATED 0x0001 /* resource has been reserved */
-#define RF_ACTIVE 0x0002 /* resource allocation has been activated */
-#define RF_SHAREABLE 0x0004 /* resource permits contemporaneous sharing */
-#define RF_FIRSTSHARE 0x0020 /* first in sharing list */
-#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */
-#define RF_UNMAPPED 0x0100 /* don't map resource when activating */</pre>
-</div>
-<p class="Pp">Bits 15:10 of the flag register are used to represent the desired
- alignment of the resource within the region.</p>
-<p class="Pp" id="rman_init">The
- <a class="permalink" href="#rman_init"><code class="Fn">rman_init</code></a>()
- function initializes the region descriptor, pointed to by the
- <var class="Fa">rm</var> argument, for use with the resource management
- functions. It is required that the fields <var class="Va">rm_type</var> and
- <var class="Va">rm_descr</var> of <var class="Vt">struct rman</var> be set
- before calling <code class="Fn">rman_init</code>(). The field
- <var class="Va">rm_type</var> shall be set to
- <code class="Dv">RMAN_ARRAY</code>. The field <var class="Va">rm_descr</var>
- shall be set to a string that describes the resource to be managed. The
- <var class="Va">rm_start</var> and <var class="Va">rm_end</var> fields may
- be set to limit the range of acceptable resource addresses. If these fields
- are not set, <code class="Fn">rman_init</code>() will initialize them to
- allow the entire range of resource addresses. It also initializes any
- mutexes associated with the structure. If
- <code class="Fn">rman_init</code>() fails to initialize the mutex, it will
- return <code class="Er">ENOMEM</code>; <code class="Er">otherwise it will
- return 0 and</code> <var class="Fa">rm</var> will be initialized.</p>
-<p class="Pp" id="rman_fini">The
- <a class="permalink" href="#rman_fini"><code class="Fn">rman_fini</code></a>()
- function frees any structures associated with the structure pointed to by
- the <var class="Fa">rm</var> argument. If any of the resources within the
- managed region have the <code class="Dv">RF_ALLOCATED</code> flag set, it
- will return <code class="Er">EBUSY</code>; otherwise, any mutexes associated
- with the structure will be released and destroyed, and the function will
- return 0.</p>
-<p class="Pp" id="rman_manage_region">The
- <a class="permalink" href="#rman_manage_region"><code class="Fn">rman_manage_region</code></a>()
- function establishes the concept of a region which is under
- <code class="Nm">rman</code> control. The <var class="Fa">rman</var>
- argument points to the region descriptor. The <var class="Fa">start</var>
- and <var class="Fa">end</var> arguments specify the bounds of the region. If
- successful, <code class="Fn">rman_manage_region</code>() will return 0. If
- the region overlaps with an existing region, it will return
- <code class="Er">EBUSY</code>. If any part of the region falls outside of
- the valid address range for <var class="Fa">rm</var>, it will return
- <code class="Er">EINVAL</code>. <code class="Er">ENOMEM</code> will be
- returned when <code class="Fn">rman_manage_region</code>() failed to
- allocate memory for the region.</p>
-<p class="Pp" id="rman_init_from_resource">The
- <a class="permalink" href="#rman_init_from_resource"><code class="Fn">rman_init_from_resource</code></a>()
- function is a wrapper routine to create a resource manager backed by an
- existing resource. It initializes <var class="Fa">rm</var> using
- <code class="Fn">rman_init</code>() and then adds a region to
- <var class="Fa">rm</var> corresponding to the address range allocated to
- <var class="Fa">r</var> via
- <code class="Fn">rman_manage_region</code>().</p>
-<p class="Pp" id="rman_first_free_region">The
- <a class="permalink" href="#rman_first_free_region"><code class="Fn">rman_first_free_region</code></a>()
- and
- <a class="permalink" href="#rman_last_free_region"><code class="Fn" id="rman_last_free_region">rman_last_free_region</code></a>()
- functions can be used to query a resource manager for its first (or last)
- unallocated region. If <var class="Fa">rm</var> contains no free region,
- these functions will return <code class="Er">ENOENT</code>. Otherwise,
- <var class="Fa">*start</var> and <var class="Fa">*end</var> are set to the
- bounds of the free region and zero is returned.</p>
-<p class="Pp" id="rman_reserve_resource">The
- <a class="permalink" href="#rman_reserve_resource"><code class="Fn">rman_reserve_resource</code></a>()
- function is where the bulk of the <code class="Nm">rman</code> logic is
- located. It attempts to reserve a contiguous range in the specified region
- <var class="Fa">rm</var> for the use of the device
- <var class="Fa">dev</var>. The caller can specify the
- <var class="Fa">start</var> and <var class="Fa">end</var> of an acceptable
- range, required alignment, and the code will attempt to find a free segment
- which fits. The <var class="Fa">start</var> argument is the lowest
- acceptable starting value of the resource. The <var class="Fa">end</var>
- argument is the highest acceptable ending value of the resource. Therefore,
- <var class="Fa">start</var> <span class="No">+</span>
- <var class="Fa">count</var> <span class="No">- 1</span> must be &#x2264;
- <var class="Fa">end</var> for any allocation to happen. The alignment
- requirement (if any) is specified in <var class="Fa">flags</var>. Often the
- <code class="Dv">RF_ALIGNMENT_LOG2</code> macro is used to specify alignment
- to a power-of-2 size, or <code class="Fn">rman_make_alignment_flags</code>()
- can be used to compute the <var class="Fa">flags</var> value at runtime. A
- shared segment will be allocated if the <code class="Dv">RF_SHAREABLE</code>
- flag is set, otherwise an exclusive segment will be allocated. If this
- shared segment already exists, the caller has its device added to the list
- of consumers.</p>
-<p class="Pp" id="rman_make_alignment_flags">The
- <a class="permalink" href="#rman_make_alignment_flags"><code class="Fn">rman_make_alignment_flags</code></a>()
- function returns the flag mask corresponding to the desired alignment
- <var class="Fa">size</var>. This should be used when calling
- <a class="permalink" href="#rman_reserve_resource_bound"><code class="Fn" id="rman_reserve_resource_bound">rman_reserve_resource_bound</code></a>().</p>
-<p class="Pp" id="rman_is_region_manager">The
- <a class="permalink" href="#rman_is_region_manager"><code class="Fn">rman_is_region_manager</code></a>()
- function returns true if the allocated resource <var class="Fa">r</var> was
- allocated from <var class="Fa">rm</var>. Otherwise, it returns false.</p>
-<p class="Pp" id="rman_adjust_resource">The
- <a class="permalink" href="#rman_adjust_resource"><code class="Fn">rman_adjust_resource</code></a>()
- function is used to adjust the reserved address range of an allocated
- resource to reserve <var class="Fa">start</var> through
- <var class="Fa">end</var>. It can be used to grow or shrink one or both ends
- of the resource range. The current implementation does not support entirely
- relocating the resource and will fail with <code class="Er">EINVAL</code> if
- the new resource range does not overlap the old resource range. If either
- end of the resource range grows and the new resource range would conflict
- with another allocated resource, the function will fail with
- <code class="Er">EBUSY</code>. The
- <code class="Fn">rman_adjust_resource</code>() function does not support
- adjusting the resource range for shared resources and will fail such
- attempts with <code class="Er">EINVAL</code>. Upon success, the resource
- <var class="Fa">r</var> will have a start address of
- <var class="Fa">start</var> and an end address of <var class="Fa">end</var>
- and the function will return zero. Note that none of the constraints of the
- original allocation request such as alignment or boundary restrictions are
- checked by <code class="Fn">rman_adjust_resource</code>(). It is the
- caller's responsibility to enforce any such requirements.</p>
-<p class="Pp" id="rman_release_resource">The
- <a class="permalink" href="#rman_release_resource"><code class="Fn">rman_release_resource</code></a>()
- function releases the reserved resource <var class="Fa">r</var>. It may
- attempt to merge adjacent free resources.</p>
-<p class="Pp" id="rman_activate_resource">The
- <a class="permalink" href="#rman_activate_resource"><code class="Fn">rman_activate_resource</code></a>()
- function marks a resource as active, by setting the
- <code class="Dv">RF_ACTIVE</code> flag. If this is a time shared resource,
- and the caller has not yet acquired the resource, the function returns
- <code class="Er">EBUSY</code>.</p>
-<p class="Pp" id="rman_deactivate_resource">The
- <a class="permalink" href="#rman_deactivate_resource"><code class="Fn">rman_deactivate_resource</code></a>()
- function marks a resource <var class="Fa">r</var> as inactive, by clearing
- the <code class="Dv">RF_ACTIVE</code> flag. If other consumers are waiting
- for this range, it will wakeup their threads.</p>
-<p class="Pp" id="rman_get_start">The
- <a class="permalink" href="#rman_get_start"><code class="Fn">rman_get_start</code></a>(),
- <a class="permalink" href="#rman_get_end"><code class="Fn" id="rman_get_end">rman_get_end</code></a>(),
- <a class="permalink" href="#rman_get_size"><code class="Fn" id="rman_get_size">rman_get_size</code></a>(),
- and
- <a class="permalink" href="#rman_get_flags"><code class="Fn" id="rman_get_flags">rman_get_flags</code></a>()
- functions return the bounds, size and flags of the previously reserved
- resource <var class="Fa">r</var>.</p>
-<p class="Pp" id="rman_set_bustag">The
- <a class="permalink" href="#rman_set_bustag"><code class="Fn">rman_set_bustag</code></a>()
- function associates a <var class="Vt">bus_space_tag_t</var>
- <var class="Fa">t</var> with the resource <var class="Fa">r</var>. The
- <a class="permalink" href="#rman_get_bustag"><code class="Fn" id="rman_get_bustag">rman_get_bustag</code></a>()
- function is used to retrieve this tag once set.</p>
-<p class="Pp" id="rman_set_bushandle">The
- <a class="permalink" href="#rman_set_bushandle"><code class="Fn">rman_set_bushandle</code></a>()
- function associates a <var class="Vt">bus_space_handle_t</var>
- <var class="Fa">h</var> with the resource <var class="Fa">r</var>. The
- <a class="permalink" href="#rman_get_bushandle"><code class="Fn" id="rman_get_bushandle">rman_get_bushandle</code></a>()
- function is used to retrieve this handle once set.</p>
-<p class="Pp" id="rman_set_virtual">The
- <a class="permalink" href="#rman_set_virtual"><code class="Fn">rman_set_virtual</code></a>()
- function is used to associate a kernel virtual address with a resource
- <var class="Fa">r</var>. The
- <a class="permalink" href="#rman_get_virtual"><code class="Fn" id="rman_get_virtual">rman_get_virtual</code></a>()
- function can be used to retrieve the KVA once set.</p>
-<p class="Pp" id="rman_set_mapping">The
- <a class="permalink" href="#rman_set_mapping"><code class="Fn">rman_set_mapping</code></a>()
- function is used to associate a resource mapping with a resource
- <var class="Fa">r</var>. The mapping must cover the entire resource. Setting
- a mapping sets the associated <a class="Xr">bus_space(9)</a> handle and tag
- for <var class="Fa">r</var> as well as the kernel virtual address if the
- mapping contains one. These individual values can be retrieved via
- <a class="permalink" href="#rman_get_bushandle~2"><code class="Fn" id="rman_get_bushandle~2">rman_get_bushandle</code></a>(),
- <code class="Fn">rman_get_bustag</code>(), and
- <code class="Fn">rman_get_virtual</code>().</p>
-<p class="Pp" id="rman_get_mapping">The
- <a class="permalink" href="#rman_get_mapping"><code class="Fn">rman_get_mapping</code></a>()
- function can be used to retrieve the associated resource mapping once
- set.</p>
-<p class="Pp" id="rman_set_rid">The
- <a class="permalink" href="#rman_set_rid"><code class="Fn">rman_set_rid</code></a>()
- function associates a resource identifier with a resource
- <var class="Fa">r</var>. The
- <a class="permalink" href="#rman_get_rid"><code class="Fn" id="rman_get_rid">rman_get_rid</code></a>()
- function retrieves this RID.</p>
-<p class="Pp" id="rman_set_type">The
- <a class="permalink" href="#rman_set_type"><code class="Fn">rman_set_type</code></a>()
- function associates a resource type with a resource <var class="Fa">r</var>.
- The
- <a class="permalink" href="#rman_get_type"><code class="Fn" id="rman_get_type">rman_get_type</code></a>()
- function retrieves this type.</p>
-<p class="Pp" id="rman_get_device">The
- <a class="permalink" href="#rman_get_device"><code class="Fn">rman_get_device</code></a>()
- function returns a pointer to the device which reserved the resource
- <var class="Fa">r</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>,
- <a class="Xr">bus_adjust_resource(9)</a>,
- <a class="Xr">bus_alloc_resource(9)</a>,
- <a class="Xr">bus_map_resource(9)</a>,
- <a class="Xr">bus_release_resource(9)</a>,
- <a class="Xr">bus_set_resource(9)</a>, <a class="Xr">bus_space(9)</a>,
- <a class="Xr">mutex(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/rmlock.9 4.html b/static/freebsd/man9/rmlock.9 4.html
deleted file mode 100644
index 7120bb56..00000000
--- a/static/freebsd/man9/rmlock.9 4.html
+++ /dev/null
@@ -1,366 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RMLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RMLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">rmlock</code>, <code class="Nm">rm_init</code>,
- <code class="Nm">rm_init_flags</code>, <code class="Nm">rm_destroy</code>,
- <code class="Nm">rm_rlock</code>, <code class="Nm">rm_try_rlock</code>,
- <code class="Nm">rm_wlock</code>, <code class="Nm">rm_runlock</code>,
- <code class="Nm">rm_wunlock</code>, <code class="Nm">rm_wowned</code>,
- <code class="Nm">rm_sleep</code>, <code class="Nm">rm_assert</code>,
- <code class="Nm">RM_SYSINIT</code>,
- <code class="Nm">RM_SYSINIT_FLAGS</code>, <code class="Nm">rms_init</code>,
- <code class="Nm">rms_destroy</code>, <code class="Nm">rms_rlock</code>,
- <code class="Nm">rms_wlock</code>, <code class="Nm">rms_runlock</code>,
- <code class="Nm">rms_wunlock</code> &#x2014; <span class="Nd">kernel
- reader/writer lock optimized for read-mostly access patterns</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rmlock.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- opts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct
- rm_priotracker* tracker</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rm_try_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct
- rm_priotracker* tracker</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct
- rm_priotracker* tracker</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rm_wowned</code>(<var class="Fa" style="white-space: nowrap;">const
- struct rmlock *rm</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rm_sleep</code>(<var class="Fa" style="white-space: nowrap;">void
- *wchan</var>, <var class="Fa" style="white-space: nowrap;">struct rmlock
- *rm</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">rm_assert</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">RM_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct rmlock *rm</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p>
-<p class="Pp"><code class="Fn">RM_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct rmlock *rm</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rms_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rmslock *rms</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Read-mostly locks allow shared access to protected data by
- multiple threads, or exclusive access by a single thread. The threads with
- shared access are known as
- <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a>
- since they only read the protected data. A thread with exclusive access is
- known as a
- <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a>
- since it can modify protected data.</p>
-<p class="Pp">Read-mostly locks are designed to be efficient for locks almost
- exclusively used as reader locks and as such should be used for protecting
- data that rarely changes. Acquiring an exclusive lock after the lock has
- been locked for shared access is an expensive operation.</p>
-<p class="Pp" id="rm_rlock">Normal read-mostly locks are similar to
- <a class="Xr">rwlock(9)</a> locks and follow the same lock ordering rules as
- <a class="Xr">rwlock(9)</a> locks. Read-mostly locks have full priority
- propagation like mutexes. Unlike <a class="Xr">rwlock(9)</a>, read-mostly
- locks propagate priority to both readers and writers. This is implemented
- via the <var class="Va">rm_priotracker</var> structure argument supplied to
- <a class="permalink" href="#rm_rlock"><code class="Fn">rm_rlock</code></a>()
- and
- <a class="permalink" href="#rm_runlock"><code class="Fn" id="rm_runlock">rm_runlock</code></a>().
- Readers can recurse if the lock is initialized with the
- <code class="Dv">RM_RECURSE</code> option; however, writers are never
- allowed to recurse.</p>
-<p class="Pp" id="rm_init_flags">Sleeping for writers can be allowed by passing
- <code class="Dv">RM_SLEEPABLE</code> to
- <a class="permalink" href="#rm_init_flags"><code class="Fn">rm_init_flags</code></a>().
- It changes lock ordering rules to the same as for <a class="Xr">sx(9)</a>
- locks. They do not propagate priority to writers, but they do propagate
- priority to readers. Note that readers are not permitted to sleep regardless
- of the flag.</p>
-<p class="Pp" id="rms_init">Sleepable read-mostly locks (created with
- <a class="permalink" href="#rms_init"><code class="Fn">rms_init</code></a>())
- allow sleeping for both readers and writers, but don't do priority
- propagation for either. They follow <a class="Xr">sx(9)</a> lock
- ordering.</p>
-<section class="Ss">
-<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros
- and Functions</a></h2>
-<dl class="Bl-tag">
- <dt id="rm_init"><a class="permalink" href="#rm_init"><code class="Fn">rm_init</code></a>(<var class="Fa">struct
- rmlock *rm</var>, <var class="Fa">const char *name</var>)</dt>
- <dd>Initialize the read-mostly lock <var class="Fa">rm</var>. The
- <var class="Fa">name</var> description is used solely for debugging
- purposes. This function must be called before any other operations on the
- lock.</dd>
- <dt><code class="Fn">rm_init_flags</code>(<var class="Fa">struct rmlock
- *rm</var>, <var class="Fa">const char *name</var>, <var class="Fa">int
- opts</var>)</dt>
- <dd>Similar to <code class="Fn">rm_init</code>(), initialize the read-mostly
- lock <var class="Fa">rm</var> with a set of optional flags. The
- <var class="Fa">opts</var> arguments contains one or more of the following
- flags:
- <dl class="Bl-tag">
- <dt id="RM_NOWITNESS"><a class="permalink" href="#RM_NOWITNESS"><code class="Dv">RM_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd>
- <dt id="RM_RECURSE"><a class="permalink" href="#RM_RECURSE"><code class="Dv">RM_RECURSE</code></a></dt>
- <dd>Allow threads to recursively acquire shared locks for
- <var class="Fa">rm</var>.</dd>
- <dt id="RM_SLEEPABLE"><a class="permalink" href="#RM_SLEEPABLE"><code class="Dv">RM_SLEEPABLE</code></a></dt>
- <dd>Create a sleepable read-mostly lock.</dd>
- <dt id="RM_NEW"><a class="permalink" href="#RM_NEW"><code class="Dv">RM_NEW</code></a></dt>
- <dd>If the kernel has been compiled with <code class="Cd">option
- INVARIANTS</code>, <code class="Fn">rm_init_flags</code>() will assert
- that the <var class="Fa">rm</var> has not been initialized multiple
- times without intervening calls to
- <a class="permalink" href="#rm_destroy"><code class="Fn" id="rm_destroy">rm_destroy</code></a>()
- unless this option is specified.</dd>
- <dt id="RM_DUPOK"><a class="permalink" href="#RM_DUPOK"><code class="Dv">RM_DUPOK</code></a></dt>
- <dd><a class="Xr">witness(4)</a> should not log messages about duplicate
- locks being acquired.</dd>
- </dl>
- </dd>
- <dt><code class="Fn">rm_rlock</code>(<var class="Fa">struct rmlock *rm</var>,
- <var class="Fa">struct rm_priotracker* tracker</var>)</dt>
- <dd>Lock <var class="Fa">rm</var> as a reader using
- <var class="Fa">tracker</var> to track read owners of a lock for priority
- propagation. This data structure is only used internally by
- <code class="Nm">rmlock</code> and must persist until
- <code class="Fn">rm_runlock</code>() has been called. This data structure
- can be allocated on the stack since readers cannot sleep. If any thread
- holds this lock exclusively, the current thread blocks, and its priority
- is propagated to the exclusive holder. If the lock was initialized with
- the <code class="Dv">RM_RECURSE</code> option the
- <code class="Fn">rm_rlock</code>() function can be called when the current
- thread has already acquired reader access on
- <var class="Fa">rm</var>.</dd>
- <dt id="rm_try_rlock"><a class="permalink" href="#rm_try_rlock"><code class="Fn">rm_try_rlock</code></a>(<var class="Fa">struct
- rmlock *rm</var>, <var class="Fa">struct rm_priotracker* tracker</var>)</dt>
- <dd>Try to lock <var class="Fa">rm</var> as a reader.
- <code class="Fn">rm_try_rlock</code>() will return 0 if the lock cannot be
- acquired immediately; otherwise, the lock will be acquired and a non-zero
- value will be returned. Note that <code class="Fn">rm_try_rlock</code>()
- may fail even while the lock is not currently held by a writer. If the
- lock was initialized with the <code class="Dv">RM_RECURSE</code> option,
- <code class="Fn">rm_try_rlock</code>() will succeed if the current thread
- has already acquired reader access.</dd>
- <dt id="rm_wlock"><a class="permalink" href="#rm_wlock"><code class="Fn">rm_wlock</code></a>(<var class="Fa">struct
- rmlock *rm</var>)</dt>
- <dd>Lock <var class="Fa">rm</var> as a writer. If there are any shared owners
- of the lock, the current thread blocks. The
- <code class="Fn">rm_wlock</code>() function cannot be called
- recursively.</dd>
- <dt><code class="Fn">rm_runlock</code>(<var class="Fa">struct rmlock
- *rm</var>, <var class="Fa">struct rm_priotracker* tracker</var>)</dt>
- <dd>This function releases a shared lock previously acquired by
- <code class="Fn">rm_rlock</code>(). The <var class="Fa">tracker</var>
- argument must match the <var class="Fa">tracker</var> argument used for
- acquiring the shared lock</dd>
- <dt id="rm_wunlock"><a class="permalink" href="#rm_wunlock"><code class="Fn">rm_wunlock</code></a>(<var class="Fa">struct
- rmlock *rm</var>)</dt>
- <dd>This function releases an exclusive lock previously acquired by
- <code class="Fn">rm_wlock</code>().</dd>
- <dt><code class="Fn">rm_destroy</code>(<var class="Fa">struct rmlock
- *rm</var>)</dt>
- <dd>This functions destroys a lock previously initialized with
- <code class="Fn">rm_init</code>(). The <var class="Fa">rm</var> lock must
- be unlocked.</dd>
- <dt id="rm_wowned"><a class="permalink" href="#rm_wowned"><code class="Fn">rm_wowned</code></a>(<var class="Fa">const
- struct rmlock *rm</var>)</dt>
- <dd>This function returns a non-zero value if the current thread owns an
- exclusive lock on <var class="Fa">rm</var>.</dd>
- <dt id="rm_sleep"><a class="permalink" href="#rm_sleep"><code class="Fn">rm_sleep</code></a>(<var class="Fa">void
- *wchan</var>, <var class="Fa">struct rmlock *rm</var>, <var class="Fa">int
- priority</var>, <var class="Fa">const char *wmesg</var>, <var class="Fa">int
- timo</var>)</dt>
- <dd>This function atomically releases <var class="Fa">rm</var> while waiting
- for an event. The <var class="Fa">rm</var> lock must be exclusively
- locked. For more details on the parameters to this function, see
- <a class="Xr">sleep(9)</a>.</dd>
- <dt id="rm_assert"><a class="permalink" href="#rm_assert"><code class="Fn">rm_assert</code></a>(<var class="Fa">struct
- rmlock *rm</var>, <var class="Fa">int what</var>)</dt>
- <dd>This function asserts that the <var class="Fa">rm</var> lock is in the
- state specified by <var class="Fa">what</var>. If the assertions are not
- true and the kernel is compiled with <code class="Cd">options
- INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>,
- the kernel will panic. Currently the following base assertions are
- supported:
- <dl class="Bl-tag">
- <dt id="RA_LOCKED"><a class="permalink" href="#RA_LOCKED"><code class="Dv">RA_LOCKED</code></a></dt>
- <dd>Assert that current thread holds either a shared or exclusive lock of
- <var class="Fa">rm</var>.</dd>
- <dt id="RA_RLOCKED"><a class="permalink" href="#RA_RLOCKED"><code class="Dv">RA_RLOCKED</code></a></dt>
- <dd>Assert that current thread holds a shared lock of
- <var class="Fa">rm</var>.</dd>
- <dt id="RA_WLOCKED"><a class="permalink" href="#RA_WLOCKED"><code class="Dv">RA_WLOCKED</code></a></dt>
- <dd>Assert that current thread holds an exclusive lock of
- <var class="Fa">rm</var>.</dd>
- <dt id="RA_UNLOCKED"><a class="permalink" href="#RA_UNLOCKED"><code class="Dv">RA_UNLOCKED</code></a></dt>
- <dd>Assert that current thread holds neither a shared nor exclusive lock
- of <var class="Fa">rm</var>.</dd>
- </dl>
- <p class="Pp">In addition, one of the following optional flags may be
- specified with <code class="Dv">RA_LOCKED</code>,
- <code class="Dv">RA_RLOCKED</code>, or
- <code class="Dv">RA_WLOCKED</code>:</p>
- <dl class="Bl-tag">
- <dt id="RA_RECURSED"><a class="permalink" href="#RA_RECURSED"><code class="Dv">RA_RECURSED</code></a></dt>
- <dd>Assert that the current thread holds a recursive lock of
- <var class="Fa">rm</var>.</dd>
- <dt id="RA_NOTRECURSED"><a class="permalink" href="#RA_NOTRECURSED"><code class="Dv">RA_NOTRECURSED</code></a></dt>
- <dd>Assert that the current thread does not hold a recursive lock of
- <var class="Fa">rm</var>.</dd>
- </dl>
- </dd>
-</dl>
-<dl class="Bl-tag">
- <dt id="rms_init~2"><a class="permalink" href="#rms_init~2"><code class="Fn">rms_init</code></a>(<var class="Fa">struct
- rmslock *rms</var>, <var class="Fa">const char *name</var>)</dt>
- <dd>Initialize the sleepable read-mostly lock <var class="Fa">rms</var>. The
- <var class="Fa">name</var> description is used as
- <var class="Fa">wmesg</var> parameter to the <a class="Xr">msleep(9)</a>
- routine. This function must be called before any other operations on the
- lock.</dd>
- <dt id="rms_rlock"><a class="permalink" href="#rms_rlock"><code class="Fn">rms_rlock</code></a>(<var class="Fa">struct
- rmlock *rm</var>)</dt>
- <dd>Lock <var class="Fa">rms</var> as a reader. If any thread holds this lock
- exclusively, the current thread blocks.</dd>
- <dt id="rms_wlock"><a class="permalink" href="#rms_wlock"><code class="Fn">rms_wlock</code></a>(<var class="Fa">struct
- rmslock *rms</var>)</dt>
- <dd>Lock <var class="Fa">rms</var> as a writer. If the lock is already taken,
- the current thread blocks. The <code class="Fn">rms_wlock</code>()
- function cannot be called recursively.</dd>
- <dt id="rms_runlock"><a class="permalink" href="#rms_runlock"><code class="Fn">rms_runlock</code></a>(<var class="Fa">struct
- rmslock *rms</var>)</dt>
- <dd>This function releases a shared lock previously acquired by
- <code class="Fn">rms_rlock</code>().</dd>
- <dt id="rms_wunlock"><a class="permalink" href="#rms_wunlock"><code class="Fn">rms_wunlock</code></a>(<var class="Fa">struct
- rmslock *rms</var>)</dt>
- <dd>This function releases an exclusive lock previously acquired by
- <code class="Fn">rms_wlock</code>().</dd>
- <dt id="rms_destroy"><a class="permalink" href="#rms_destroy"><code class="Fn">rms_destroy</code></a>(<var class="Fa">struct
- rmslock *rms</var>)</dt>
- <dd>This functions destroys a lock previously initialized with
- <code class="Fn">rms_init</code>(). The <var class="Fa">rms</var> lock
- must be unlocked.</dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">panic(9)</a>, <a class="Xr">rwlock(9)</a>,
- <a class="Xr">sema(9)</a>, <a class="Xr">sleep(9)</a>,
- <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions appeared in <span class="Ux">FreeBSD
- 7.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">rmlock</code> facility was written by
- <span class="An">Stephan Uphoff</span>. This manual page was written by
- <span class="An">Gleb Smirnoff</span> for rwlock and modified to reflect
- rmlock by <span class="An">Stephan Uphoff</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The <code class="Nm">rmlock</code> implementation is currently not
- optimized for single processor systems.</p>
-<p class="Pp"><code class="Fn">rm_try_rlock</code>() can fail transiently even
- when there is no writer, while another reader updates the state on the local
- CPU.</p>
-<p class="Pp">The <code class="Nm">rmlock</code> implementation uses a single
- per CPU list shared by all rmlocks in the system. If rmlocks become popular,
- hashing to multiple per CPU queues may be needed to speed up the writer lock
- process.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 12, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/rtentry.9 3.html b/static/freebsd/man9/rtentry.9 3.html
deleted file mode 100644
index 587f2f69..00000000
--- a/static/freebsd/man9/rtentry.9 3.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RTENTRY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RTENTRY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">rtentry</code> &#x2014;
- <span class="Nd">structure of an entry in the kernel routing
- table</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socket.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">net/route.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The kernel provides a common mechanism by which all protocols can
- store and retrieve entries from a central table of routes. Parts of this
- mechanism are also used to interact with user-level processes by means of a
- socket in the <a class="Xr">route(4)</a> pseudo-protocol family. The
- <code class="In">&lt;<a class="In">net/route.h</a>&gt;</code> header file
- defines the structures and manifest constants used in this facility.</p>
-<p class="Pp">The basic structure of a route is defined by
- <var class="Vt">struct rtentry</var>, which includes the following
- fields:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt id="rt_key"><var class="Vt">struct radix_node rt_nodes[2]</var>;</dt>
- <dd>Glue used by the radix-tree routines. These members also include in their
- substructure the key (i.e., destination address) and mask used when the
- route was created. The
- <a class="permalink" href="#rt_key"><code class="Fn">rt_key</code></a>(<var class="Fa">rt</var>)
- and
- <a class="permalink" href="#rt_mask"><code class="Fn" id="rt_mask">rt_mask</code></a>(<var class="Fa">rt</var>)
- macros can be used to extract this information (in the form of a
- <var class="Vt">struct sockaddr *</var>) given a <var class="Vt">struct
- rtentry *</var>.</dd>
- <dt><var class="Vt">struct sockaddr *rt_gateway</var>;</dt>
- <dd>The &#x201C;target&#x201D; of the route, which can either represent a
- destination in its own right (some protocols will put a link-layer address
- here), or some intermediate stop on the way to that destination (if the
- <code class="Dv">RTF_GATEWAY</code> flag is set).</dd>
- <dt id="rtfree"><var class="Vt">int rt_flags</var>;</dt>
- <dd>See below. If the <code class="Dv">RTF_UP</code> flag is not present, the
- <a class="permalink" href="#rtfree"><code class="Fn">rtfree</code></a>()
- function will delete the route from the radix tree when the last reference
- drops.</dd>
- <dt><var class="Vt">int rt_refcnt</var>;</dt>
- <dd>Route entries are reference-counted; this field indicates the number of
- external (to the radix tree) references.</dd>
- <dt><var class="Vt">struct ifnet *rt_ifp</var>;</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt><var class="Vt">struct ifaddr *rt_ifa</var>;</dt>
- <dd>These two fields represent the &#x201C;answer&#x201D;, as it were, to the
- question posed by a route lookup; that is, they name the interface and
- interface address to be used in sending a packet to the destination or set
- of destinations which this route represents.</dd>
- <dt><var class="Vt">u_long rt_mtu</var>;</dt>
- <dd>See description of rmx_mtu below.</dd>
- <dt><var class="Vt">u_long rt_weight</var>;</dt>
- <dd>See description of rmx_weight below.</dd>
- <dt><var class="Vt">u_long rt_expire</var>;</dt>
- <dd>See description of rmx_expire below.</dd>
- <dt><var class="Vt">counter64_t rt_pksent</var>;</dt>
- <dd>See description of rmx_pksent below.</dd>
- <dt><var class="Vt">struct rtentry *rt_gwroute</var>;</dt>
- <dd>This member is a reference to a route whose destination is
- <var class="Va">rt_gateway</var>. It is only used for
- <code class="Dv">RTF_GATEWAY</code> routes.</dd>
- <dt><var class="Vt">struct mtx rt_mtx</var>;</dt>
- <dd>Mutex to lock this routing entry.</dd>
-</dl>
-</div>
-<p class="Pp">The following flag bits are defined:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt id="RTF_UP"><a class="permalink" href="#RTF_UP"><code class="Dv">RTF_UP</code></a></dt>
- <dd>The route is not deleted.</dd>
- <dt id="RTF_GATEWAY"><a class="permalink" href="#RTF_GATEWAY"><code class="Dv">RTF_GATEWAY</code></a></dt>
- <dd>The route points to an intermediate destination and not the ultimate
- recipient; the <var class="Va">rt_gateway</var> and
- <var class="Va">rt_gwroute</var> fields name that destination.</dd>
- <dt id="RTF_HOST"><a class="permalink" href="#RTF_HOST"><code class="Dv">RTF_HOST</code></a></dt>
- <dd>This is a host route.</dd>
- <dt id="RTF_REJECT"><a class="permalink" href="#RTF_REJECT"><code class="Dv">RTF_REJECT</code></a></dt>
- <dd>The destination is presently unreachable. This should result in an
- <code class="Er">EHOSTUNREACH</code> error from output routines.</dd>
- <dt id="RTF_DYNAMIC"><a class="permalink" href="#RTF_DYNAMIC"><code class="Dv">RTF_DYNAMIC</code></a></dt>
- <dd>This route was created dynamically by
- <a class="permalink" href="#rtredirect"><code class="Fn" id="rtredirect">rtredirect</code></a>().</dd>
- <dt id="RTF_MODIFIED"><a class="permalink" href="#RTF_MODIFIED"><code class="Dv">RTF_MODIFIED</code></a></dt>
- <dd>This route was modified by <code class="Fn">rtredirect</code>().</dd>
- <dt id="RTF_DONE"><a class="permalink" href="#RTF_DONE"><code class="Dv">RTF_DONE</code></a></dt>
- <dd>Used only in the <a class="Xr">route(4)</a> protocol, indicating that the
- request was executed.</dd>
- <dt id="RTF_XRESOLVE"><a class="permalink" href="#RTF_XRESOLVE"><code class="Dv">RTF_XRESOLVE</code></a></dt>
- <dd>When this route is returned as a result of a lookup, send a report on the
- <a class="Xr">route(4)</a> interface requesting that an external process
- perform resolution for this route.</dd>
- <dt id="RTF_STATIC"><a class="permalink" href="#RTF_STATIC"><code class="Dv">RTF_STATIC</code></a></dt>
- <dd>Indicates that this route was manually added by means of the
- <a class="Xr">route(8)</a> command.</dd>
- <dt id="RTF_BLACKHOLE"><a class="permalink" href="#RTF_BLACKHOLE"><code class="Dv">RTF_BLACKHOLE</code></a></dt>
- <dd>Requests that output sent via this route be discarded.</dd>
- <dt id="RTF_PROTO1"><a class="permalink" href="#RTF_PROTO1"><code class="Dv">RTF_PROTO1</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="RTF_PROTO2"><a class="permalink" href="#RTF_PROTO2"><code class="Dv">RTF_PROTO2</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="RTF_PROTO3"><a class="permalink" href="#RTF_PROTO3"><code class="Dv">RTF_PROTO3</code></a></dt>
- <dd>Protocol-specific.</dd>
- <dt id="RTF_PINNED"><a class="permalink" href="#RTF_PINNED"><code class="Dv">RTF_PINNED</code></a></dt>
- <dd>Indicates that this route is immutable to a routing protocol.</dd>
- <dt id="RTF_LOCAL"><a class="permalink" href="#RTF_LOCAL"><code class="Dv">RTF_LOCAL</code></a></dt>
- <dd>Indicates that the destination of this route is an address configured as
- belonging to this system.</dd>
- <dt id="RTF_BROADCAST"><a class="permalink" href="#RTF_BROADCAST"><code class="Dv">RTF_BROADCAST</code></a></dt>
- <dd>Indicates that the destination is a broadcast address.</dd>
- <dt id="RTF_MULTICAST"><a class="permalink" href="#RTF_MULTICAST"><code class="Dv">RTF_MULTICAST</code></a></dt>
- <dd>Indicates that the destination is a multicast address.</dd>
-</dl>
-</div>
-<p class="Pp">Several metrics are supplied in <var class="Vt">struct
- rt_metrics</var> passed with routing control messages via
- <a class="Xr">route(4)</a> API. Currently only
- <var class="Vt">rmx_mtu</var>, <var class="Vt">rmx_expire</var>, and
- <var class="Vt">rmx_pksent</var> metrics are supplied. All others are
- ignored.</p>
-<p class="Pp">The following metrics are defined by <var class="Vt">struct
- rt_metrics</var>:</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Vt">u_long rmx_locks</var>;</dt>
- <dd>Flag bits indicating which metrics the kernel is not permitted to
- dynamically modify.</dd>
- <dt><var class="Vt">u_long rmx_mtu</var>;</dt>
- <dd>MTU for this path.</dd>
- <dt><var class="Vt">u_long rmx_hopcount</var>;</dt>
- <dd>Number of intermediate systems on the path to this destination.</dd>
- <dt><var class="Vt">u_long rmx_expire</var>;</dt>
- <dd>The time (a la <a class="Xr">time(3)</a>) at which this route should
- expire, or zero if it should never expire. It is the responsibility of
- individual protocol suites to ensure that routes are actually deleted once
- they expire.</dd>
- <dt id="from"><var class="Vt">u_long rmx_recvpipe</var>;</dt>
- <dd>Nominally, the bandwidth-delay product for the path
- <a class="permalink" href="#from"><i class="Em">from</i></a> the
- destination
- <a class="permalink" href="#to"><i class="Em" id="to">to</i></a> this
- system. In practice, this value is used to set the size of the receive
- buffer (and thus the window in sliding-window protocols like TCP).</dd>
- <dt><var class="Vt">u_long rmx_sendpipe</var>;</dt>
- <dd>As before, but in the opposite direction.</dd>
- <dt><var class="Vt">u_long rmx_ssthresh</var>;</dt>
- <dd>The slow-start threshold used in TCP congestion-avoidance.</dd>
- <dt><var class="Vt">u_long rmx_rtt</var>;</dt>
- <dd>The round-trip time to this destination, in units of
- <code class="Dv">RMX_RTTUNIT</code> per second.</dd>
- <dt><var class="Vt">u_long rmx_rttvar</var>;</dt>
- <dd>The average deviation of the round-trip time to this destination, in units
- of <code class="Dv">RMX_RTTUNIT</code> per second.</dd>
- <dt><var class="Vt">u_long rmx_pksent</var>;</dt>
- <dd>A count of packets successfully sent via this route.</dd>
- <dt><var class="Vt">u_long rmx_filler[4]</var>;</dt>
- <dd>Empty space available for protocol-specific information.</dd>
-</dl>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">route(4)</a>, <a class="Xr">route(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <var class="Vt">rtentry</var> structure first appeared in
- <span class="Ux">4.2BSD</span>. The radix-tree representation of the routing
- table and the <var class="Vt">rt_metrics</var> structure first appeared in
- <span class="Ux">4.3BSD-Reno</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Garrett
- Wollman</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">There are a number of historical relics remaining in this
- interface. The <var class="Va">rt_gateway</var> and
- <var class="Va">rmx_filler</var> fields could be named better.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 5, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/runqueue.9 3.html b/static/freebsd/man9/runqueue.9 3.html
deleted file mode 100644
index 0807f214..00000000
--- a/static/freebsd/man9/runqueue.9 3.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RUNQUEUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RUNQUEUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">choosethread</code>,
- <code class="Nm">procrunnable</code>, <code class="Nm">remrunqueue</code>,
- <code class="Nm">setrunqueue</code> &#x2014; <span class="Nd">manage the
- queue of runnable processes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern struct rq itqueues[]</var>;
- <br/>
- <var class="Vt">extern struct rq rtqueues[]</var>;
- <br/>
- <var class="Vt">extern struct rq queues[]</var>;
- <br/>
- <var class="Vt">extern struct rq idqueues[]</var>;</p>
-<p class="Pp"><var class="Ft">struct thread *</var>
- <br/>
- <code class="Fn">choosethread</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">procrunnable</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">remrunqueue</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">setrunqueue</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The run queue consists of four priority queues:
- <var class="Va">itqueues</var> for interrupt threads,
- <var class="Va">rtqueues</var> for realtime priority processes,
- <var class="Va">queues</var> for time sharing processes, and
- <var class="Va">idqueues</var> for idle priority processes. Each priority
- queue consists of an array of <code class="Dv">NQS</code> queue header
- structures. Each queue header identifies a list of runnable processes of
- equal priority. Each queue also has a single word that contains a bit mask
- identifying non-empty queues to assist in selecting a process quickly. These
- are named <var class="Va">itqueuebits</var>,
- <var class="Va">rtqueuebits</var>, <var class="Va">queuebits</var>, and
- <var class="Va">idqueuebits</var>. The run queues are protected by the
- <var class="Va">sched_lock</var> mutex.</p>
-<p class="Pp" id="procrunnable"><a class="permalink" href="#procrunnable"><code class="Fn">procrunnable</code></a>()
- returns zero if there are no runnable processes other than the idle process.
- If there is at least one runnable process other than the idle process, it
- will return a non-zero value. Note that the <var class="Va">sched_lock</var>
- mutex does
- <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> need to
- be held when this function is called. There is a small race window where one
- CPU may place a process on the run queue when there are currently no other
- runnable processes while another CPU is calling this function. In that case
- the second CPU will simply travel through the idle loop one additional time
- before noticing that there is a runnable process. This works because idle
- CPUs are not halted in SMP systems. If idle CPUs are halted in SMP systems,
- then this race condition might have more serious repercussions in the losing
- case, and <code class="Fn">procrunnable</code>() may have to require that
- the <var class="Va">sched_lock</var> mutex be acquired.</p>
-<p class="Pp" id="choosethread"><a class="permalink" href="#choosethread"><code class="Fn">choosethread</code></a>()
- returns the highest priority runnable thread. If there are no runnable
- threads, then the idle thread is returned. This function is called by
- <a class="permalink" href="#cpu_switch"><code class="Fn" id="cpu_switch">cpu_switch</code></a>()
- and
- <a class="permalink" href="#cpu_throw"><code class="Fn" id="cpu_throw">cpu_throw</code></a>()
- to determine which thread to switch to.
- <code class="Fn">choosethread</code>() must be called with the
- <var class="Va">sched_lock</var> mutex held.</p>
-<p class="Pp" id="setrunqueue"><a class="permalink" href="#setrunqueue"><code class="Fn">setrunqueue</code></a>()
- adds the thread <var class="Fa">td</var> to the tail of the appropriate
- queue in the proper priority queue. The thread must be runnable, i.e.
- <var class="Va">p_stat</var> must be set to <code class="Dv">SRUN</code>.
- This function must be called with the <var class="Va">sched_lock</var> mutex
- held.</p>
-<p class="Pp" id="remrunqueue"><a class="permalink" href="#remrunqueue"><code class="Fn">remrunqueue</code></a>()
- removes thread <var class="Fa">td</var> from its run queue. If
- <var class="Fa">td</var> is not on a run queue, then the kernel will
- <a class="Xr">panic(9)</a>. This function must be called with the
- <var class="Va">sched_lock</var> mutex held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">cpu_switch(9)</a>, <a class="Xr">scheduler(9)</a>,
- <a class="Xr">sleepqueue(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 15, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/rwlock.9 4.html b/static/freebsd/man9/rwlock.9 4.html
deleted file mode 100644
index 15ec3908..00000000
--- a/static/freebsd/man9/rwlock.9 4.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">RWLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">RWLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">rwlock</code>, <code class="Nm">rw_init</code>,
- <code class="Nm">rw_init_flags</code>, <code class="Nm">rw_destroy</code>,
- <code class="Nm">rw_rlock</code>, <code class="Nm">rw_wlock</code>,
- <code class="Nm">rw_runlock</code>, <code class="Nm">rw_wunlock</code>,
- <code class="Nm">rw_unlock</code>, <code class="Nm">rw_try_rlock</code>,
- <code class="Nm">rw_try_upgrade</code>,
- <code class="Nm">rw_try_wlock</code>, <code class="Nm">rw_downgrade</code>,
- <code class="Nm">rw_sleep</code>, <code class="Nm">rw_initialized</code>,
- <code class="Nm">rw_wowned</code>, <code class="Nm">rw_assert</code>,
- <code class="Nm">RW_SYSINIT</code>, <code class="Nm">RW_SYSINIT_FLAGS</code>
- &#x2014; <span class="Nd">kernel reader/writer lock</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/rwlock.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">int
- opts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_try_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_try_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_try_upgrade</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_downgrade</code>(<var class="Fa" style="white-space: nowrap;">struct
- rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_sleep</code>(<var class="Fa" style="white-space: nowrap;">void
- *chan</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock
- *rw</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_initialized</code>(<var class="Fa" style="white-space: nowrap;">const
- struct rwlock *rw</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">rw_wowned</code>(<var class="Fa" style="white-space: nowrap;">const
- struct rwlock *rw</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">rw_assert</code>(<var class="Fa" style="white-space: nowrap;">const
- struct rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">RW_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct rwlock *rw</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p>
-<p class="Pp"><code class="Fn">RW_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct rwlock *rw</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Reader/writer locks allow shared access to protected data by
- multiple threads, or exclusive access by a single thread. The threads with
- shared access are known as
- <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a>
- since they only read the protected data. A thread with exclusive access is
- known as a
- <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a>
- since it can modify protected data.</p>
-<p class="Pp">Although reader/writer locks look very similar to
- <a class="Xr">sx(9)</a> locks, their usage pattern is different.
- Reader/writer locks can be treated as mutexes (see
- <a class="Xr">mutex(9)</a>) with shared/exclusive semantics. Unlike
- <a class="Xr">sx(9)</a>, an <code class="Nm">rwlock</code> can be locked
- while holding a non-spin mutex, and an <code class="Nm">rwlock</code> cannot
- be held while sleeping. The <code class="Nm">rwlock</code> locks have
- priority propagation like mutexes, but priority can be propagated only to
- writers. This limitation comes from the fact that readers are anonymous.
- Another important property is that readers can always recurse, and exclusive
- locks can be made recursive selectively.</p>
-<section class="Ss">
-<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros
- and Functions</a></h2>
-<dl class="Bl-tag">
- <dt id="rw_init"><a class="permalink" href="#rw_init"><code class="Fn">rw_init</code></a>(<var class="Fa">struct
- rwlock *rw</var>, <var class="Fa">const char *name</var>)</dt>
- <dd>Initialize structure located at <var class="Fa">rw</var> as reader/writer
- lock, described by name <var class="Fa">name</var>. The description is
- used solely for debugging purposes. This function must be called before
- any other operations on the lock.</dd>
- <dt id="rw_init_flags"><a class="permalink" href="#rw_init_flags"><code class="Fn">rw_init_flags</code></a>(<var class="Fa">struct
- rwlock *rw</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int opts</var>)</dt>
- <dd>Initialize the rw lock just like the <code class="Fn">rw_init</code>()
- function, but specifying a set of optional flags to alter the behaviour of
- <var class="Fa">rw</var>, through the <var class="Fa">opts</var> argument.
- It contains one or more of the following flags:
- <dl class="Bl-tag">
- <dt id="RW_DUPOK"><a class="permalink" href="#RW_DUPOK"><code class="Dv">RW_DUPOK</code></a></dt>
- <dd>Witness should not log messages about duplicate locks being
- acquired.</dd>
- <dt id="RW_NOPROFILE"><a class="permalink" href="#RW_NOPROFILE"><code class="Dv">RW_NOPROFILE</code></a></dt>
- <dd>Do not profile this lock.</dd>
- <dt id="RW_NOWITNESS"><a class="permalink" href="#RW_NOWITNESS"><code class="Dv">RW_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd>
- <dt id="RW_QUIET"><a class="permalink" href="#RW_QUIET"><code class="Dv">RW_QUIET</code></a></dt>
- <dd>Do not log any operations for this lock via
- <a class="Xr">ktr(4)</a>.</dd>
- <dt id="RW_RECURSE"><a class="permalink" href="#RW_RECURSE"><code class="Dv">RW_RECURSE</code></a></dt>
- <dd>Allow threads to recursively acquire exclusive locks for
- <var class="Fa">rw</var>.</dd>
- <dt id="RW_NEW"><a class="permalink" href="#RW_NEW"><code class="Dv">RW_NEW</code></a></dt>
- <dd>If the kernel has been compiled with <code class="Cd">option
- INVARIANTS</code>, <code class="Fn">rw_init_flags</code>() will assert
- that the <var class="Fa">rw</var> has not been initialized multiple
- times without intervening calls to
- <a class="permalink" href="#rw_destroy"><code class="Fn" id="rw_destroy">rw_destroy</code></a>()
- unless this option is specified.</dd>
- </dl>
- </dd>
- <dt id="rw_rlock"><a class="permalink" href="#rw_rlock"><code class="Fn">rw_rlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Lock <var class="Fa">rw</var> as a reader. If any thread holds this lock
- exclusively, the current thread blocks, and its priority is propagated to
- the exclusive holder. The <code class="Fn">rw_rlock</code>() function can
- be called when the thread has already acquired reader access on
- <var class="Fa">rw</var>. This is called &#x201C;recursing on a
- lock&#x201D;.</dd>
- <dt id="rw_wlock"><a class="permalink" href="#rw_wlock"><code class="Fn">rw_wlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Lock <var class="Fa">rw</var> as a writer. If there are any shared owners
- of the lock, the current thread blocks. The
- <code class="Fn">rw_wlock</code>() function can be called recursively only
- if <var class="Fa">rw</var> has been initialized with the
- <code class="Dv">RW_RECURSE</code> option enabled.</dd>
- <dt id="rw_try_rlock"><a class="permalink" href="#rw_try_rlock"><code class="Fn">rw_try_rlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Try to lock <var class="Fa">rw</var> as a reader. This function will
- return true if the operation succeeds, otherwise 0 will be returned.</dd>
- <dt id="rw_try_wlock"><a class="permalink" href="#rw_try_wlock"><code class="Fn">rw_try_wlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Try to lock <var class="Fa">rw</var> as a writer. This function will
- return true if the operation succeeds, otherwise 0 will be returned.</dd>
- <dt id="rw_runlock"><a class="permalink" href="#rw_runlock"><code class="Fn">rw_runlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>This function releases a shared lock previously acquired by
- <code class="Fn">rw_rlock</code>().</dd>
- <dt id="rw_wunlock"><a class="permalink" href="#rw_wunlock"><code class="Fn">rw_wunlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>This function releases an exclusive lock previously acquired by
- <code class="Fn">rw_wlock</code>().</dd>
- <dt id="rw_unlock"><a class="permalink" href="#rw_unlock"><code class="Fn">rw_unlock</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>This function releases a shared lock previously acquired by
- <code class="Fn">rw_rlock</code>() or an exclusive lock previously
- acquired by <code class="Fn">rw_wlock</code>().</dd>
- <dt id="rw_try_upgrade"><a class="permalink" href="#rw_try_upgrade"><code class="Fn">rw_try_upgrade</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Attempt to upgrade a single shared lock to an exclusive lock. The current
- thread must hold a shared lock of <var class="Fa">rw</var>. This will only
- succeed if the current thread holds the only shared lock on
- <var class="Fa">rw</var>, and it only holds a single shared lock. If the
- attempt succeeds <code class="Fn">rw_try_upgrade</code>() will return a
- non-zero value, and the current thread will hold an exclusive lock. If the
- attempt fails <code class="Fn">rw_try_upgrade</code>() will return zero,
- and the current thread will still hold a shared lock.</dd>
- <dt id="rw_downgrade"><a class="permalink" href="#rw_downgrade"><code class="Fn">rw_downgrade</code></a>(<var class="Fa">struct
- rwlock *rw</var>)</dt>
- <dd>Convert an exclusive lock into a single shared lock. The current thread
- must hold an exclusive lock of <var class="Fa">rw</var>.</dd>
- <dt id="rw_sleep"><a class="permalink" href="#rw_sleep"><code class="Fn">rw_sleep</code></a>(<var class="Fa">void
- *chan</var>, <var class="Fa">struct rwlock *rw</var>, <var class="Fa">int
- priority</var>, <var class="Fa">const char *wmesg</var>, <var class="Fa">int
- timo</var>)</dt>
- <dd>Atomically release <var class="Fa">rw</var> while waiting for an event.
- For more details on the parameters to this function, see
- <a class="Xr">sleep(9)</a>.</dd>
- <dt id="rw_initialized"><a class="permalink" href="#rw_initialized"><code class="Fn">rw_initialized</code></a>(<var class="Fa">const
- struct rwlock *rw</var>)</dt>
- <dd>This function returns non-zero if <var class="Fa">rw</var> has been
- initialized, and zero otherwise.</dd>
- <dt><code class="Fn">rw_destroy</code>(<var class="Fa">struct rwlock
- *rw</var>)</dt>
- <dd>This functions destroys a lock previously initialized with
- <code class="Fn">rw_init</code>(). The <var class="Fa">rw</var> lock must
- be unlocked.</dd>
- <dt id="rw_wowned"><a class="permalink" href="#rw_wowned"><code class="Fn">rw_wowned</code></a>(<var class="Fa">const
- struct rwlock *rw</var>)</dt>
- <dd>This function returns a non-zero value if the current thread owns an
- exclusive lock on <var class="Fa">rw</var>.</dd>
- <dt id="rw_assert"><a class="permalink" href="#rw_assert"><code class="Fn">rw_assert</code></a>(<var class="Fa">const
- struct rwlock *rw</var>, <var class="Fa">int what</var>)</dt>
- <dd>This function allows assertions specified in <var class="Fa">what</var> to
- be made about <var class="Fa">rw</var>. If the assertions are not true and
- the kernel is compiled with <code class="Cd">options INVARIANTS</code> and
- <code class="Cd">options INVARIANT_SUPPORT</code>, the kernel will panic.
- Currently the following base assertions are supported:
- <dl class="Bl-tag">
- <dt id="RA_LOCKED"><a class="permalink" href="#RA_LOCKED"><code class="Dv">RA_LOCKED</code></a></dt>
- <dd>Assert that current thread holds either a shared or exclusive lock of
- <var class="Fa">rw</var>.</dd>
- <dt id="RA_RLOCKED"><a class="permalink" href="#RA_RLOCKED"><code class="Dv">RA_RLOCKED</code></a></dt>
- <dd>Assert that current thread holds a shared lock of
- <var class="Fa">rw</var>.</dd>
- <dt id="RA_WLOCKED"><a class="permalink" href="#RA_WLOCKED"><code class="Dv">RA_WLOCKED</code></a></dt>
- <dd>Assert that current thread holds an exclusive lock of
- <var class="Fa">rw</var>.</dd>
- <dt id="RA_UNLOCKED"><a class="permalink" href="#RA_UNLOCKED"><code class="Dv">RA_UNLOCKED</code></a></dt>
- <dd>Assert that current thread holds neither a shared nor exclusive lock
- of <var class="Fa">rw</var>.</dd>
- </dl>
- <p class="Pp">In addition, one of the following optional flags may be
- specified with <code class="Dv">RA_LOCKED</code>,
- <code class="Dv">RA_RLOCKED</code>, or
- <code class="Dv">RA_WLOCKED</code>:</p>
- <dl class="Bl-tag">
- <dt id="RA_RECURSED"><a class="permalink" href="#RA_RECURSED"><code class="Dv">RA_RECURSED</code></a></dt>
- <dd>Assert that the current thread holds a recursive lock of
- <var class="Fa">rw</var>.</dd>
- <dt id="RA_NOTRECURSED"><a class="permalink" href="#RA_NOTRECURSED"><code class="Dv">RA_NOTRECURSED</code></a></dt>
- <dd>Assert that the current thread does not hold a recursive lock of
- <var class="Fa">rw</var>.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">panic(9)</a>, <a class="Xr">sema(9)</a>,
- <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions appeared in <span class="Ux">FreeBSD
- 7.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">rwlock</code> facility was written by
- <span class="An">John Baldwin</span>. This manual page was written by
- <span class="An">Gleb Smirnoff</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">A kernel without <code class="Dv">WITNESS</code> cannot assert
- whether the current thread does or does not hold a read lock.
- <code class="Dv">RA_LOCKED</code> and <code class="Dv">RA_RLOCKED</code> can
- only assert that
- <a class="permalink" href="#any"><i class="Em" id="any">any</i></a> thread
- holds a read lock. They cannot ensure that the current thread holds a read
- lock. Further, <code class="Dv">RA_UNLOCKED</code> can only assert that the
- current thread does not hold a write lock.</p>
-<p class="Pp">Reader/writer is a bit of an awkward name. An
- <code class="Nm">rwlock</code> can also be called a &#x201C;Robert
- Watson&#x201D; lock if desired.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 11, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sbuf.9 4.html b/static/freebsd/man9/sbuf.9 4.html
deleted file mode 100644
index 320c464f..00000000
--- a/static/freebsd/man9/sbuf.9 4.html
+++ /dev/null
@@ -1,525 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SBUF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SBUF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sbuf</code>, <code class="Nm">sbuf_new</code>,
- <code class="Nm">sbuf_new_auto</code>,
- <code class="Nm">sbuf_new_for_sysctl</code>,
- <code class="Nm">sbuf_clear</code>, <code class="Nm">sbuf_get_flags</code>,
- <code class="Nm">sbuf_set_flags</code>,
- <code class="Nm">sbuf_clear_flags</code>,
- <code class="Nm">sbuf_setpos</code>, <code class="Nm">sbuf_bcat</code>,
- <code class="Nm">sbuf_bcopyin</code>, <code class="Nm">sbuf_bcpy</code>,
- <code class="Nm">sbuf_cat</code>, <code class="Nm">sbuf_copyin</code>,
- <code class="Nm">sbuf_cpy</code>, <code class="Nm">sbuf_nl_terminate</code>,
- <code class="Nm">sbuf_printf</code>, <code class="Nm">sbuf_vprintf</code>,
- <code class="Nm">sbuf_putc</code>, <code class="Nm">sbuf_set_drain</code>,
- <code class="Nm">sbuf_trim</code>, <code class="Nm">sbuf_error</code>,
- <code class="Nm">sbuf_finish</code>, <code class="Nm">sbuf_data</code>,
- <code class="Nm">sbuf_len</code>, <code class="Nm">sbuf_done</code>,
- <code class="Nm">sbuf_delete</code>,
- <code class="Nm">sbuf_start_section</code>,
- <code class="Nm">sbuf_end_section</code>,
- <code class="Nm">sbuf_hexdump</code>,
- <code class="Nm">sbuf_printf_drain</code>,
- <code class="Nm">sbuf_putbuf</code> &#x2014; <span class="Nd">safe string
- composition</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1>
-<p class="Pp"><span class="Lb">Safe String Composition Library (libsbuf,
- -lsbuf)</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">typedef int</var>
- <br/>
- <code class="Fn">(sbuf_drain_func)</code>(<var class="Fa">void *arg</var>,
- <var class="Fa">const char *data</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp">
- <br/>
- <var class="Ft">struct sbuf *</var>
- <br/>
- <code class="Fn">sbuf_new</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">char *buf</var>, <var class="Fa">int length</var>,
- <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">struct sbuf *</var>
- <br/>
- <code class="Fn">sbuf_new_auto</code>(<var class="Fa">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_clear</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_get_flags</code>(<var class="Fa">struct sbuf
- *s</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_set_flags</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_clear_flags</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_setpos</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">int pos</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_bcat</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const void *buf</var>, <var class="Fa">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_bcpy</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const void *buf</var>, <var class="Fa">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_cat</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const char *str</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_cpy</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const char *str</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_nl_terminate</code>(<var class="Fa" style="white-space: nowrap;">struct
- sbuf *</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_printf</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const char *fmt</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_vprintf</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const char *fmt</var>, <var class="Fa">va_list
- ap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_putc</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">int c</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_set_drain</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">sbuf_drain_func *func</var>, <var class="Fa">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_trim</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_error</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_finish</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">sbuf_data</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">sbuf_len</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_done</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_delete</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_start_section</code>(<var class="Fa">struct sbuf
- *s</var>, <var class="Fa">ssize_t *old_lenp</var>);</p>
-<p class="Pp"><var class="Ft">ssize_t</var>
- <br/>
- <code class="Fn">sbuf_end_section</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">ssize_t old_len</var>, <var class="Fa">size_t pad</var>,
- <var class="Fa">int c</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_hexdump</code>(<var class="Fa">struct sbuf *sb</var>,
- <var class="Fa">void *ptr</var>, <var class="Fa">int length</var>,
- <var class="Fa">const char *hdr</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_printf_drain</code>(<var class="Fa">void *arg</var>,
- <var class="Fa">const char *data</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sbuf_putbuf</code>(<var class="Fa">struct sbuf *s</var>);</p>
-<p class="Pp"><code class="Fd">#ifdef _KERNEL</code></p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sbuf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_bcopyin</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const void *uaddr</var>, <var class="Fa">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sbuf_copyin</code>(<var class="Fa">struct sbuf *s</var>,
- <var class="Fa">const void *uaddr</var>, <var class="Fa">size_t
- len</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct sbuf *</var>
- <br/>
- <code class="Fn">sbuf_new_for_sysctl</code>(<var class="Fa">struct sbuf
- *s</var>, <var class="Fa">char *buf</var>, <var class="Fa">int length</var>,
- <var class="Fa">struct sysctl_req *req</var>);</p>
-<p class="Pp"><code class="Fd">#endif /* _KERNEL */</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">sbuf</code> family of functions allows one to
- safely allocate, compose and release strings in kernel or user space.</p>
-<p class="Pp">Instead of arrays of characters, these functions operate on
- structures called <var class="Fa">sbufs</var>, defined in
- <code class="In">&lt;<a class="In">sys/sbuf.h</a>&gt;</code>.</p>
-<p class="Pp">Any errors encountered during the allocation or composition of the
- string will be latched in the data structure, making a single error test at
- the end of the composition sufficient to determine success or failure of the
- entire process.</p>
-<p class="Pp" id="sbuf_new">The
- <a class="permalink" href="#sbuf_new"><code class="Fn">sbuf_new</code></a>()
- function initializes the <var class="Fa">sbuf</var> pointed to by its first
- argument. If that pointer is <code class="Dv">NULL</code>,
- <code class="Fn">sbuf_new</code>() allocates a <var class="Vt">struct
- sbuf</var> using <a class="Xr">malloc(9)</a>. The <var class="Fa">buf</var>
- argument is a pointer to a buffer in which to store the actual string; if it
- is <code class="Dv">NULL</code>, <code class="Fn">sbuf_new</code>() will
- allocate one using <a class="Xr">malloc(9)</a>. The
- <var class="Fa">length</var> is the initial size of the storage buffer. The
- fourth argument, <var class="Fa">flags</var>, may be comprised of the
- following flags:</p>
-<dl class="Bl-tag">
- <dt id="SBUF_FIXEDLEN"><a class="permalink" href="#SBUF_FIXEDLEN"><code class="Dv">SBUF_FIXEDLEN</code></a></dt>
- <dd>The storage buffer is fixed at its initial size. Attempting to extend the
- sbuf beyond this size results in an overflow condition.</dd>
- <dt id="SBUF_AUTOEXTEND"><a class="permalink" href="#SBUF_AUTOEXTEND"><code class="Dv">SBUF_AUTOEXTEND</code></a></dt>
- <dd>This indicates that the storage buffer may be extended as necessary, so
- long as resources allow, to hold additional data.</dd>
- <dt id="SBUF_INCLUDENUL"><a class="permalink" href="#SBUF_INCLUDENUL"><code class="Dv">SBUF_INCLUDENUL</code></a></dt>
- <dd>This causes the final nulterm byte to be counted in the length of the
- data.</dd>
- <dt id="SBUF_DRAINTOEOR"><a class="permalink" href="#SBUF_DRAINTOEOR"><code class="Dv">SBUF_DRAINTOEOR</code></a></dt>
- <dd>Treat top-level sections started with
- <code class="Fn">sbuf_start_section</code>() as a record boundary marker
- that will be used during drain operations to avoid records being split. If
- a record grows sufficiently large such that it fills the
- <var class="Fa">sbuf</var> and therefore cannot be drained without being
- split, an error of <code class="Er">EDEADLK</code> is set.</dd>
- <dt id="SBUF_NOWAIT"><a class="permalink" href="#SBUF_NOWAIT"><code class="Dv">SBUF_NOWAIT</code></a></dt>
- <dd>Indicates that attempts to extend the storage buffer should fail in low
- memory conditions, like <a class="Xr">malloc(9)</a>
- <code class="Dv">M_NOWAIT</code>.</dd>
-</dl>
-<p class="Pp">Note that if <var class="Fa">buf</var> is not
- <code class="Dv">NULL</code>, it must point to an array of at least
- <var class="Fa">length</var> characters. The result of accessing that array
- directly while it is in use by the sbuf is undefined.</p>
-<p class="Pp" id="sbuf_new_auto">The
- <a class="permalink" href="#sbuf_new_auto"><code class="Fn">sbuf_new_auto</code></a>()
- function is a shortcut for creating a completely dynamic
- <code class="Nm">sbuf</code>. It is the equivalent of calling
- <code class="Fn">sbuf_new</code>() with values <code class="Dv">NULL</code>,
- <code class="Dv">NULL</code>, <code class="Dv">0</code>, and
- <code class="Dv">SBUF_AUTOEXTEND</code>.</p>
-<p class="Pp" id="sbuf_new_for_sysctl">The
- <a class="permalink" href="#sbuf_new_for_sysctl"><code class="Fn">sbuf_new_for_sysctl</code></a>()
- function will set up an sbuf with a drain function to use
- <a class="permalink" href="#SYSCTL_OUT"><code class="Fn" id="SYSCTL_OUT">SYSCTL_OUT</code></a>()
- when the internal buffer fills. Note that if the various functions which
- append to an sbuf are used while a non-sleepable lock is held, the user
- buffer should be wired using
- <a class="permalink" href="#sysctl_wire_old_buffer"><code class="Fn" id="sysctl_wire_old_buffer">sysctl_wire_old_buffer</code></a>().</p>
-<p class="Pp" id="sbuf_delete">The
- <a class="permalink" href="#sbuf_delete"><code class="Fn">sbuf_delete</code></a>()
- function clears the <var class="Fa">sbuf</var> and frees any memory
- allocated for it. There must be a call to
- <code class="Fn">sbuf_delete</code>() for every call to
- <code class="Fn">sbuf_new</code>(). Any attempt to access the sbuf after it
- has been deleted will fail.</p>
-<p class="Pp" id="sbuf_clear">The
- <a class="permalink" href="#sbuf_clear"><code class="Fn">sbuf_clear</code></a>()
- function invalidates the contents of the <var class="Fa">sbuf</var> and
- resets its position to zero.</p>
-<p class="Pp" id="sbuf_get_flags">The
- <a class="permalink" href="#sbuf_get_flags"><code class="Fn">sbuf_get_flags</code></a>()
- function returns the current user flags. The
- <a class="permalink" href="#sbuf_set_flags"><code class="Fn" id="sbuf_set_flags">sbuf_set_flags</code></a>()
- and
- <a class="permalink" href="#sbuf_clear_flags"><code class="Fn" id="sbuf_clear_flags">sbuf_clear_flags</code></a>()
- functions set or clear one or more user flags, respectively. The user flags
- are described under the <code class="Fn">sbuf_new</code>() function.</p>
-<p class="Pp" id="sbuf_setpos">The
- <a class="permalink" href="#sbuf_setpos"><code class="Fn">sbuf_setpos</code></a>()
- function sets the <var class="Fa">sbuf</var>'s end position to
- <var class="Fa">pos</var>, which is a value between zero and the current
- position in the buffer. It can only truncate the sbuf to the new
- position.</p>
-<p class="Pp" id="sbuf_bcat">The
- <a class="permalink" href="#sbuf_bcat"><code class="Fn">sbuf_bcat</code></a>()
- function appends the first <var class="Fa">len</var> bytes from the buffer
- <var class="Fa">buf</var> to the <var class="Fa">sbuf</var>.</p>
-<p class="Pp" id="sbuf_bcopyin">The
- <a class="permalink" href="#sbuf_bcopyin"><code class="Fn">sbuf_bcopyin</code></a>()
- function copies <var class="Fa">len</var> bytes from the specified userland
- address into the <var class="Fa">sbuf</var>.</p>
-<p class="Pp" id="sbuf_bcpy">The
- <a class="permalink" href="#sbuf_bcpy"><code class="Fn">sbuf_bcpy</code></a>()
- function replaces the contents of the <var class="Fa">sbuf</var> with the
- first <var class="Fa">len</var> bytes from the buffer
- <var class="Fa">buf</var>.</p>
-<p class="Pp" id="sbuf_cat">The
- <a class="permalink" href="#sbuf_cat"><code class="Fn">sbuf_cat</code></a>()
- function appends the NUL-terminated string <var class="Fa">str</var> to the
- <var class="Fa">sbuf</var> at the current position.</p>
-<p class="Pp" id="sbuf_set_drain">The
- <a class="permalink" href="#sbuf_set_drain"><code class="Fn">sbuf_set_drain</code></a>()
- function sets a drain function <var class="Fa">func</var> for the
- <var class="Fa">sbuf</var>, and records a pointer <var class="Fa">arg</var>
- to be passed to the drain on callback. The drain function cannot be changed
- while <var class="Fa">sbuf_len</var> is non-zero.</p>
-<p class="Pp" id="sbuf_set_drain~2">The registered drain function
- <var class="Vt">sbuf_drain_func</var> will be called with the argument
- <var class="Fa">arg</var> provided to
- <a class="permalink" href="#sbuf_set_drain~2"><code class="Fn">sbuf_set_drain</code></a>(),
- a pointer <var class="Fa">data</var> to a byte string that is the contents
- of the sbuf, and the length <var class="Fa">len</var> of the data. If the
- drain function exists, it will be called when the sbuf internal buffer is
- full, or on behalf of <code class="Fn">sbuf_finish</code>(). The drain
- function may drain some or all of the data, but must drain at least 1 byte.
- The return value from the drain function, if positive, indicates how many
- bytes were drained. If negative, the return value indicates the negative
- error code which will be returned from this or a later call to
- <code class="Fn">sbuf_finish</code>(). If the returned drained length is 0,
- an error of <code class="Er">EDEADLK</code> is set. To do unbuffered
- draining, initialize the sbuf with a two-byte buffer. The drain will be
- called for every byte added to the sbuf. The
- <code class="Fn">sbuf_bcopyin</code>(), <code class="Fn">sbuf_bcpy</code>(),
- <code class="Fn">sbuf_clear</code>(), <code class="Fn">sbuf_copyin</code>(),
- <code class="Fn">sbuf_cpy</code>(), <code class="Fn">sbuf_trim</code>(),
- <code class="Fn">sbuf_data</code>(), and <code class="Fn">sbuf_len</code>()
- functions cannot be used on an sbuf with a drain.</p>
-<p class="Pp" id="sbuf_copyin">The
- <a class="permalink" href="#sbuf_copyin"><code class="Fn">sbuf_copyin</code></a>()
- function copies a NUL-terminated string from the specified userland address
- into the <var class="Fa">sbuf</var>. If the <var class="Fa">len</var>
- argument is non-zero, no more than <var class="Fa">len</var> characters (not
- counting the terminating NUL) are copied; otherwise the entire string, or as
- much of it as can fit in the <var class="Fa">sbuf</var>, is copied.</p>
-<p class="Pp" id="sbuf_cpy">The
- <a class="permalink" href="#sbuf_cpy"><code class="Fn">sbuf_cpy</code></a>()
- function replaces the contents of the <var class="Fa">sbuf</var> with those
- of the NUL-terminated string <var class="Fa">str</var>. This is equivalent
- to calling <code class="Fn">sbuf_cat</code>() with a fresh
- <var class="Fa">sbuf</var> or one which position has been reset to zero with
- <code class="Fn">sbuf_clear</code>() or
- <code class="Fn">sbuf_setpos</code>().</p>
-<p class="Pp" id="sbuf_nl_terminate">The
- <a class="permalink" href="#sbuf_nl_terminate"><code class="Fn">sbuf_nl_terminate</code></a>()
- function appends a trailing newline character, if the current line is
- non-empty and not already terminated by a newline character.</p>
-<p class="Pp" id="sbuf_printf">The
- <a class="permalink" href="#sbuf_printf"><code class="Fn">sbuf_printf</code></a>()
- function formats its arguments according to the format string pointed to by
- <var class="Fa">fmt</var> and appends the resulting string to the
- <var class="Fa">sbuf</var> at the current position.</p>
-<p class="Pp" id="sbuf_vprintf">The
- <a class="permalink" href="#sbuf_vprintf"><code class="Fn">sbuf_vprintf</code></a>()
- function behaves the same as <code class="Fn">sbuf_printf</code>() except
- that the arguments are obtained from the variable-length argument list
- <var class="Fa">ap</var>.</p>
-<p class="Pp" id="sbuf_putc">The
- <a class="permalink" href="#sbuf_putc"><code class="Fn">sbuf_putc</code></a>()
- function appends the character <var class="Fa">c</var> to the
- <var class="Fa">sbuf</var> at the current position.</p>
-<p class="Pp" id="sbuf_trim">The
- <a class="permalink" href="#sbuf_trim"><code class="Fn">sbuf_trim</code></a>()
- function removes trailing whitespace from the
- <var class="Fa">sbuf</var>.</p>
-<p class="Pp" id="sbuf_error">The
- <a class="permalink" href="#sbuf_error"><code class="Fn">sbuf_error</code></a>()
- function returns any error value that the <var class="Fa">sbuf</var> may
- have accumulated, either from the drain function, or
- <code class="Er">ENOMEM</code> if the <var class="Fa">sbuf</var> overflowed.
- This function is generally not needed and instead the error code from
- <code class="Fn">sbuf_finish</code>() is the preferred way to discover
- whether an sbuf had an error.</p>
-<p class="Pp" id="sbuf_finish">The
- <a class="permalink" href="#sbuf_finish"><code class="Fn">sbuf_finish</code></a>()
- function will call the attached drain function if one exists until all the
- data in the <var class="Fa">sbuf</var> is flushed. If there is no attached
- drain, <code class="Fn">sbuf_finish</code>() NUL-terminates the
- <var class="Fa">sbuf</var>. In either case it marks the
- <var class="Fa">sbuf</var> as finished, which means that it may no longer be
- modified using <code class="Fn">sbuf_setpos</code>(),
- <code class="Fn">sbuf_cat</code>(), <code class="Fn">sbuf_cpy</code>(),
- <code class="Fn">sbuf_printf</code>() or
- <code class="Fn">sbuf_putc</code>(), until
- <code class="Fn">sbuf_clear</code>() is used to reset the sbuf.</p>
-<p class="Pp" id="sbuf_data">The
- <a class="permalink" href="#sbuf_data"><code class="Fn">sbuf_data</code></a>()
- function returns the actual string; <code class="Fn">sbuf_data</code>() only
- works on a finished <var class="Fa">sbuf</var>. The
- <a class="permalink" href="#sbuf_len"><code class="Fn" id="sbuf_len">sbuf_len</code></a>()
- function returns the length of the string. For an <var class="Fa">sbuf</var>
- with an attached drain, <code class="Fn">sbuf_len</code>() returns the
- length of the un-drained data.
- <a class="permalink" href="#sbuf_done"><code class="Fn" id="sbuf_done">sbuf_done</code></a>()
- returns non-zero if the <var class="Fa">sbuf</var> is finished.</p>
-<p class="Pp" id="sbuf_start_section">The
- <a class="permalink" href="#sbuf_start_section"><code class="Fn">sbuf_start_section</code></a>()
- and
- <a class="permalink" href="#sbuf_end_section"><code class="Fn" id="sbuf_end_section">sbuf_end_section</code></a>()
- functions may be used for automatic section alignment. The arguments
- <var class="Fa">pad</var> and <var class="Fa">c</var> specify the padding
- size and a character used for padding. The arguments
- <var class="Fa">old_lenp</var> and <var class="Fa">old_len</var> are to save
- and restore the current section length when nested sections are used. For
- the top level section <code class="Dv">NULL</code> and -1 can be specified
- for <var class="Fa">old_lenp</var> and <var class="Fa">old_len</var>
- respectively.</p>
-<p class="Pp" id="sbuf_hexdump">The
- <a class="permalink" href="#sbuf_hexdump"><code class="Fn">sbuf_hexdump</code></a>()
- function prints an array of bytes to the supplied sbuf, along with an ASCII
- representation of the bytes if possible. See the
- <a class="Xr">hexdump(3)</a> man page for more details on the interface.</p>
-<p class="Pp" id="sbuf_printf_drain">The
- <a class="permalink" href="#sbuf_printf_drain"><code class="Fn">sbuf_printf_drain</code></a>()
- function is a drain function that will call printf, or log to the console.
- The argument <var class="Fa">arg</var> must be either
- <code class="Dv">NULL</code>, or a valid pointer to a
- <var class="Vt">size_t</var>. If <var class="Fa">arg</var> is not
- <code class="Dv">NULL</code>, the total bytes drained will be added to the
- value pointed to by <var class="Fa">arg</var>.</p>
-<p class="Pp" id="sbuf_putbuf">The
- <a class="permalink" href="#sbuf_putbuf"><code class="Fn">sbuf_putbuf</code></a>()
- function printfs the sbuf to stdout if in userland, and to the console and
- log if in the kernel. The <var class="Fa">sbuf</var> must be finished before
- calling <code class="Fn">sbuf_putbuf</code>(). It does not drain the buffer
- or update any pointers.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">If an operation caused an <var class="Fa">sbuf</var> to overflow,
- most subsequent operations on it will fail until the
- <var class="Fa">sbuf</var> is finished using
- <code class="Fn">sbuf_finish</code>() or reset using
- <code class="Fn">sbuf_clear</code>(), or its position is reset to a value
- between 0 and one less than the size of its storage buffer using
- <code class="Fn">sbuf_setpos</code>(), or it is reinitialized to a
- sufficiently short string using <code class="Fn">sbuf_cpy</code>().</p>
-<p class="Pp">Drains in user-space will not always function as indicated. While
- the drain function will be called immediately on overflow from the
- <var class="Fa">sbuf_putc</var>, <var class="Fa">sbuf_bcat</var>,
- <var class="Fa">sbuf_cat</var> functions, <var class="Fa">sbuf_printf</var>
- and <var class="Fa">sbuf_vprintf</var> currently have no way to determine
- whether there will be an overflow until after it occurs, and cannot do a
- partial expansion of the format string. Thus when using libsbuf the buffer
- may be extended to allow completion of a single printf call, even though a
- drain is attached.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">sbuf_new</code>() function returns
- <code class="Dv">NULL</code> if it failed to allocate a storage buffer, and
- a pointer to the new <var class="Fa">sbuf</var> otherwise.</p>
-<p class="Pp">The <code class="Fn">sbuf_setpos</code>() function returns -1 if
- <var class="Fa">pos</var> was invalid, and zero otherwise.</p>
-<p class="Pp">The <code class="Fn">sbuf_bcat</code>(),
- <code class="Fn">sbuf_cat</code>(), <code class="Fn">sbuf_cpy</code>(),
- <code class="Fn">sbuf_printf</code>(), <code class="Fn">sbuf_putc</code>(),
- and <code class="Fn">sbuf_trim</code>() functions all return -1 if the
- buffer overflowed, and zero otherwise.</p>
-<p class="Pp">The <code class="Fn">sbuf_error</code>() function returns a
- non-zero value if the buffer has an overflow or drain error, and zero
- otherwise.</p>
-<p class="Pp">The <code class="Fn">sbuf_len</code>() function returns -1 if the
- buffer overflowed.</p>
-<p class="Pp">The <code class="Fn">sbuf_copyin</code>() function returns -1 if
- copying string from userland failed, and number of bytes copied
- otherwise.</p>
-<p class="Pp">The <code class="Fn">sbuf_end_section</code>() function returns
- the section length or -1 if the buffer has an error.</p>
-<p class="Pp">The <code class="Fn">sbuf_finish</code>(<var class="Fa">9</var>)
- function (the kernel version) returns <code class="Er">ENOMEM</code> if the
- sbuf overflowed before being finished, or returns the error code from the
- drain if one is attached.</p>
-<p class="Pp">The <code class="Fn">sbuf_finish</code>(<var class="Fa">3</var>)
- function (the userland version) will return zero for success and -1 and set
- errno on error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>#include &lt;sys/types.h&gt;
-#include &lt;sys/sbuf.h&gt;
-
-struct sbuf *sb;
-
-sb = sbuf_new_auto();
-sbuf_cat(sb, &quot;Customers found:\n&quot;);
-TAILQ_FOREACH(foo, &amp;foolist, list) {
- sbuf_printf(sb, &quot; %4d %s\n&quot;, foo-&gt;index, foo-&gt;name);
- sbuf_printf(sb, &quot; Address: %s\n&quot;, foo-&gt;address);
- sbuf_printf(sb, &quot; Zip: %s\n&quot;, foo-&gt;zipcode);
-}
-if (sbuf_finish(sb) != 0) /* Check for any and all errors */
- err(1, &quot;Could not generate message&quot;);
-transmit_msg(sbuf_data(sb), sbuf_len(sb));
-sbuf_delete(sb);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">hexdump(3)</a>, <a class="Xr">printf(3)</a>,
- <a class="Xr">strcat(3)</a>, <a class="Xr">strcpy(3)</a>,
- <a class="Xr">copyin(9)</a>, <a class="Xr">copyinstr(9)</a>,
- <a class="Xr">printf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">sbuf</code> family of functions first
- appeared in <span class="Ux">FreeBSD 4.4</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">sbuf</code> family of functions was designed
- by <span class="An">Poul-Henning Kamp</span>
- &lt;<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>&gt; and
- implemented by <span class="An">Dag-Erling Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.
- Additional improvements were suggested by <span class="An">Justin T.
- Gibbs</span>
- &lt;<a class="Mt" href="mailto:gibbs@FreeBSD.org">gibbs@FreeBSD.org</a>&gt;.
- Auto-extend support added by <span class="An">Kelly Yancey</span>
- &lt;<a class="Mt" href="mailto:kbyanc@FreeBSD.org">kbyanc@FreeBSD.org</a>&gt;.
- Drain functionality added by <span class="An">Matthew Fleming</span>
- &lt;<a class="Mt" href="mailto:mdf@FreeBSD.org">mdf@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">Dag-Erling
- Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 3, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/scheduler.9 4.html b/static/freebsd/man9/scheduler.9 4.html
deleted file mode 100644
index 0e31a487..00000000
--- a/static/freebsd/man9/scheduler.9 4.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SCHEDULER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SCHEDULER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">curpriority_cmp</code>,
- <code class="Nm">maybe_resched</code>,
- <code class="Nm">resetpriority</code>, <code class="Nm">roundrobin</code>,
- <code class="Nm">roundrobin_interval</code>,
- <code class="Nm">sched_setup</code>, <code class="Nm">schedclock</code>,
- <code class="Nm">schedcpu</code>, <code class="Nm">setrunnable</code>,
- <code class="Nm">updatepri</code> &#x2014; <span class="Nd">perform
- round-robin scheduling of runnable processes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">curpriority_cmp</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">maybe_resched</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">propagate_priority</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">resetpriority</code>(<var class="Fa" style="white-space: nowrap;">struct
- ksegrp *kg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">roundrobin</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">roundrobin_interval</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sched_setup</code>(<var class="Fa" style="white-space: nowrap;">void
- *dummy</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">schedclock</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">schedcpu</code>(<var class="Fa" style="white-space: nowrap;">void
- *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">setrunnable</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">updatepri</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each process has three different priorities stored in
- <var class="Vt">struct proc</var>: <var class="Va">p_usrpri</var>,
- <var class="Va">p_nativepri</var>, and <var class="Va">p_priority</var>.</p>
-<p class="Pp">The <var class="Va">p_usrpri</var> member is the user priority of
- the process calculated from a process' estimated CPU time and nice
- level.</p>
-<p class="Pp" id="propagate_priority">The <var class="Va">p_nativepri</var>
- member is the saved priority used by
- <a class="permalink" href="#propagate_priority"><code class="Fn">propagate_priority</code></a>().
- When a process obtains a mutex, its priority is saved in
- <var class="Va">p_nativepri</var>. While it holds the mutex, the process's
- priority may be bumped by another process that blocks on the mutex. When the
- process releases the mutex, then its priority is restored to the priority
- saved in <var class="Va">p_nativepri</var>.</p>
-<p class="Pp">The <var class="Va">p_priority</var> member is the actual priority
- of the process and is used to determine what <a class="Xr">runqueue(9)</a>
- it runs on, for example.</p>
-<p class="Pp" id="curpriority_cmp">The
- <a class="permalink" href="#curpriority_cmp"><code class="Fn">curpriority_cmp</code></a>()
- function compares the cached priority of the currently running process with
- process <var class="Fa">p</var>. If the currently running process has a
- higher priority, then it will return a value less than zero. If the current
- process has a lower priority, then it will return a value greater than zero.
- If the current process has the same priority as <var class="Fa">p</var>,
- then <code class="Fn">curpriority_cmp</code>() will return zero. The cached
- priority of the currently running process is updated when a process resumes
- from <a class="Xr">tsleep(9)</a> or returns to userland in
- <a class="permalink" href="#userret"><code class="Fn" id="userret">userret</code></a>()
- and is stored in the private variable <var class="Va">curpriority</var>.</p>
-<p class="Pp" id="maybe_resched">The
- <a class="permalink" href="#maybe_resched"><code class="Fn">maybe_resched</code></a>()
- function compares the priorities of the current thread and
- <var class="Fa">td</var>. If <var class="Fa">td</var> has a higher priority
- than the current thread, then a context switch is needed, and
- <code class="Dv">KEF_NEEDRESCHED</code> is set.</p>
-<p class="Pp" id="propagate_priority~2">The
- <a class="permalink" href="#propagate_priority~2"><code class="Fn">propagate_priority</code></a>()
- looks at the process that owns the mutex <var class="Fa">p</var> is blocked
- on. That process's priority is bumped to the priority of
- <var class="Fa">p</var> if needed. If the process is currently running, then
- the function returns. If the process is on a <a class="Xr">runqueue(9)</a>,
- then the process is moved to the appropriate <a class="Xr">runqueue(9)</a>
- for its new priority. If the process is blocked on a mutex, its position in
- the list of processes blocked on the mutex in question is updated to reflect
- its new priority. Then, the function repeats the procedure using the process
- that owns the mutex just encountered. Note that a process's priorities are
- only bumped to the priority of the original process <var class="Fa">p</var>,
- not to the priority of the previously encountered process.</p>
-<p class="Pp" id="resetpriority">The
- <a class="permalink" href="#resetpriority"><code class="Fn">resetpriority</code></a>()
- function recomputes the user priority of the ksegrp <var class="Fa">kg</var>
- (stored in <var class="Va">kg_user_pri</var>) and calls
- <code class="Fn">maybe_resched</code>() to force a reschedule of each thread
- in the group if needed.</p>
-<p class="Pp" id="roundrobin">The
- <a class="permalink" href="#roundrobin"><code class="Fn">roundrobin</code></a>()
- function is used as a <a class="Xr">timeout(9)</a> function to force a
- reschedule every <var class="Va">sched_quantum</var> ticks.</p>
-<p class="Pp" id="roundrobin_interval">The
- <a class="permalink" href="#roundrobin_interval"><code class="Fn">roundrobin_interval</code></a>()
- function simply returns the number of clock ticks in between reschedules
- triggered by <code class="Fn">roundrobin</code>(). Thus, all it does is
- return the current value of <var class="Va">sched_quantum</var>.</p>
-<p class="Pp" id="sched_setup">The
- <a class="permalink" href="#sched_setup"><code class="Fn">sched_setup</code></a>()
- function is a <a class="Xr">SYSINIT(9)</a> that is called to start the
- callout driven scheduler functions. It just calls the
- <code class="Fn">roundrobin</code>() and <code class="Fn">schedcpu</code>()
- functions for the first time. After the initial call, the two functions will
- propagate themselves by registering their callout event again at the
- completion of the respective function.</p>
-<p class="Pp" id="schedclock">The
- <a class="permalink" href="#schedclock"><code class="Fn">schedclock</code></a>()
- function is called by
- <a class="permalink" href="#statclock"><code class="Fn" id="statclock">statclock</code></a>()
- to adjust the priority of the currently running thread's ksegrp. It updates
- the group's estimated CPU time and then adjusts the priority via
- <code class="Fn">resetpriority</code>().</p>
-<p class="Pp" id="schedcpu">The
- <a class="permalink" href="#schedcpu"><code class="Fn">schedcpu</code></a>()
- function updates all process priorities. First, it updates statistics that
- track how long processes have been in various process states. Secondly, it
- updates the estimated CPU time for the current process such that about 90%
- of the CPU usage is forgotten in 5 * load average seconds. For example, if
- the load average is 2.00, then at least 90% of the estimated CPU time for
- the process should be based on the amount of CPU time the process has had in
- the last 10 seconds. It then recomputes the priority of the process and
- moves it to the appropriate <a class="Xr">runqueue(9)</a> if necessary.
- Thirdly, it updates the %CPU estimate used by utilities such as
- <a class="Xr">ps(1)</a> and <a class="Xr">top(1)</a> so that 95% of the CPU
- usage is forgotten in 60 seconds. Once all process priorities have been
- updated, <code class="Fn">schedcpu</code>() calls
- <a class="permalink" href="#vmmeter"><code class="Fn" id="vmmeter">vmmeter</code></a>()
- to update various other statistics including the load average. Finally, it
- schedules itself to run again in <var class="Va">hz</var> clock ticks.</p>
-<p class="Pp" id="setrunnable">The
- <a class="permalink" href="#setrunnable"><code class="Fn">setrunnable</code></a>()
- function is used to change a process's state to be runnable. The process is
- placed on a <a class="Xr">runqueue(9)</a> if needed, and the swapper process
- is woken up and told to swap the process in if the process is swapped out.
- If the process has been asleep for at least one run of
- <code class="Fn">schedcpu</code>(), then <code class="Fn">updatepri</code>()
- is used to adjust the priority of the process.</p>
-<p class="Pp" id="updatepri">The
- <a class="permalink" href="#updatepri"><code class="Fn">updatepri</code></a>()
- function is used to adjust the priority of a process that has been asleep.
- It retroactively decays the estimated CPU time of the process for each
- <code class="Fn">schedcpu</code>() event that the process was asleep.
- Finally, it calls <code class="Fn">resetpriority</code>() to adjust the
- priority of the process.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mi_switch(9)</a>, <a class="Xr">runqueue(9)</a>,
- <a class="Xr">sleepqueue(9)</a>, <a class="Xr">tsleep(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The <var class="Va">curpriority</var> variable really should be
- per-CPU. In addition, <code class="Fn">maybe_resched</code>() should compare
- the priority of <var class="Fa">chk</var> with that of each CPU, and then
- send an IPI to the processor with the lowest priority to trigger a
- reschedule if needed.</p>
-<p class="Pp">Priority propagation is broken and is thus disabled by default.
- The <var class="Va">p_nativepri</var> variable is only updated if a process
- does not obtain a sleep mutex on the first try. Also, if a process obtains
- more than one sleep mutex in this manner, and had its priority bumped in
- between, then <var class="Va">p_nativepri</var> will be clobbered.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 3, 2000</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/securelevel_gt.9 4.html b/static/freebsd/man9/securelevel_gt.9 4.html
deleted file mode 100644
index f71286f0..00000000
--- a/static/freebsd/man9/securelevel_gt.9 4.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SECURELEVEL_GT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SECURELEVEL_GT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">securelevel_gt</code>,
- <code class="Nm">securelevel_ge</code> &#x2014; <span class="Nd">test active
- securelevel</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">securelevel_gt</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int
- level</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">securelevel_ge</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int
- level</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions test the active security level against the given
- <var class="Fa">level</var>. If the calling credential
- <var class="Fa">cr</var> was imprisoned by the <a class="Xr">jail(2)</a>
- system call, and has a different security level set than the host
- environment, the security level with the highest value is used.</p>
-<p class="Pp" id="securelevel_gt">The
- <a class="permalink" href="#securelevel_gt"><code class="Fn">securelevel_gt</code></a>()
- function will evaluate whether or not the active security level is greater
- than the supplied <var class="Fa">level</var>.</p>
-<p class="Pp" id="securelevel_ge">The
- <a class="permalink" href="#securelevel_ge"><code class="Fn">securelevel_ge</code></a>()
- function will evaluate whether or not the active security level is greater
- than or equal to the supplied <var class="Fa">level</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">These functions return <code class="Er">EPERM</code> if condition
- evaluated to true, and 0 otherwise.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">securelevel(7)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 2, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/selrecord.9 4.html b/static/freebsd/man9/selrecord.9 4.html
deleted file mode 100644
index 9a70d9b4..00000000
--- a/static/freebsd/man9/selrecord.9 4.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SELRECORD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SELRECORD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">seldrain</code>,
- <code class="Nm">selrecord</code>, <code class="Nm">selwakeup</code>
- &#x2014; <span class="Nd">record and wakeup select requests</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/selinfo.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">seldrain</code>(<var class="Fa" style="white-space: nowrap;">struct
- selinfo *sip</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">selrecord</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct
- selinfo *sip</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">selwakeup</code>(<var class="Fa" style="white-space: nowrap;">struct
- selinfo *sip</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#seldrain"><code class="Fn" id="seldrain">seldrain</code></a>(),
- <code class="Fn">selrecord</code>() and <code class="Fn">selwakeup</code>()
- are the three central functions used by <a class="Xr">select(2)</a>,
- <a class="Xr">poll(2)</a> and the objects that are being selected on. They
- handle the task of recording which threads are waiting on which objects and
- the waking of the proper threads when an event of interest occurs on an
- object.</p>
-<p class="Pp" id="selrecord"><a class="permalink" href="#selrecord"><code class="Fn">selrecord</code></a>()
- records that the calling thread is interested in events related to a given
- object. If another thread is already waiting on the object a collision will
- be flagged in <var class="Fa">sip</var> which will be later dealt with by
- <code class="Fn">selwakeup</code>().</p>
-<p class="Pp" id="selrecord~2"><a class="permalink" href="#selrecord~2"><code class="Fn">selrecord</code></a>()
- acquires and releases <var class="Va">sellock</var>.</p>
-<p class="Pp" id="selwakeup"><a class="permalink" href="#selwakeup"><code class="Fn">selwakeup</code></a>()
- is called by the underlying object handling code in order to notify any
- waiting threads that an event of interest has occurred. If a collision has
- occurred, <code class="Fn">selwakeup</code>() will increment
- <var class="Va">nselcoll</var>, and broadcast on the global cv in order to
- wake all waiting threads so that they can handle it. If the thread waiting
- on the object is not currently sleeping or the wait channel is not
- <var class="Va">selwait</var>, <code class="Fn">selwakeup</code>() will
- clear the <code class="Dv">TDF_SELECT</code> flag which should be noted by
- <a class="Xr">select(2)</a> and <a class="Xr">poll(2)</a> when they wake
- up.</p>
-<p class="Pp" id="seldrain~2"><a class="permalink" href="#seldrain~2"><code class="Fn">seldrain</code></a>()
- will flush the waiters queue on a specified object before its destruction.
- The object handling code must ensure that <var class="Fa">*sip</var> cannot
- be used once <code class="Fn">seldrain</code>() has been called.</p>
-<p class="Pp" id="selrecord~3">The contents of <var class="Fa">*sip</var> must
- be zeroed, such as by softc initialization, before any call to
- <a class="permalink" href="#selrecord~3"><code class="Fn">selrecord</code></a>()
- or <code class="Fn">selwakeup</code>(), otherwise a panic may occur.
- <code class="Fn">selwakeup</code>() acquires and releases
- <var class="Va">sellock</var> and may acquire and release
- <var class="Va">sched_lock</var>. <code class="Fn">seldrain</code>() could
- usually be just a wrapper for <code class="Fn">selwakeup</code>(), but
- consumers should not generally rely on this feature.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">poll(2)</a>, <a class="Xr">select(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>&gt;
- and <span class="An">Alfred Perlstein</span>
- &lt;<a class="Mt" href="mailto:alfred@FreeBSD.org">alfred@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 25, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sema.9 4.html b/static/freebsd/man9/sema.9 4.html
deleted file mode 100644
index ca4f197b..00000000
--- a/static/freebsd/man9/sema.9 4.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SEMA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SEMA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sema</code>, <code class="Nm">sema_init</code>,
- <code class="Nm">sema_destroy</code>, <code class="Nm">sema_post</code>,
- <code class="Nm">sema_wait</code>, <code class="Nm">sema_timedwait</code>,
- <code class="Nm">sema_trywait</code>, <code class="Nm">sema_value</code>
- &#x2014; <span class="Nd">kernel counting semaphore</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sema.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sema_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>, <var class="Fa" style="white-space: nowrap;">int
- value</var>, <var class="Fa" style="white-space: nowrap;">const char
- *description</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sema_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sema_post</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sema_wait</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sema_timedwait</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sema_trywait</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sema_value</code>(<var class="Fa" style="white-space: nowrap;">struct
- sema *sema</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Counting semaphores provide a mechanism for synchronizing access
- to a pool of resources. Unlike mutexes, semaphores do not have the concept
- of an owner, so they can also be useful in situations where one thread needs
- to acquire a resource, and another thread needs to release it. Each
- semaphore has an integer value associated with it. Posting (incrementing)
- always succeeds, but waiting (decrementing) can only successfully complete
- if the resulting value of the semaphore is greater than or equal to
- zero.</p>
-<p class="Pp">Semaphores should not be used where mutexes and condition
- variables will suffice. Semaphores are a more complex synchronization
- mechanism than mutexes and condition variables, and are not as
- efficient.</p>
-<p class="Pp" id="sema_init">Semaphores are created with
- <a class="permalink" href="#sema_init"><code class="Fn">sema_init</code></a>(),
- where <var class="Fa">sema</var> is a pointer to space for a
- <var class="Vt">struct sema</var>, <var class="Fa">value</var> is the
- initial value of the semaphore, and <var class="Fa">description</var> is a
- pointer to a null-terminated character string that describes the semaphore.
- Semaphores are destroyed with
- <a class="permalink" href="#sema_destroy"><code class="Fn" id="sema_destroy">sema_destroy</code></a>().
- A semaphore is posted (incremented) with
- <a class="permalink" href="#sema_post"><code class="Fn" id="sema_post">sema_post</code></a>().
- A semaphore is waited on (decremented) with
- <a class="permalink" href="#sema_wait"><code class="Fn" id="sema_wait">sema_wait</code></a>(),
- <a class="permalink" href="#sema_timedwait"><code class="Fn" id="sema_timedwait">sema_timedwait</code></a>(),
- or
- <a class="permalink" href="#sema_trywait"><code class="Fn" id="sema_trywait">sema_trywait</code></a>().
- The <var class="Fa">timo</var> argument to
- <code class="Fn">sema_timedwait</code>() specifies the minimum time in ticks
- to wait before returning with failure.
- <a class="permalink" href="#sema_value"><code class="Fn" id="sema_value">sema_value</code></a>()
- is used to read the current value of the semaphore.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">sema_value</code>() function returns the
- current value of the semaphore.</p>
-<p class="Pp">If decrementing the semaphore would result in its value being
- negative, <code class="Fn">sema_trywait</code>() returns 0 to indicate
- failure. Otherwise, a non-zero value is returned to indicate success.</p>
-<p class="Pp">The <code class="Fn">sema_timedwait</code>() function returns 0 if
- waiting on the semaphore succeeded; otherwise a non-zero error code is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">sema_timedwait</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>Timeout expired.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">condvar(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sx(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 1, 2006</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/seqc.9 4.html b/static/freebsd/man9/seqc.9 4.html
deleted file mode 100644
index 29e244d3..00000000
--- a/static/freebsd/man9/seqc.9 4.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SEQC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SEQC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">seqc_consistent</code>,
- <code class="Nm">seqc_read</code>, <code class="Nm">seqc_write_begin</code>,
- <code class="Nm">seqc_write_end</code> &#x2014; <span class="Nd">lockless
- read algorithm</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/seqc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">seqc_write_begin</code>(<var class="Fa" style="white-space: nowrap;">seqc_t
- *seqcp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">seqc_write_end</code>(<var class="Fa" style="white-space: nowrap;">seqc_t
- *seqcp</var>);</p>
-<p class="Pp"><var class="Ft">seqc_t</var>
- <br/>
- <code class="Fn">seqc_read</code>(<var class="Fa" style="white-space: nowrap;">seqc_t
- *seqcp</var>);</p>
-<p class="Pp"><var class="Ft">seqc_t</var>
- <br/>
- <code class="Fn">seqc_consistent</code>(<var class="Fa" style="white-space: nowrap;">const
- seqc_t *seqcp</var>, <var class="Fa" style="white-space: nowrap;">seqc_t
- oldseqc</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">seqc</code> allows zero or more readers and
- zero or one writer to concurrently access an object, providing a consistent
- snapshot of the object for readers. No mutual exclusion between readers and
- writers is required, but readers may be starved indefinitely by writers.</p>
-<p class="Pp" id="seqc_write_begin">The functions
- <a class="permalink" href="#seqc_write_begin"><code class="Fn">seqc_write_begin</code></a>()
- and
- <a class="permalink" href="#seqc_write_end"><code class="Fn" id="seqc_write_end">seqc_write_end</code></a>()
- are used to create a transaction for writer, and notify the readers that the
- object will be modified.</p>
-<p class="Pp" id="seqc_read">The
- <a class="permalink" href="#seqc_read"><code class="Fn">seqc_read</code></a>()
- function returns the current sequence number. If a writer has started a
- transaction, this function will spin until the transaction has ended.</p>
-<p class="Pp" id="seqc_consistent">The
- <a class="permalink" href="#seqc_consistent"><code class="Fn">seqc_consistent</code></a>()
- function compares the sequence number with a previously fetched value. The
- <var class="Fa">oldseqc</var> variable should contain a sequence number from
- the beginning of read transaction.</p>
-<p class="Pp">The reader at the end of a transaction checks if the sequence
- number has changed. If the sequence number didn't change the object wasn't
- modified, and fetched variables are valid. If the sequence number changed
- the object was modified and the fetch should be repeated. In case when
- sequence number is odd the object change is in progress and the reader will
- wait until the write will the sequence number will become even.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following example for a writer changes the
- <var class="Va">var1</var> and <var class="Va">var2</var> variables in the
- <var class="Va">obj</var> structure:</p>
-<div class="Bd Pp Li">
-<pre>lock_exclusive(&amp;obj-&gt;lock);
-seqc_write_begin(&amp;obj-&gt;seqc);
-obj-&gt;var1 = 1;
-obj-&gt;var2 = 2;
-seqc_write_end(&amp;obj-&gt;seqc);
-unlock_exclusive(&amp;obj-&gt;lock);</pre>
-</div>
-<p class="Pp">The following example for a reader reads the
- <var class="Va">var1</var> and <var class="Va">var2</var> variables from the
- <var class="Va">obj</var> structure. In the case where the sequence number
- was changed it restarts the whole process.</p>
-<div class="Bd Pp Li">
-<pre>int var1, var2;
-seqc_t seqc;
-
-for (;;) {
- seqc = seqc_read(&amp;obj-&gt;seqc);
- var1 = obj-&gt;var1;
- var2 = obj-&gt;var2;
- if (seqc_consistent(&amp;obj-&gt;seqc, seqc))
- break;
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">seqc</code> functions was implemented by
- <span class="An">Mateusz Guzik</span>
- &lt;<a class="Mt" href="mailto:mjg@FreeBSD.org">mjg@FreeBSD.org</a>&gt;.
- This manual page was written by
- <br/>
- <span class="An">Mariusz Zaborski</span>
- &lt;<a class="Mt" href="mailto:oshogbo@FreeBSD.org">oshogbo@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1>
-<p class="Pp">There is no guarantee of progress for readers. In case when there
- are a lot of writers the reader can be starved. This concern may be solved
- by returning error after a few attempts.</p>
-<p class="Pp">Theoretically if reading takes a very long time, and when there
- are many writers the counter may overflow and wrap around to the same value.
- In that case the reader will not notice that the object was changed. Given
- that this needs 4 billion transactional writes across a single contended
- reader, it is unlikely to ever happen. This could be avoided by extending
- the interface to allow 64-bit counters.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 29, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sf_buf.9 3.html b/static/freebsd/man9/sf_buf.9 3.html
deleted file mode 100644
index c151edb6..00000000
--- a/static/freebsd/man9/sf_buf.9 3.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SF_BUF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SF_BUF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sf_buf</code> &#x2014; <span class="Nd">manage
- temporary kernel address space mapping for memory pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sf_buf.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct sf_buf *</var>
- <br/>
- <code class="Fn">sf_buf_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct
- vm_page *m</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sf_buf_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- sf_buf *sf</var>);</p>
-<p class="Pp"><var class="Ft">vm_offset_t</var>
- <br/>
- <code class="Fn">sf_buf_kva</code>(<var class="Fa" style="white-space: nowrap;">struct
- sf_buf *sf</var>);</p>
-<p class="Pp"><var class="Ft">struct vm_page *</var>
- <br/>
- <code class="Fn">sf_buf_page</code>(<var class="Fa" style="white-space: nowrap;">struct
- sf_buf *sf</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">sf_buf</code> interface, historically the
- <a class="Xr">sendfile(2)</a> buffer interface, allows kernel subsystems to
- manage temporary kernel address space mappings for physical memory pages. On
- systems with a direct memory map region (allowing all physical pages to be
- visible in the kernel address space at all times), the
- <var class="Vt">struct sf_buf</var> will point to an address in the direct
- map region; on systems without a direct memory map region, the
- <var class="Vt">struct sf_buf</var> will manage a temporary kernel address
- space mapping valid for the lifetime of the <var class="Vt">struct
- sf_buf</var>.</p>
-<p class="Pp" id="sf_buf_alloc">Call
- <a class="permalink" href="#sf_buf_alloc"><code class="Fn">sf_buf_alloc</code></a>()
- to allocate a <var class="Vt">struct sf_buf</var> for a physical memory
- page. <code class="Fn">sf_buf_alloc</code>() is not responsible for
- arranging for the page to be present in physical memory; the caller should
- already have arranged for the page to be wired, i.e., by calling
- <a class="Xr">vm_page_wire(9)</a>. Several flags may be passed to
- <code class="Fn">sf_buf_alloc</code>():</p>
-<dl class="Bl-tag">
- <dt id="SFB_CATCH"><a class="permalink" href="#SFB_CATCH"><code class="Dv">SFB_CATCH</code></a></dt>
- <dd>Cause <code class="Fn">sf_buf_alloc</code>() to abort and return
- <code class="Dv">NULL</code> if a signal is received waiting for a
- <var class="Vt">struct sf_buf</var> to become available.</dd>
- <dt id="SFB_NOWAIT"><a class="permalink" href="#SFB_NOWAIT"><code class="Dv">SFB_NOWAIT</code></a></dt>
- <dd>Cause <code class="Fn">sf_buf_alloc</code>() to return
- <code class="Dv">NULL</code> rather than sleeping if a
- <var class="Vt">struct sf_buf</var> is not immediately available.</dd>
- <dt id="SFB_CPUPRIVATE"><a class="permalink" href="#SFB_CPUPRIVATE"><code class="Dv">SFB_CPUPRIVATE</code></a></dt>
- <dd>Cause <code class="Fn">sf_buf_alloc</code>() to only arrange that the
- temporary mapping be valid on the current CPU, avoiding unnecessary TLB
- shootdowns for mappings that will only be accessed on a single CPU at a
- time. The caller must ensure that accesses to the virtual address occur
- only on the CPU from which <code class="Fn">sf_buf_alloc</code>() was
- invoked, perhaps by using
- <a class="permalink" href="#sched_pin"><code class="Fn" id="sched_pin">sched_pin</code></a>().</dd>
-</dl>
-<p class="Pp" id="sf_buf_kva">Call
- <a class="permalink" href="#sf_buf_kva"><code class="Fn">sf_buf_kva</code></a>()
- to return a kernel mapped address for the page.</p>
-<p class="Pp" id="sf_buf_page">Call
- <a class="permalink" href="#sf_buf_page"><code class="Fn">sf_buf_page</code></a>()
- to return a pointer to the page originally passed into
- <code class="Fn">sf_buf_alloc</code>().</p>
-<p class="Pp" id="sf_buf_free">Call
- <a class="permalink" href="#sf_buf_free"><code class="Fn">sf_buf_free</code></a>()
- to release the <var class="Vt">struct sf_buf</var> reference. The caller is
- responsible for releasing any wiring they have previously acquired on the
- physical page; <code class="Fn">sf_buf_free</code>() releases only the
- temporary kernel address space mapping, not the page itself.</p>
-<p class="Pp">Uses of this interface include managing mappings of borrowed pages
- from user memory, such as in zero-copy socket I/O, or pages of memory from
- the buffer cache referenced by mbuf external storage for
- <a class="Xr">sendfile(2)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sendfile(2)</a>,
- <a class="Xr">vm_page_wire(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <var class="Vt">struct sf_buf</var> API was designed and
- implemented by <span class="An">Alan L. Cox</span>. This manual page was
- written by <span class="An">Robert N. M. Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 28, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sglist.9 4.html b/static/freebsd/man9/sglist.9 4.html
deleted file mode 100644
index 237d7500..00000000
--- a/static/freebsd/man9/sglist.9 4.html
+++ /dev/null
@@ -1,471 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SGLIST(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SGLIST(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sglist</code>,
- <code class="Nm">sglist_alloc</code>, <code class="Nm">sglist_append</code>,
- <code class="Nm">sglist_append_bio</code>,
- <code class="Nm">sglist_append_mbuf</code>,
- <code class="Nm">sglist_append_mbuf_epg</code>,
- <code class="Nm">sglist_append_phys</code>,
- <code class="Nm">sglist_append_sglist</code>,
- <code class="Nm">sglist_append_single_mbuf</code>,
- <code class="Nm">sglist_append_uio</code>,
- <code class="Nm">sglist_append_user</code>,
- <code class="Nm">sglist_append_vmpages</code>,
- <code class="Nm">sglist_build</code>, <code class="Nm">sglist_clone</code>,
- <code class="Nm">sglist_consume_uio</code>,
- <code class="Nm">sglist_count</code>,
- <code class="Nm">sglist_count_mbuf_epg</code>,
- <code class="Nm">sglist_count_vmpages</code>,
- <code class="Nm">sglist_free</code>, <code class="Nm">sglist_hold</code>,
- <code class="Nm">sglist_init</code>, <code class="Nm">sglist_join</code>,
- <code class="Nm">sglist_length</code>, <code class="Nm">sglist_reset</code>,
- <code class="Nm">sglist_slice</code>, <code class="Nm">sglist_split</code>
- &#x2014; <span class="Nd">manage a scatter/gather list of physical memory
- addresses</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sglist.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct sglist *</var>
- <br/>
- <code class="Fn">sglist_alloc</code>(<var class="Fa" style="white-space: nowrap;">int
- nsegs</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_bio</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct bio
- *bp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_mbuf_epg</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>, <var class="Fa" style="white-space: nowrap;">size_t offset</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_phys</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">vm_paddr_t
- paddr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_sglist</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct sglist
- *source</var>, <var class="Fa" style="white-space: nowrap;">size_t
- offset</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_single_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf
- *m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_user</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>,
- <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_append_vmpages</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t
- *m</var>, <var class="Fa" style="white-space: nowrap;">size_t pgoff</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">struct sglist *</var>
- <br/>
- <code class="Fn">sglist_build</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>,
- <var class="Fa" style="white-space: nowrap;">int mflags</var>);</p>
-<p class="Pp"><var class="Ft">struct sglist *</var>
- <br/>
- <code class="Fn">sglist_clone</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_consume_uio</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">size_t
- resid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_count</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_count_mbuf_epg</code>(<var class="Fa" style="white-space: nowrap;">struct
- mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">size_t
- offset</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_count_vmpages</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- *m</var>, <var class="Fa" style="white-space: nowrap;">size_t pgoff</var>,
- <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sglist_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>);</p>
-<p class="Pp"><var class="Ft">struct sglist *</var>
- <br/>
- <code class="Fn">sglist_hold</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sglist_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">int
- maxsegs</var>, <var class="Fa" style="white-space: nowrap;">struct
- sglist_seg *segs</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_join</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *first</var>, <var class="Fa" style="white-space: nowrap;">struct
- sglist *second</var>);</p>
-<p class="Pp"><var class="Ft">size_t</var>
- <br/>
- <code class="Fn">sglist_length</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sglist_reset</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *sg</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_slice</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *original</var>, <var class="Fa" style="white-space: nowrap;">struct
- sglist **slice</var>, <var class="Fa" style="white-space: nowrap;">size_t
- offset</var>, <var class="Fa" style="white-space: nowrap;">size_t
- length</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sglist_split</code>(<var class="Fa" style="white-space: nowrap;">struct
- sglist *original</var>, <var class="Fa" style="white-space: nowrap;">struct
- sglist **head</var>, <var class="Fa" style="white-space: nowrap;">size_t
- length</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">sglist</code> API manages physical address
- ranges. Each list contains one or more elements. Each element contains a
- starting physical address and a length. Scatter/gather lists are read-only
- while they are shared. If one wishes to alter an existing scatter/gather
- list and does not hold the sole reference to the list, then one should
- create a new list instead of modifying the existing list.</p>
-<p class="Pp">Each scatter/gather list object contains a reference count. New
- lists are created with a single reference. New references are obtained by
- calling <code class="Nm">sglist_hold</code> and are released by calling
- <code class="Nm">sglist_free</code>.</p>
-<section class="Ss">
-<h2 class="Ss" id="Allocating_and_Initializing_Lists"><a class="permalink" href="#Allocating_and_Initializing_Lists">Allocating
- and Initializing Lists</a></h2>
-<p class="Pp">Each <code class="Nm">sglist</code> object consists of a header
- structure and a variable-length array of scatter/gather list elements. The
- <code class="Nm">sglist_alloc</code> function allocates a new list that
- contains a header and <var class="Fa">nsegs</var> scatter/gather list
- elements. The <var class="Fa">mflags</var> argument can be set to either
- <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p>
-<p class="Pp">The <code class="Nm">sglist_count</code> function returns the
- number of scatter/gather list elements needed to describe the physical
- address ranges mapped by a single kernel virtual address range. The kernel
- virtual address range starts at <var class="Fa">buf</var> and is
- <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_count_mbuf_epg</code> function returns
- the number of scatter/gather list elements needed to describe the external
- multipage mbuf buffer <var class="Fa">m</var>. The ranges start at an offset
- of <var class="Fa">offset</var> relative to the start of the buffer and is
- <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_count_vmpages</code> function returns
- the number of scatter/gather list elements needed to describe the physical
- address ranges of a buffer backed by an array of virtual memory pages
- <var class="Fa">m</var>. The buffer starts at an offset of
- <var class="Fa">pgoff</var> bytes relative to the first page and is
- <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_build</code> function allocates a new
- scatter/gather list object that describes the physical address ranges mapped
- by a single kernel virtual address range. The kernel virtual address range
- starts at <var class="Fa">buf</var> and is <var class="Fa">len</var> bytes
- long. The <var class="Fa">mflags</var> argument can be set to either
- <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p>
-<p class="Pp">The <code class="Nm">sglist_clone</code> function returns a copy
- of an existing scatter/gather list object <var class="Fa">sg</var>. The
- <var class="Fa">mflags</var> argument can be set to either
- <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>. This
- can be used to obtain a private copy of a scatter/gather list before
- modifying it.</p>
-<p class="Pp">The <code class="Nm">sglist_init</code> function initializes a
- scatter/gather list header. The header is pointed to by
- <var class="Fa">sg</var> and is initialized to manage an array of
- <var class="Fa">maxsegs</var> scatter/gather list elements pointed to by
- <var class="Fa">segs</var>. This can be used to initialize a scatter/gather
- list header whose storage is not provided by
- <code class="Nm">sglist_alloc</code>. In that case, the caller should not
- call <code class="Nm">sglist_free</code> to release its own reference and is
- responsible for ensuring all other references to the list are dropped before
- it releases the storage for <var class="Fa">sg</var> and
- <var class="Fa">segs</var>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Constructing_Scatter/Gather_Lists"><a class="permalink" href="#Constructing_Scatter/Gather_Lists">Constructing
- Scatter/Gather Lists</a></h2>
-<p class="Pp">The <code class="Nm">sglist</code> API provides several routines
- for building a scatter/gather list to describe one or more objects.
- Specifically, the <code class="Nm">sglist_append</code> family of routines
- can be used to append the physical address ranges described by an object to
- the end of a scatter/gather list. All of these routines return 0 on success
- or an error on failure. If a request to append an address range to a
- scatter/gather list fails, the scatter/gather list will remain
- unchanged.</p>
-<p class="Pp">The <code class="Nm">sglist_append</code> function appends the
- physical address ranges described by a single kernel virtual address range
- to the scatter/gather list <var class="Fa">sg</var>. The kernel virtual
- address range starts at <var class="Fa">buf</var> and is
- <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_append_bio</code> function appends the
- physical address ranges described by a single bio <var class="Fa">bp</var>
- to the scatter/gather list <var class="Fa">sg</var>.</p>
-<p class="Pp">The <code class="Nm">sglist_append_mbuf_epg</code> function
- appends the physical address ranges described by the external multipage
- <a class="Xr">mbuf(9)</a> buffer <var class="Fa">ext_pgs</var> to the
- scatter/gather list <var class="Fa">sg</var>. The physical address ranges
- start at offset <var class="Fa">offset</var> within
- <var class="Fa">ext_pgs</var> and continue for <var class="Fa">len</var>
- bytes. Note that unlike <code class="Nm">sglist_append_mbuf</code>,
- <code class="Nm">sglist_append_mbuf_epg</code> only adds ranges for a single
- mbuf, not an entire mbuf chain.</p>
-<p class="Pp">The <code class="Nm">sglist_append_mbuf</code> function appends
- the physical address ranges described by an entire mbuf chain
- <var class="Fa">m</var> to the scatter/gather list
- <var class="Fa">sg</var>.</p>
-<p class="Pp">The <code class="Nm">sglist_append_single_mbuf</code> function
- appends the physical address ranges described by a single mbuf
- <var class="Fa">m</var> to the scatter/gather list
- <var class="Fa">sg</var>.</p>
-<p class="Pp">The <code class="Nm">sglist_append_phys</code> function appends a
- single physical address range to the scatter/gather list
- <var class="Fa">sg</var>. The physical address range starts at
- <var class="Fa">paddr</var> and is <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_append_sglist</code> function appends
- physical address ranges described by the scatter/gather list
- <var class="Fa">source</var> to the scatter/gather list
- <var class="Fa">sg</var>. The physical address ranges start at offset
- <var class="Fa">offset</var> within <var class="Fa">source</var> and
- continue for <var class="Fa">len</var> bytes.</p>
-<p class="Pp">The <code class="Nm">sglist_append_uio</code> function appends the
- physical address ranges described by a <a class="Xr">uio(9)</a> object to
- the scatter/gather list <var class="Fa">sg</var>. Note that it is the
- caller's responsibility to ensure that the pages backing the I/O request are
- wired for the lifetime of <var class="Fa">sg</var>. Note also that this
- routine does not modify <var class="Fa">uio</var>.</p>
-<p class="Pp">The <code class="Nm">sglist_append_user</code> function appends
- the physical address ranges described by a single user virtual address range
- to the scatter/gather list <var class="Fa">sg</var>. The user virtual
- address range is relative to the address space of the thread
- <var class="Fa">td</var>. It starts at <var class="Fa">buf</var> and is
- <var class="Fa">len</var> bytes long. Note that it is the caller's
- responsibility to ensure that the pages backing the user buffer are wired
- for the lifetime of <var class="Fa">sg</var>.</p>
-<p class="Pp">The <code class="Nm">sglist_append_vmpages</code> function appends
- the physical address ranges of a buffer backed by an array of virtual memory
- pages <var class="Fa">m</var>. The buffer starts at an offset of
- <var class="Fa">pgoff</var> bytes relative to the first page and is
- <var class="Fa">len</var> bytes long.</p>
-<p class="Pp">The <code class="Nm">sglist_consume_uio</code> function is a
- variation of <code class="Nm">sglist_append_uio</code>. As with
- <code class="Nm">sglist_append_uio</code>, it appends the physical address
- ranges described by <var class="Fa">uio</var> to the scatter/gather list
- <var class="Fa">sg</var>. Unlike <code class="Nm">sglist_append_uio</code>,
- however, <code class="Nm">sglist_consume_uio</code> modifies the I/O request
- to indicate that the appended address ranges have been processed similar to
- calling <a class="Xr">uiomove(9)</a>. This routine will only append ranges
- that describe up to <var class="Fa">resid</var> total bytes in length. If
- the available segments in the scatter/gather list are exhausted before
- <var class="Fa">resid</var> bytes are processed, then the
- <var class="Fa">uio</var> structure will be updated to reflect the actual
- number of bytes processed, and <code class="Nm">sglist_consume_io</code>
- will return zero to indicate success. In effect, this function will perform
- partial reads or writes. The caller can compare the
- <var class="Fa">uio_resid</var> member of <var class="Fa">uio</var> before
- and after calling <code class="Nm">sglist_consume_uio</code> to determine
- the actual number of bytes processed.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Manipulating_Scatter/Gather_Lists"><a class="permalink" href="#Manipulating_Scatter/Gather_Lists">Manipulating
- Scatter/Gather Lists</a></h2>
-<p class="Pp">The <code class="Nm">sglist_join</code> function appends physical
- address ranges from the scatter/gather list <var class="Fa">second</var>
- onto <var class="Fa">first</var> and then resets
- <var class="Fa">second</var> to an empty list. It returns zero on success or
- an error on failure.</p>
-<p class="Pp">The <code class="Nm">sglist_split</code> function splits an
- existing scatter/gather list into two lists. The first
- <var class="Fa">length</var> bytes described by the list
- <var class="Fa">original</var> are moved to a new list
- <var class="Fa">*head</var>. If <var class="Fa">original</var> describes a
- total address range that is smaller than <var class="Fa">length</var> bytes,
- then all of the address ranges will be moved to the new list at
- <var class="Fa">*head</var> and <var class="Fa">original</var> will be an
- empty list. The caller may supply an existing scatter/gather list in
- <var class="Fa">*head</var>. If so, the list must be empty. Otherwise, the
- caller may set <var class="Fa">*head</var> to <code class="Dv">NULL</code>
- in which case a new scatter/gather list will be allocated. In that case,
- <var class="Fa">mflags</var> may be set to either
- <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>. Note
- that since the <var class="Fa">original</var> list is modified by this call,
- it must be a private list with no other references. The
- <code class="Nm">sglist_split</code> function returns zero on success or an
- error on failure.</p>
-<p class="Pp">The <code class="Nm">sglist_slice</code> function generates a new
- scatter/gather list from a sub-range of an existing scatter/gather list
- <var class="Fa">original</var>. The sub-range to extract is specified by the
- <var class="Fa">offset</var> and <var class="Fa">length</var> parameters.
- The new scatter/gather list is stored in <var class="Fa">*slice</var>. As
- with <var class="Fa">head</var> for <code class="Nm">sglist_join</code>, the
- caller may either provide an empty scatter/gather list, or it may set
- <var class="Fa">*slice</var> to <code class="Dv">NULL</code> in which case
- <code class="Nm">sglist_slice</code> will allocate a new list subject to
- <var class="Fa">mflags</var>. Unlike <code class="Nm">sglist_split</code>,
- <code class="Nm">sglist_slice</code> does not modify
- <var class="Fa">original</var> and does not require it to be a private list.
- The <code class="Nm">sglist_split</code> function returns zero on success or
- an error on failure.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Miscellaneous_Routines"><a class="permalink" href="#Miscellaneous_Routines">Miscellaneous
- Routines</a></h2>
-<p class="Pp">The <code class="Nm">sglist_reset</code> function clears the
- scatter/gather list <var class="Fa">sg</var> so that it no longer maps any
- address ranges. This can allow reuse of a single scatter/gather list object
- for multiple requests.</p>
-<p class="Pp">The <code class="Nm">sglist_length</code> function returns the
- total length of the physical address ranges described by the scatter/gather
- list <var class="Fa">sg</var>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Nm">sglist_alloc</code>,
- <code class="Nm">sglist_build</code>, and
- <code class="Nm">sglist_clone</code> functions return a new scatter/gather
- list on success or <code class="Dv">NULL</code> on failure.</p>
-<p class="Pp">The <code class="Nm">sglist_append</code> family of functions and
- the <code class="Nm">sglist_consume_uio</code>,
- <code class="Nm">sglist_join</code>, <code class="Nm">sglist_slice</code>,
- and <code class="Nm">sglist_split</code> functions return zero on success or
- an error on failure.</p>
-<p class="Pp">The <code class="Nm">sglist_count</code> family of functions
- return a count of scatter/gather list elements.</p>
-<p class="Pp">The <code class="Nm">sglist_length</code> function returns a count
- of address space described by a scatter/gather list in bytes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Nm">sglist_append</code> functions return the
- following errors on failure:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The scatter/gather list has zero segments.</dd>
- <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt>
- <dd>There are not enough available segments in the scatter/gather list to
- append the specified physical address ranges.</dd>
-</dl>
-<p class="Pp">The <code class="Nm">sglist_consume_uio</code> function returns
- the following error on failure:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The scatter/gather list has zero segments.</dd>
-</dl>
-<p class="Pp">The <code class="Nm">sglist_join</code> function returns the
- following error on failure:</p>
-<dl class="Bl-tag">
- <dt id="EFBIG~2">[<a class="permalink" href="#EFBIG~2"><code class="Er">EFBIG</code></a>]</dt>
- <dd>There are not enough available segments in the scatter/gather list
- <var class="Fa">first</var> to append the physical address ranges from
- <var class="Fa">second</var>.</dd>
-</dl>
-<p class="Pp">The <code class="Nm">sglist_slice</code> function returns the
- following errors on failure:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">original</var> scatter/gather list does not describe
- enough address space to cover the requested sub-range.</dd>
- <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The caller-supplied scatter/gather list in <var class="Fa">*slice</var> is
- not empty.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>An attempt to allocate a new scatter/gather list with
- <code class="Dv">M_NOWAIT</code> set in <var class="Fa">mflags</var>
- failed.</dd>
- <dt id="EFBIG~3">[<a class="permalink" href="#EFBIG~3"><code class="Er">EFBIG</code></a>]</dt>
- <dd>There are not enough available segments in the caller-supplied
- scatter/gather list in <var class="Fa">*slice</var> to describe the
- requested physical address ranges.</dd>
-</dl>
-<p class="Pp">The <code class="Nm">sglist_split</code> function returns the
- following errors on failure:</p>
-<dl class="Bl-tag">
- <dt id="EDOOFUS">[<a class="permalink" href="#EDOOFUS"><code class="Er">EDOOFUS</code></a>]</dt>
- <dd>The <var class="Fa">original</var> scatter/gather list has more than one
- reference.</dd>
- <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The caller-supplied scatter/gather list in <var class="Fa">*head</var> is
- not empty.</dd>
- <dt id="ENOMEM~2">[<a class="permalink" href="#ENOMEM~2"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>An attempt to allocate a new scatter/gather list with
- <code class="Dv">M_NOWAIT</code> set in <var class="Fa">mflags</var>
- failed.</dd>
- <dt id="EFBIG~4">[<a class="permalink" href="#EFBIG~4"><code class="Er">EFBIG</code></a>]</dt>
- <dd>There are not enough available segments in the caller-supplied
- scatter/gather list in <var class="Fa">*head</var> to describe the
- requested physical address ranges.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">g_bio(9)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">mbuf(9)</a>, <a class="Xr">uio(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This API was first introduced in <span class="Ux">FreeBSD
- 8.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 25, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/shm_map.9 4.html b/static/freebsd/man9/shm_map.9 4.html
deleted file mode 100644
index 0fd117c8..00000000
--- a/static/freebsd/man9/shm_map.9 4.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SHM_MAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SHM_MAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">shm_map</code>, <code class="Nm">shm_unmap</code>
- &#x2014; <span class="Nd">map shared memory objects into the kernel's
- address space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mman.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">shm_map</code>(<var class="Fa" style="white-space: nowrap;">struct
- file *fp</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">off_t offset</var>,
- <var class="Fa" style="white-space: nowrap;">void **memp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">shm_unmap</code>(<var class="Fa" style="white-space: nowrap;">struct
- file *fp</var>, <var class="Fa" style="white-space: nowrap;">void
- *mem</var>, <var class="Fa" style="white-space: nowrap;">size_t
- size</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#shm_map"><code class="Fn" id="shm_map">shm_map</code></a>()
- and <code class="Fn">shm_unmap</code>() functions provide an API for mapping
- shared memory objects into the kernel. Shared memory objects are created by
- <a class="Xr">shm_open(2)</a>. These objects can then be passed into the
- kernel via file descriptors.</p>
-<p class="Pp">A shared memory object cannot be shrunk while it is mapped into
- the kernel. This is to avoid invalidating any pages that may be wired into
- the kernel's address space. Shared memory objects can still be grown while
- mapped into the kernel.</p>
-<p class="Pp" id="shm_map~2">To simplify the accounting needed to enforce the
- above requirement, callers of this API are required to unmap the entire
- region mapped by
- <a class="permalink" href="#shm_map~2"><code class="Fn">shm_map</code></a>()
- when calling <code class="Fn">shm_unmap</code>(). Unmapping only a portion
- of the region is not permitted.</p>
-<p class="Pp" id="shm_map~3">The
- <a class="permalink" href="#shm_map~3"><code class="Fn">shm_map</code></a>()
- function locates the shared memory object associated with the open file
- <var class="Fa">fp</var>. It maps the region of that object described by
- <var class="Fa">offset</var> and <var class="Fa">size</var> into the
- kernel's address space. If it succeeds, <var class="Fa">*memp</var> will be
- set to the start of the mapping. All pages for the range will be wired into
- memory upon successful return.</p>
-<p class="Pp" id="shm_unmap">The
- <a class="permalink" href="#shm_unmap"><code class="Fn">shm_unmap</code></a>()
- function unmaps a region previously mapped by
- <code class="Fn">shm_map</code>(). The <var class="Fa">mem</var> argument
- should match the value previously returned in <var class="Fa">*memp</var>,
- and the <var class="Fa">size</var> argument should match the value passed to
- <code class="Fn">shm_map</code>().</p>
-<p class="Pp" id="shm_map~4">Note that
- <a class="permalink" href="#shm_map~4"><code class="Fn">shm_map</code></a>()
- will not hold an extra reference on the open file <var class="Fa">fp</var>
- for the lifetime of the mapping. Instead, the calling code is required to do
- this if it wishes to use <code class="Fn">shm_unmap</code>() on the region
- in the future.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">shm_map</code>() and
- <code class="Fn">shm_unmap</code>() functions return zero on success or an
- error on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following function accepts a file descriptor for a shared
- memory object. It maps the first sixteen kilobytes of the object into the
- kernel, performs some work on that address, and then unmaps the address
- before returning.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>int
-shm_example(int fd)
-{
- struct file *fp;
- void *mem;
- int error;
-
- error = fget(curthread, fd, CAP_MMAP, &amp;fp);
- if (error)
- return (error);
- error = shm_map(fp, 16384, 0, &amp;mem);
- if (error) {
- fdrop(fp, curthread);
- return (error);
- }
-
- /* Do something with 'mem'. */
-
- error = shm_unmap(fp, mem, 16384);
- fdrop(fp, curthread);
- return (error);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">shm_map</code>() function returns the
- following errors on failure:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The open file <var class="Fa">fp</var> is not a shared memory object.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The requested region described by <var class="Fa">offset</var> and
- <var class="Fa">size</var> extends beyond the end of the shared memory
- object.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>Insufficient address space was available.</dd>
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>The shared memory object could not be mapped due to a protection
- error.</dd>
- <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The shared memory object could not be mapped due to some other VM
- error.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">shm_unmap</code>() function returns the
- following errors on failure:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The open file <var class="Fa">fp</var> is not a shared memory object.</dd>
- <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The address range described by <var class="Fa">mem</var> and
- <var class="Fa">size</var> is not a valid address range.</dd>
- <dt id="EINVAL~6">[<a class="permalink" href="#EINVAL~6"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The address range described by <var class="Fa">mem</var> and
- <var class="Fa">size</var> is not backed by the shared memory object
- associated with the open file <var class="Fa">fp</var>, or the address
- range does not cover the entire mapping of the object.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">shm_open(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This API was first introduced in <span class="Ux">FreeBSD
- 10.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 14, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/signal.9 4.html b/static/freebsd/man9/signal.9 4.html
deleted file mode 100644
index 5e0e079d..00000000
--- a/static/freebsd/man9/signal.9 4.html
+++ /dev/null
@@ -1,356 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SIGNAL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SIGNAL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">signal</code>, <code class="Nm">SIGADDSET</code>,
- <code class="Nm">SIGDELSET</code>, <code class="Nm">SETEMPTYSET</code>,
- <code class="Nm">SIGFILLSET</code>, <code class="Nm">SIGISMEMBER</code>,
- <code class="Nm">SIGISEMPTY</code>, <code class="Nm">SIGNOTEMPTY</code>,
- <code class="Nm">SIGSETEQ</code>, <code class="Nm">SIGSETNEQ</code>,
- <code class="Nm">SIGSETOR</code>, <code class="Nm">SIGSETAND</code>,
- <code class="Nm">SIGSETNAND</code>, <code class="Nm">SIGSETCANTMASK</code>,
- <code class="Nm">SIG_STOPSIGMASK</code>,
- <code class="Nm">SIG_CONTSIGMASK</code>, <code class="Nm">SIGPENDING</code>,
- <code class="Nm">cursig</code>, <code class="Nm">execsigs</code>,
- <code class="Nm">issignal</code>, <code class="Nm">killproc</code>,
- <code class="Nm">pgsigio</code>, <code class="Nm">postsig</code>,
- <code class="Nm">sigexit</code>, <code class="Nm">siginit</code>,
- <code class="Nm">signotify</code>, <code class="Nm">trapsignal</code>
- &#x2014; <span class="Nd">kernel signal functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/signalvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGADDSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>, <var class="Fa" style="white-space: nowrap;">int
- signo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGDELSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>, <var class="Fa" style="white-space: nowrap;">int
- signo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGEMPTYSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGFILLSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGISMEMBER</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>, <var class="Fa" style="white-space: nowrap;">int
- signo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGISEMPTY</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGNOTEMPTY</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGSETEQ</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t
- set2</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGSETNEQ</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t
- set2</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGSETOR</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t
- set2</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGSETAND</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t
- set2</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIGSETNAND</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t
- set2</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIG_CANTMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIG_STOPSIGMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">SIG_CONTSIGMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t
- set</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">SIGPENDING</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">cursig</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">execsigs</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">issignal</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">killproc</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">char
- *why</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">pgsigio</code>(<var class="Fa" style="white-space: nowrap;">struct
- sigio **sigiop</var>, <var class="Fa" style="white-space: nowrap;">int
- sig</var>, <var class="Fa" style="white-space: nowrap;">int
- checkctty</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">postsig</code>(<var class="Fa" style="white-space: nowrap;">int
- sig</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sigexit</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- signum</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">siginit</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">signotify</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">trapsignal</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">int
- sig</var>, <var class="Fa" style="white-space: nowrap;">u_long
- code</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#SIGADDSET"><code class="Fn" id="SIGADDSET">SIGADDSET</code></a>()
- macro adds <var class="Fa">signo</var> to <var class="Fa">set</var>. No
- effort is made to ensure that <var class="Fa">signo</var> is a valid signal
- number.</p>
-<p class="Pp" id="SIGDELSET">The
- <a class="permalink" href="#SIGDELSET"><code class="Fn">SIGDELSET</code></a>()
- macro removes <var class="Fa">signo</var> from <var class="Fa">set</var>. No
- effort is made to ensure that <var class="Fa">signo</var> is a valid signal
- number.</p>
-<p class="Pp" id="SIGEMPTYSET">The
- <a class="permalink" href="#SIGEMPTYSET"><code class="Fn">SIGEMPTYSET</code></a>()
- macro clears all signals in <var class="Fa">set</var>.</p>
-<p class="Pp" id="SIGFILLSET">The
- <a class="permalink" href="#SIGFILLSET"><code class="Fn">SIGFILLSET</code></a>()
- macro sets all signals in <var class="Fa">set</var>.</p>
-<p class="Pp" id="SIGISMEMBER">The
- <a class="permalink" href="#SIGISMEMBER"><code class="Fn">SIGISMEMBER</code></a>()
- macro determines if <var class="Fa">signo</var> is set in
- <var class="Fa">set</var>.</p>
-<p class="Pp" id="SIGISEMPTY">The
- <a class="permalink" href="#SIGISEMPTY"><code class="Fn">SIGISEMPTY</code></a>()
- macro determines if <var class="Fa">set</var> does not have any signals
- set.</p>
-<p class="Pp" id="SIGNOTEMPTY">The
- <a class="permalink" href="#SIGNOTEMPTY"><code class="Fn">SIGNOTEMPTY</code></a>()
- macro determines if <var class="Fa">set</var> has any signals set.</p>
-<p class="Pp" id="SIGSETEQ">The
- <a class="permalink" href="#SIGSETEQ"><code class="Fn">SIGSETEQ</code></a>()
- macro determines if two signal sets are equal; that is, the same signals are
- set in both.</p>
-<p class="Pp" id="SIGSETNEQ">The
- <a class="permalink" href="#SIGSETNEQ"><code class="Fn">SIGSETNEQ</code></a>()
- macro determines if two signal sets differ; that is, if any signal set in
- one is not set in the other.</p>
-<p class="Pp" id="SIGSETOR">The
- <a class="permalink" href="#SIGSETOR"><code class="Fn">SIGSETOR</code></a>()
- macro ORs the signals set in <var class="Fa">set2</var> into
- <var class="Fa">set1</var>.</p>
-<p class="Pp" id="SIGSETAND">The
- <a class="permalink" href="#SIGSETAND"><code class="Fn">SIGSETAND</code></a>()
- macro ANDs the signals set in <var class="Fa">set2</var> into
- <var class="Fa">set1</var>.</p>
-<p class="Pp" id="SIGSETNAND">The
- <a class="permalink" href="#SIGSETNAND"><code class="Fn">SIGSETNAND</code></a>()
- macro NANDs the signals set in <var class="Fa">set2</var> into
- <var class="Fa">set1</var>.</p>
-<p class="Pp" id="SIG_CANTMASK">The
- <a class="permalink" href="#SIG_CANTMASK"><code class="Fn">SIG_CANTMASK</code></a>()
- macro clears the <code class="Dv">SIGKILL</code> and
- <code class="Dv">SIGSTOP</code> signals from <var class="Fa">set</var>.
- These two signals cannot be blocked or caught and
- <code class="Fn">SIG_CANTMASK</code>() is used in code where signals are
- manipulated to ensure this policy is enforced.</p>
-<p class="Pp" id="SIG_STOPSIGMASK">The
- <a class="permalink" href="#SIG_STOPSIGMASK"><code class="Fn">SIG_STOPSIGMASK</code></a>()
- macro clears the <code class="Dv">SIGSTOP</code>,
- <code class="Dv">SIGTSTP</code>, <code class="Dv">SIGTTIN</code>, and
- <code class="Dv">SIGTTOU</code> signals from <var class="Fa">set</var>.
- <code class="Fn">SIG_STOPSIGMASK</code>() is used to clear stop signals when
- a process is waiting for a child to exit or exec, and when a process is
- continuing after having been suspended.</p>
-<p class="Pp" id="SIG_CONTSIGMASK">The
- <a class="permalink" href="#SIG_CONTSIGMASK"><code class="Fn">SIG_CONTSIGMASK</code></a>()
- macro clears the <code class="Dv">SIGCONT</code> signal from
- <var class="Fa">set</var>. <code class="Fn">SIG_CONTSIGMASK</code>() is
- called when a process is stopped.</p>
-<p class="Pp" id="SIGPENDING">The
- <a class="permalink" href="#SIGPENDING"><code class="Fn">SIGPENDING</code></a>()
- macro determines if the given process has any pending signals that are not
- masked. If the process has a pending signal and the process is currently
- being traced, <code class="Fn">SIGPENDING</code>() will return true even if
- the signal is masked.</p>
-<p class="Pp" id="cursig">The
- <a class="permalink" href="#cursig"><code class="Fn">cursig</code></a>()
- function returns the signal number that should be delivered to process
- <var class="Fa">td-&gt;td_proc</var>. If there are no signals pending, zero
- is returned.</p>
-<p class="Pp" id="execsigs">The
- <a class="permalink" href="#execsigs"><code class="Fn">execsigs</code></a>()
- function resets the signal set and signal stack of a process in preparation
- for an <a class="Xr">execve(2)</a>. The process lock for
- <var class="Fa">p</var> must be held before
- <code class="Fn">execsigs</code>() is called.</p>
-<p class="Pp" id="issignal">The
- <a class="permalink" href="#issignal"><code class="Fn">issignal</code></a>()
- function determines if there are any pending signals for process
- <var class="Fa">td-&gt;td_proc</var> that should be caught, or cause this
- process to terminate or interrupt its current system call. If process
- <var class="Fa">td-&gt;td_proc</var> is currently being traced, ignored
- signals will be handled and the process is always stopped. Stop signals are
- handled and cleared right away by <code class="Fn">issignal</code>() unless
- the process is a member of an orphaned process group and the stop signal
- originated from a TTY. The process spin lock for
- <var class="Fa">td-&gt;td_proc</var> may be acquired and released. The
- <var class="Vt">sigacts</var> structure
- <var class="Fa">td-&gt;td_proc-&gt;p_sigacts</var> must be locked before
- calling <code class="Fn">issignal</code>() and may be released and
- reacquired during the call. The process lock for
- <var class="Fa">td-&gt;td_proc</var> must be acquired before calling
- <code class="Fn">issignal</code>() and may be released and reacquired during
- the call. Default signal actions are not taken for system processes and
- init.</p>
-<p class="Pp" id="killproc">The
- <a class="permalink" href="#killproc"><code class="Fn">killproc</code></a>()
- function delivers <code class="Dv">SIGKILL</code> to
- <var class="Fa">p</var>. <var class="Fa">why</var> is logged as the reason
- <a class="permalink" href="#why"><i class="Em" id="why">why</i></a> the
- process was killed.</p>
-<p class="Pp" id="pgsigio">The
- <a class="permalink" href="#pgsigio"><code class="Fn">pgsigio</code></a>()
- function sends the signal <var class="Fa">sig</var> to the process or
- process group <var class="Fa">sigiop-&gt;sio_pgid</var>. If
- <var class="Fa">checkctty</var> is non-zero, the signal is only delivered to
- processes in the process group that have a controlling terminal. If
- <var class="Fa">sigiop-&gt;sio_pgid</var> is for a process (&gt; 0), the
- lock for <var class="Fa">sigiop-&gt;sio_proc</var> is acquired and released.
- If <var class="Fa">sigiop-&gt;sio_pgid</var> is for a process group (&lt;
- 0), the process group lock for <var class="Fa">sigiop-&gt;sio_pgrp</var> is
- acquired and released. The lock <var class="Va">sigio_lock</var> is acquired
- and released.</p>
-<p class="Pp" id="postsig">The
- <a class="permalink" href="#postsig"><code class="Fn">postsig</code></a>()
- function handles the actual delivery of the signal
- <var class="Fa">sig</var>. <code class="Fn">postsig</code>() is called from
- <code class="Fn">ast</code>() after the kernel has been notified that a
- signal should be delivered (via a call to
- <code class="Fn">signotify</code>(), which causes the flag
- <code class="Dv">PS_NEEDSIGCHK</code> to be set). The process lock for
- process that owns <var class="Va">curthread</var> must be held before
- <code class="Fn">postsig</code>() is called, and the current process cannot
- be 0. The lock for the <var class="Va">p_sigacts</var> field of the current
- process must be held before <code class="Fn">postsig</code>() is called, and
- may be released and reacquired.</p>
-<p class="Pp" id="sigexit">The
- <a class="permalink" href="#sigexit"><code class="Fn">sigexit</code></a>()
- function causes the process that owns <var class="Fa">td</var> to exit with
- a return value of signal number <var class="Fa">sig</var>. If required, the
- process will dump core. The process lock for the process that owns
- <var class="Fa">td</var> must be held before
- <code class="Fn">sigexit</code>() is called.</p>
-<p class="Pp" id="siginit">The
- <a class="permalink" href="#siginit"><code class="Fn">siginit</code></a>()
- function is called during system initialization to cause every signal with a
- default property of <code class="Dv">SA_IGNORE</code> (except
- <code class="Dv">SIGCONT</code>) to be ignored by <var class="Fa">p</var>.
- The process lock for <var class="Fa">p</var> is acquired and released, as is
- the lock for sigacts structure <var class="Fa">p-&gt;p_sigacts</var>. The
- only process that <code class="Fn">siginit</code>() is ever called for is
- <var class="Va">proc0</var>.</p>
-<p class="Pp" id="signotify">The
- <a class="permalink" href="#signotify"><code class="Fn">signotify</code></a>()
- function flags that there are unmasked signals pending that
- <a class="permalink" href="#ast"><code class="Fn" id="ast">ast</code></a>()
- should handle. The process lock for process
- <var class="Fa">td-&gt;td_proc</var> must be held before
- <code class="Fn">signotify</code>() is called, and the thread lock is
- acquired and released.</p>
-<p class="Pp" id="trapsignal">The
- <a class="permalink" href="#trapsignal"><code class="Fn">trapsignal</code></a>()
- function sends a signal that is the result of a trap to process
- <var class="Fa">td-&gt;td_proc</var>. If the process is not being traced and
- the signal can be delivered immediately,
- <code class="Fn">trapsignal</code>() will deliver it directly; otherwise,
- <code class="Fn">trapsignal</code>() will call <a class="Xr">psignal(9)</a>
- to cause the signal to be delivered. The process lock for
- <var class="Fa">td-&gt;td_proc</var> is acquired and released. The lock for
- the <var class="Va">p_sigacts</var> field of
- <var class="Fa">td-&gt;td_proc</var> is acquired and released.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">SIGISMEMBER</code>(),
- <code class="Fn">SIGISEMPTY</code>(), <code class="Fn">SIGNOTEMPTY</code>(),
- <code class="Fn">SIGSETEQ</code>(), <code class="Fn">SIGSETNEQ</code>(), and
- <code class="Fn">SIGPENDING</code>() macros all return non-zero (true) if
- the condition they are checking is found to be true; otherwise, zero (false)
- is returned.</p>
-<p class="Pp">The <code class="Fn">cursig</code>() function returns either a
- valid signal number or zero.</p>
-<p class="Pp"><code class="Fn">issignal</code>() returns either a valid signal
- number or zero.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pgsignal(9)</a>, <a class="Xr">psignal(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 14, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sleep.9 4.html b/static/freebsd/man9/sleep.9 4.html
deleted file mode 100644
index e56521f9..00000000
--- a/static/freebsd/man9/sleep.9 4.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SLEEP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SLEEP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">msleep</code>,
- <code class="Nm">msleep_sbt</code>, <code class="Nm">msleep_spin</code>,
- <code class="Nm">msleep_spin_sbt</code>, <code class="Nm">pause</code>,
- <code class="Nm">pause_sig</code>, <code class="Nm">pause_sbt</code>,
- <code class="Nm">tsleep</code>, <code class="Nm">tsleep_sbt</code>,
- <code class="Nm">wakeup</code>, <code class="Nm">wakeup_one</code>,
- <code class="Nm">wakeup_any</code> &#x2014; <span class="Nd">wait for
- events</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">msleep</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">msleep_sbt</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">msleep_spin</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">msleep_spin_sbt</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx
- *mtx</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t
- sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pause</code>(<var class="Fa" style="white-space: nowrap;">const
- char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pause_sig</code>(<var class="Fa" style="white-space: nowrap;">const
- char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">pause_sbt</code>(<var class="Fa" style="white-space: nowrap;">const
- char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t
- sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">tsleep</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">int
- priority</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">tsleep_sbt</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>, <var class="Fa" style="white-space: nowrap;">int
- priority</var>, <var class="Fa" style="white-space: nowrap;">const char
- *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t
- sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">wakeup</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">wakeup_one</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">wakeup_any</code>(<var class="Fa" style="white-space: nowrap;">const
- void *chan</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The functions
- <a class="permalink" href="#tsleep"><code class="Fn" id="tsleep">tsleep</code></a>(),
- <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(),
- <code class="Fn">pause</code>(),
- <a class="permalink" href="#pause_sig"><code class="Fn" id="pause_sig">pause_sig</code></a>(),
- <code class="Fn">pause_sbt</code>(), <code class="Fn">wakeup</code>(),
- <code class="Fn">wakeup_one</code>(), and
- <code class="Fn">wakeup_any</code>() handle event-based thread blocking. If
- a thread must wait for an external event, it is put to sleep by
- <code class="Fn">tsleep</code>(), <code class="Fn">msleep</code>(),
- <code class="Fn">msleep_spin</code>(), <code class="Fn">pause</code>(),
- <code class="Fn">pause_sig</code>(), or <code class="Fn">pause_sbt</code>().
- Threads may also wait using one of the locking primitive sleep routines
- <a class="Xr">mtx_sleep(9)</a>, <a class="Xr">rw_sleep(9)</a>, or
- <a class="Xr">sx_sleep(9)</a>.</p>
-<p class="Pp" id="wakeup">The parameter <var class="Fa">chan</var> is an
- arbitrary address that uniquely identifies the event on which the thread is
- being put to sleep. All threads sleeping on a single
- <var class="Fa">chan</var> are woken up later by
- <a class="permalink" href="#wakeup"><code class="Fn">wakeup</code></a>(),
- often called from inside an interrupt routine, to indicate that the resource
- the thread was blocking on is available now.</p>
-<p class="Pp">The parameter <var class="Fa">priority</var> specifies a new
- priority for the thread as well as some optional flags. If the new priority
- is not 0, then the thread will be made runnable with the specified
- <var class="Fa">priority</var> when it resumes.
- <code class="Dv">PZERO</code> should never be used, as it is for
- compatibility only. A new priority of 0 means to use the thread's current
- priority when it is made runnable again.</p>
-<p class="Pp">If <var class="Fa">priority</var> includes the
- <code class="Dv">PCATCH</code> flag, pending signals are allowed to
- interrupt the sleep, otherwise pending signals are ignored during the sleep.
- If <code class="Dv">PCATCH</code> is set and a signal becomes pending,
- <code class="Er">ERESTART</code> is returned if the current system call
- should be restarted if possible, and <code class="Er">EINTR</code> is
- returned if the system call should be interrupted by the signal (return
- <code class="Er">EINTR</code>).</p>
-<p class="Pp">The parameter <var class="Fa">wmesg</var> is a string describing
- the sleep condition for tools like <a class="Xr">ps(1)</a>. Due to the
- limited space of those programs to display arbitrary strings, this message
- should not be longer than 6 characters.</p>
-<p class="Pp">The parameter <var class="Fa">timo</var> specifies a timeout for
- the sleep. If <var class="Fa">timo</var> is not 0, then the thread will
- sleep for at most <var class="Fa">timo</var> <span class="No">/</span>
- <var class="Va">hz</var> seconds. If the timeout expires, then the sleep
- function will return <code class="Er">EWOULDBLOCK</code>.</p>
-<p class="Pp" id="msleep_sbt"><a class="permalink" href="#msleep_sbt"><code class="Fn">msleep_sbt</code></a>(),
- <a class="permalink" href="#msleep_spin_sbt"><code class="Fn" id="msleep_spin_sbt">msleep_spin_sbt</code></a>(),
- <a class="permalink" href="#pause_sbt"><code class="Fn" id="pause_sbt">pause_sbt</code></a>()
- and
- <a class="permalink" href="#tsleep_sbt"><code class="Fn" id="tsleep_sbt">tsleep_sbt</code></a>()
- functions take <var class="Fa">sbt</var> parameter instead of
- <var class="Fa">timo</var>. It allows the caller to specify relative or
- absolute wakeup time with higher resolution in form of
- <var class="Vt">sbintime_t</var>. The parameter <var class="Fa">pr</var>
- allows the caller to specify wanted absolute event precision. The parameter
- <var class="Fa">flags</var> allows the caller to pass additional
- <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>()
- flags.</p>
-<p class="Pp" id="msleep">Several of the sleep functions including
- <a class="permalink" href="#msleep"><code class="Fn">msleep</code></a>(),
- <code class="Fn">msleep_spin</code>(), and the locking primitive sleep
- routines specify an additional lock parameter. The lock will be released
- before sleeping and reacquired before the sleep routine returns. If
- <var class="Fa">priority</var> includes the <code class="Dv">PDROP</code>
- flag, then the lock will not be reacquired before returning. The lock is
- used to ensure that a condition can be checked atomically, and that the
- current thread can be suspended without missing a change to the condition,
- or an associated wakeup. In addition, all of the sleep routines will fully
- drop the <var class="Va">Giant</var> mutex (even if recursed) while the
- thread is suspended and will reacquire the <var class="Va">Giant</var> mutex
- before the function returns. Note that the <var class="Va">Giant</var> mutex
- may be specified as the lock to drop. In that case, however, the
- <code class="Dv">PDROP</code> flag is not allowed.</p>
-<p class="Pp" id="tsleep~2">To avoid lost wakeups, either a lock should be used
- to protect against races, or a timeout should be specified to place an upper
- bound on the delay due to a lost wakeup. As a result, the
- <a class="permalink" href="#tsleep~2"><code class="Fn">tsleep</code></a>()
- function should only be invoked with a timeout of 0 when the
- <var class="Va">Giant</var> mutex is held.</p>
-<p class="Pp" id="msleep~2">The
- <a class="permalink" href="#msleep~2"><code class="Fn">msleep</code></a>()
- function requires that <var class="Fa">mtx</var> reference a default, i.e.
- non-spin, mutex. Its use is deprecated in favor of
- <a class="Xr">mtx_sleep(9)</a> which provides identical behavior.</p>
-<p class="Pp" id="msleep_spin">The
- <a class="permalink" href="#msleep_spin"><code class="Fn">msleep_spin</code></a>()
- function requires that <var class="Fa">mtx</var> reference a spin mutex. The
- <code class="Fn">msleep_spin</code>() function does not accept a
- <var class="Fa">priority</var> parameter and thus does not support changing
- the current thread's priority, the <code class="Dv">PDROP</code> flag, or
- catching signals via the <code class="Dv">PCATCH</code> flag.</p>
-<p class="Pp" id="pause">The
- <a class="permalink" href="#pause"><code class="Fn">pause</code></a>()
- function is a wrapper around <code class="Fn">tsleep</code>() that suspends
- execution of the current thread for the indicated timeout. The thread can
- not be awakened early by signals or calls to
- <code class="Fn">wakeup</code>(), <code class="Fn">wakeup_one</code>() or
- <code class="Fn">wakeup_any</code>(). The
- <code class="Fn">pause_sig</code>() function is a variant of
- <code class="Fn">pause</code>() which can be awakened early by signals.</p>
-<p class="Pp" id="wakeup_one">The
- <a class="permalink" href="#wakeup_one"><code class="Fn">wakeup_one</code></a>()
- function makes the first highest priority thread in the queue that is
- sleeping on the parameter <var class="Fa">chan</var> runnable. This reduces
- the load when a large number of threads are sleeping on the same address,
- but only one of them can actually do any useful work when made runnable.</p>
-<p class="Pp" id="wakeup_one~2">Due to the way it works, the
- <a class="permalink" href="#wakeup_one~2"><code class="Fn">wakeup_one</code></a>()
- function requires that only related threads sleep on a specific
- <var class="Fa">chan</var> address. It is the programmer's responsibility to
- choose a unique <var class="Fa">chan</var> value. The older
- <code class="Fn">wakeup</code>() function did not require this, though it
- was never good practice for threads to share a <var class="Fa">chan</var>
- value. When converting from <code class="Fn">wakeup</code>() to
- <code class="Fn">wakeup_one</code>(), pay particular attention to ensure
- that no other threads wait on the same <var class="Fa">chan</var>.</p>
-<p class="Pp" id="wakeup_any">The
- <a class="permalink" href="#wakeup_any"><code class="Fn">wakeup_any</code></a>()
- function is similar to <code class="Fn">wakeup_one</code>(), except that it
- makes runnable last thread on the queue (sleeping less), ignoring fairness.
- It can be used when threads sleeping on the <var class="Fa">chan</var> are
- known to be identical and there is no reason to be fair.</p>
-<p class="Pp">If the timeout given by <var class="Fa">timo</var> or
- <var class="Fa">sbt</var> is based on an absolute real-time clock value,
- then the thread should copy the global <var class="Va">rtc_generation</var>
- into its <var class="Va">td_rtcgen</var> member before reading the RTC. If
- the real-time clock is adjusted, these functions will set
- <var class="Va">td_rtcgen</var> to zero and return zero. The caller should
- reconsider its orientation with the new RTC value.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">When awakened by a call to <code class="Fn">wakeup</code>() or
- <code class="Fn">wakeup_one</code>(), if a signal is pending and
- <code class="Dv">PCATCH</code> is specified, a non-zero error code is
- returned. If the thread is awakened by a call to
- <code class="Fn">wakeup</code>() or <code class="Fn">wakeup_one</code>(),
- the <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(),
- <code class="Fn">tsleep</code>(), and locking primitive sleep functions
- return 0. Zero can also be returned when the real-time clock is adjusted;
- see above regarding <var class="Va">td_rtcgen</var>. Otherwise, a non-zero
- error code is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">msleep</code>(),
- <code class="Fn">msleep_spin</code>(), <code class="Fn">tsleep</code>(), and
- the locking primitive sleep functions will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt>
- <dd>The <code class="Dv">PCATCH</code> flag was specified, a signal was
- caught, and the system call should be interrupted.</dd>
- <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt>
- <dd>The <code class="Dv">PCATCH</code> flag was specified, a signal was
- caught, and the system call should be restarted.</dd>
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>A non-zero timeout was specified and the timeout expired.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ps(1)</a>, <a class="Xr">callout(9)</a>,
- <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">mi_switch(9)</a>, <a class="Xr">mtx_sleep(9)</a>,
- <a class="Xr">rw_sleep(9)</a>, <a class="Xr">sx_sleep(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The functions <code class="Fn">sleep</code>() and
- <code class="Fn">wakeup</code>() were present in
- <span class="Ux">Version&#x00A0;1 AT&amp;T UNIX</span>. They were probably
- also present in the preceding PDP-7 version of <span class="Ux">UNIX</span>.
- They were the basic process synchronization model.</p>
-<p class="Pp">The <code class="Fn">tsleep</code>() function appeared in
- <span class="Ux">4.4BSD</span> and added the parameters
- <var class="Fa">wmesg</var> and <var class="Fa">timo</var>. The
- <code class="Fn">sleep</code>() function was removed in
- <span class="Ux">FreeBSD 2.2</span>. The
- <code class="Fn">wakeup_one</code>() function appeared in
- <span class="Ux">FreeBSD 2.2</span>. The <code class="Fn">msleep</code>()
- function appeared in <span class="Ux">FreeBSD 5.0</span>, and the
- <code class="Fn">msleep_spin</code>() function appeared in
- <span class="Ux">FreeBSD 6.2</span>. The <code class="Fn">pause</code>()
- function appeared in <span class="Ux">FreeBSD 7.0</span>. The
- <code class="Fn">pause_sig</code>() function appeared in
- <span class="Ux">FreeBSD 12.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">J&#x00F6;rg
- Wunsch</span>
- &lt;<a class="Mt" href="mailto:joerg@FreeBSD.org">joerg@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 19, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sleepqueue.9 4.html b/static/freebsd/man9/sleepqueue.9 4.html
deleted file mode 100644
index bb93c74b..00000000
--- a/static/freebsd/man9/sleepqueue.9 4.html
+++ /dev/null
@@ -1,326 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SLEEPQUEUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SLEEPQUEUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">init_sleepqueues</code>,
- <code class="Nm">sleepq_abort</code>, <code class="Nm">sleepq_add</code>,
- <code class="Nm">sleepq_alloc</code>,
- <code class="Nm">sleepq_broadcast</code>,
- <code class="Nm">sleepq_free</code>, <code class="Nm">sleepq_lock</code>,
- <code class="Nm">sleepq_lookup</code>,
- <code class="Nm">sleepq_release</code>,
- <code class="Nm">sleepq_remove</code>,
- <code class="Nm">sleepq_signal</code>,
- <code class="Nm">sleepq_set_timeout</code>,
- <code class="Nm">sleepq_set_timeout_sbt</code>,
- <code class="Nm">sleepq_sleepcnt</code>,
- <code class="Nm">sleepq_timedwait</code>,
- <code class="Nm">sleepq_timedwait_sig</code>,
- <code class="Nm">sleepq_type</code>, <code class="Nm">sleepq_wait</code>,
- <code class="Nm">sleepq_wait_sig</code> &#x2014; <span class="Nd">manage the
- queues of sleeping threads</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/sleepqueue.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">init_sleepqueues</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_abort</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_add</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">struct
- lock_object *lock</var>, <var class="Fa" style="white-space: nowrap;">const
- char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">int
- queue</var>);</p>
-<p class="Pp"><var class="Ft">struct sleepqueue *</var>
- <br/>
- <code class="Fn">sleepq_alloc</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_broadcast</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>,
- <var class="Fa" style="white-space: nowrap;">int queue</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- sleepqueue *sq</var>);</p>
-<p class="Pp"><var class="Ft">struct sleepqueue *</var>
- <br/>
- <code class="Fn">sleepq_lookup</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_lock</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_release</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_remove</code>(<var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>, <var class="Fa" style="white-space: nowrap;">const void
- *wchan</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_signal</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>,
- <var class="Fa" style="white-space: nowrap;">int queue</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_set_timeout</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- timo</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_set_timeout_sbt</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t
- sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">u_int</var>
- <br/>
- <code class="Fn">sleepq_sleepcnt</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- queue</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_timedwait</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- pri</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_timedwait_sig</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- pri</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_type</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sleepq_wait</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- pri</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sleepq_wait_sig</code>(<var class="Fa" style="white-space: nowrap;">const
- void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int
- pri</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Sleep queues provide a mechanism for suspending execution of a
- thread until some condition is met. Each queue is associated with a specific
- wait channel when it is active, and only one queue may be associated with a
- wait channel at any given point in time. The implementation of each wait
- channel splits its sleepqueue into 2 sub-queues in order to enable some
- optimizations on threads' wakeups. An active queue holds a list of threads
- that are blocked on the associated wait channel. Threads that are not
- blocked on a wait channel have an associated inactive sleep queue. When a
- thread blocks on a wait channel it donates its inactive sleep queue to the
- wait channel. When a thread is resumed, the wait channel that it was blocked
- on gives it an inactive sleep queue for later use.</p>
-<p class="Pp" id="sleepq_alloc">The
- <a class="permalink" href="#sleepq_alloc"><code class="Fn">sleepq_alloc</code></a>()
- function allocates an inactive sleep queue and is used to assign a sleep
- queue to a thread during thread creation. The
- <a class="permalink" href="#sleepq_free"><code class="Fn" id="sleepq_free">sleepq_free</code></a>()
- function frees the resources associated with an inactive sleep queue and is
- used to free a queue during thread destruction.</p>
-<p class="Pp" id="init_sleepqueues">Active sleep queues are stored in a hash
- table hashed on the addresses pointed to by wait channels. Each bucket in
- the hash table contains a sleep queue chain. A sleep queue chain contains a
- spin mutex and a list of sleep queues that hash to that specific chain.
- Active sleep queues are protected by their chain's spin mutex. The
- <a class="permalink" href="#init_sleepqueues"><code class="Fn">init_sleepqueues</code></a>()
- function initializes the hash table of sleep queue chains.</p>
-<p class="Pp" id="sleepq_lock">The
- <a class="permalink" href="#sleepq_lock"><code class="Fn">sleepq_lock</code></a>()
- function locks the sleep queue chain associated with wait channel
- <var class="Fa">wchan</var>.</p>
-<p class="Pp" id="sleepq_lookup">The
- <a class="permalink" href="#sleepq_lookup"><code class="Fn">sleepq_lookup</code></a>()
- returns a pointer to the currently active sleep queue for that wait channel
- associated with <var class="Fa">wchan</var> or <code class="Dv">NULL</code>
- if there is no active sleep queue associated with argument
- <var class="Fa">wchan</var>. It requires the sleep queue chain associated
- with <var class="Fa">wchan</var> to have been locked by a prior call to
- <code class="Fn">sleepq_lock</code>().</p>
-<p class="Pp" id="sleepq_release">The
- <a class="permalink" href="#sleepq_release"><code class="Fn">sleepq_release</code></a>()
- function unlocks the sleep queue chain associated with
- <a class="permalink" href="#wchan"><code class="Fn" id="wchan">wchan</code></a>()
- and is primarily useful when aborting a pending sleep request before one of
- the wait functions is called.</p>
-<p class="Pp" id="sleepq_add">The
- <a class="permalink" href="#sleepq_add"><code class="Fn">sleepq_add</code></a>()
- function places the current thread on the sleep queue associated with the
- wait channel <var class="Fa">wchan</var>. The sleep queue chain associated
- with argument <var class="Fa">wchan</var> must be locked by a prior call to
- <code class="Fn">sleepq_lock</code>() when this function is called. If a
- lock is specified via the <var class="Fa">lock</var> argument, and if the
- kernel was compiled with <code class="Cd">options INVARIANTS</code>, then
- the sleep queue code will perform extra checks to ensure that the lock is
- used by all threads sleeping on <var class="Fa">wchan</var>. The
- <var class="Fa">wmesg</var> parameter should be a short description of
- <var class="Fa">wchan</var>. The <var class="Fa">flags</var> parameter is a
- bitmask consisting of the type of sleep queue being slept on and zero or
- more optional flags. The <var class="Fa">queue</var> parameter specifies the
- sub-queue, in which the contending thread will be inserted.</p>
-<p class="Pp">There are currently three types of sleep queues:</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt id="SLEEPQ_CONDVAR"><a class="permalink" href="#SLEEPQ_CONDVAR"><code class="Dv">SLEEPQ_CONDVAR</code></a></dt>
- <dd>A sleep queue used to implement condition variables.</dd>
- <dt id="SLEEPQ_SLEEP"><a class="permalink" href="#SLEEPQ_SLEEP"><code class="Dv">SLEEPQ_SLEEP</code></a></dt>
- <dd>A sleep queue used to implement <a class="Xr">sleep(9)</a>,
- <a class="Xr">wakeup(9)</a> and <a class="Xr">wakeup_one(9)</a>.</dd>
- <dt id="SLEEPQ_PAUSE"><a class="permalink" href="#SLEEPQ_PAUSE"><code class="Dv">SLEEPQ_PAUSE</code></a></dt>
- <dd>A sleep queue used to implement <a class="Xr">pause(9)</a>.</dd>
-</dl>
-<p class="Pp">There are currently two optional flag:</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt id="SLEEPQ_INTERRUPTIBLE"><a class="permalink" href="#SLEEPQ_INTERRUPTIBLE"><code class="Dv">SLEEPQ_INTERRUPTIBLE</code></a></dt>
- <dd>The current thread is entering an interruptible sleep.</dd>
-</dl>
-<dl class="Bl-tag Bl-compact">
- <dt id="SLEEPQ_STOP_ON_BDRY"><a class="permalink" href="#SLEEPQ_STOP_ON_BDRY"><code class="Dv">SLEEPQ_STOP_ON_BDRY</code></a></dt>
- <dd>When thread is entering an interruptible sleep, do not stop it upon
- arrival of stop action, like <code class="Dv">SIGSTOP</code>. Wake it up
- instead.</dd>
-</dl>
-<p class="Pp" id="sleepq_set_timeout">A timeout on the sleep may be specified by
- calling
- <a class="permalink" href="#sleepq_set_timeout"><code class="Fn">sleepq_set_timeout</code></a>()
- after <code class="Fn">sleepq_add</code>(). The <var class="Fa">wchan</var>
- parameter should be the same value from the preceding call to
- <code class="Fn">sleepq_add</code>(), and the sleep queue chain associated
- with <var class="Fa">wchan</var> must have been locked by a prior call to
- <code class="Fn">sleepq_lock</code>(). The <var class="Fa">timo</var>
- parameter should specify the timeout value in ticks.</p>
-<p class="Pp" id="sleepq_set_timeout_sbt"><a class="permalink" href="#sleepq_set_timeout_sbt"><code class="Fn">sleepq_set_timeout_sbt</code></a>()
- function takes <var class="Fa">sbt</var> argument instead of
- <var class="Fa">timo</var>. It allows to specify relative or absolute wakeup
- time with higher resolution in form of <var class="Vt">sbintime_t</var>. The
- parameter <var class="Fa">pr</var> allows to specify wanted absolute event
- precision. The parameter <var class="Fa">flags</var> allows to pass
- additional
- <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>()
- flags.</p>
-<p class="Pp" id="sleepq_wait">Once the thread is ready to suspend, one of the
- wait functions is called to put the current thread to sleep until it is
- awakened and to context switch to another thread. The
- <a class="permalink" href="#sleepq_wait"><code class="Fn">sleepq_wait</code></a>()
- function is used for non-interruptible sleeps that do not have a timeout.
- The
- <a class="permalink" href="#sleepq_timedwait"><code class="Fn" id="sleepq_timedwait">sleepq_timedwait</code></a>()
- function is used for non-interruptible sleeps that have had a timeout set
- via <code class="Fn">sleepq_set_timeout</code>(). The
- <a class="permalink" href="#sleepq_wait_sig"><code class="Fn" id="sleepq_wait_sig">sleepq_wait_sig</code></a>()
- function is used for interruptible sleeps that do not have a timeout. The
- <a class="permalink" href="#sleepq_timedwait_sig"><code class="Fn" id="sleepq_timedwait_sig">sleepq_timedwait_sig</code></a>()
- function is used for interruptible sleeps that do have a timeout set. The
- <var class="Fa">wchan</var> argument to all of the wait functions is the
- wait channel being slept on. The sleep queue chain associated with argument
- <var class="Fa">wchan</var> needs to have been locked with a prior call to
- <code class="Fn">sleepq_lock</code>(). The <var class="Fa">pri</var>
- argument is used to set the priority of the thread when it is awakened. If
- it is set to zero, the thread's priority is left alone.</p>
-<p class="Pp">When the thread is resumed, the wait functions return a non-zero
- value if the thread was awakened due to an interrupt other than a signal or
- a timeout. If the sleep timed out, then <code class="Er">EWOULDBLOCK</code>
- is returned. If the sleep was interrupted by something other than a signal,
- then some other return value will be returned.</p>
-<p class="Pp" id="sleepq_broadcast">A sleeping thread is normally resumed by the
- <a class="permalink" href="#sleepq_broadcast"><code class="Fn">sleepq_broadcast</code></a>()
- and
- <a class="permalink" href="#sleepq_signal"><code class="Fn" id="sleepq_signal">sleepq_signal</code></a>()
- functions. The <code class="Fn">sleepq_signal</code>() function awakens the
- highest priority thread sleeping on a wait channel (if SLEEPQ_UNFAIR flag is
- set, thread that went to sleep recently) while
- <code class="Fn">sleepq_broadcast</code>() awakens all of the threads
- sleeping on a wait channel. The <var class="Fa">wchan</var> argument
- specifics which wait channel to awaken. The <var class="Fa">flags</var>
- argument must match the sleep queue type contained in the
- <var class="Fa">flags</var> argument passed to
- <code class="Fn">sleepq_add</code>() by the threads sleeping on the wait
- channel. If the <var class="Fa">pri</var> argument does not equal -1, then
- each thread that is awakened will have its priority raised to
- <var class="Fa">pri</var> if it has a lower priority. The sleep queue chain
- associated with argument <var class="Fa">wchan</var> must be locked by a
- prior call to <code class="Fn">sleepq_lock</code>() before calling any of
- these functions. The <var class="Fa">queue</var> argument specifies the
- sub-queue, from which threads need to be woken up.</p>
-<p class="Pp" id="sleepq_abort">A thread in an interruptible sleep can be
- interrupted by another thread via the
- <a class="permalink" href="#sleepq_abort"><code class="Fn">sleepq_abort</code></a>()
- function. The <var class="Fa">td</var> argument specifies the thread to
- interrupt. An individual thread can also be awakened from sleeping on a
- specific wait channel via the
- <a class="permalink" href="#sleepq_remove"><code class="Fn" id="sleepq_remove">sleepq_remove</code></a>()
- function. The <var class="Fa">td</var> argument specifies the thread to
- awaken and the <var class="Fa">wchan</var> argument specifies the wait
- channel to awaken it from. If the thread <var class="Fa">td</var> is not
- blocked on the wait channel <var class="Fa">wchan</var> then this function
- will not do anything, even if the thread is asleep on a different wait
- channel. This function should only be used if one of the other functions
- above is not sufficient. One possible use is waking up a specific thread
- from a widely shared sleep channel.</p>
-<p class="Pp" id="sleepq_sleepcnt">The
- <a class="permalink" href="#sleepq_sleepcnt"><code class="Fn">sleepq_sleepcnt</code></a>()
- function offer a simple way to retrieve the number of threads sleeping for
- the specified <var class="Fa">queue</var>, given a
- <var class="Fa">wchan</var>.</p>
-<p class="Pp" id="sleepq_type">The
- <a class="permalink" href="#sleepq_type"><code class="Fn">sleepq_type</code></a>()
- function returns the type of <var class="Fa">wchan</var> associated to a
- sleepqueue.</p>
-<p class="Pp" id="sleepq_abort~2">The
- <a class="permalink" href="#sleepq_abort~2"><code class="Fn">sleepq_abort</code></a>(),
- <code class="Fn">sleepq_broadcast</code>(), and
- <code class="Fn">sleepq_signal</code>() functions all return a boolean
- value. If the return value is true, then at least one thread was resumed
- that is currently swapped out. The caller is responsible for awakening the
- scheduler process so that the resumed thread will be swapped back in. This
- is done by calling the
- <a class="permalink" href="#kick_proc0"><code class="Fn" id="kick_proc0">kick_proc0</code></a>()
- function after releasing the sleep queue chain lock via a call to
- <code class="Fn">sleepq_release</code>().</p>
-<p class="Pp">The sleep queue interface is currently used to implement the
- <a class="Xr">sleep(9)</a> and <a class="Xr">condvar(9)</a> interfaces.
- Almost all other code in the kernel should use one of those interfaces
- rather than manipulating sleep queues directly.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">condvar(9)</a>,
- <a class="Xr">runqueue(9)</a>, <a class="Xr">scheduler(9)</a>,
- <a class="Xr">sleep(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 19, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/smr.9 3.html b/static/freebsd/man9/smr.9 3.html
deleted file mode 100644
index 662b447e..00000000
--- a/static/freebsd/man9/smr.9 3.html
+++ /dev/null
@@ -1,234 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SMR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SMR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">smr</code> &#x2014; <span class="Nd">safe memory
- reclamation for lock-free data structures</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/smr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">smr_seq_t</var>
- <br/>
- <code class="Fn">smr_advance</code>(<var class="Fa">smr_t smr</var>);</p>
-<p class="Pp"><var class="Ft">smr_t</var>
- <br/>
- <code class="Fn">smr_create</code>(<var class="Fa">const char
- *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">smr_destroy</code>(<var class="Fa">smr_t smr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">smr_enter</code>(<var class="Fa">smr_t smr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">smr_exit</code>(<var class="Fa">smr_t smr</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">smr_poll</code>(<var class="Fa">smr_t smr</var>,
- <var class="Fa">smr_seq_t goal</var>, <var class="Fa">bool wait</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">smr_synchronize</code>(<var class="Fa">smr_t smr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">smr_wait</code>(<var class="Fa">smr_t smr</var>,
- <var class="Fa">smr_seq_t goal</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Safe Memory Reclamation (SMR) is a facility which enables the
- implementation of memory-safe lock-free data structures. In typical usage,
- read accesses to an SMR-protected data structure, such as a hash table or
- tree, are performed in a &#x201C;read section&#x201D; consisting of code
- bracketed by
- <a class="permalink" href="#smr_enter"><code class="Fn" id="smr_enter">smr_enter</code></a>()
- and
- <a class="permalink" href="#smr_exit"><code class="Fn" id="smr_exit">smr_exit</code></a>()
- calls, while mutations of the data structure are serialized by a traditional
- mutex such as <a class="Xr">mutex(9)</a>. In contrast with reader-writer
- locks such as <a class="Xr">rwlock(9)</a>, <a class="Xr">rmlock(9)</a>, and
- <a class="Xr">sx(9)</a>, SMR allows readers and writers to access the data
- structure concurrently. Readers can always enter a read section immediately
- (<code class="Fn">smr_enter</code>() never blocks), so mutations do not
- introduce read latency. Furthermore, <code class="Fn">smr_enter</code>() and
- <code class="Fn">smr_exit</code>() operate only on per-CPU data and thus
- avoid some of the performance problems inherent in the implementation of
- traditional reader-writer mutexes. SMR can therefore be a useful building
- block for data structures which are accessed frequently but are only rarely
- modified.</p>
-<p class="Pp">Note that any SMR-protected data structure must be implemented
- carefully such that operations behave correctly in the absence of mutual
- exclusion between readers and writers. The data structure must be designed
- to be lock-free; SMR merely facilitates the implementation, for example by
- making it safe to follow dangling pointers and by helping avoid the ABA
- problem.</p>
-<p class="Pp" id="smr_enter~2">When shared accesses to and mutations of a data
- structure can proceed concurrently, writers must take care to ensure that
- any items removed from the structure are not freed and recycled while
- readers are accessing them in parallel. This requirement results in a
- two-phase approach to the removal of items: first, the item is unlinked such
- that all pointers to the item are removed from the structure, preventing any
- new readers from observing the item. Then, the writer waits until some
- mechanism guarantees that no existing readers are still accessing the item.
- At that point the memory for that item can be freed and reused safely. SMR
- provides this mechanism: readers may access a lock-free data structure in
- between calls to the
- <a class="permalink" href="#smr_enter~2"><code class="Fn">smr_enter</code></a>()
- and
- <a class="permalink" href="#smr_exit~2"><code class="Fn" id="smr_exit~2">smr_exit</code></a>()
- functions, which together create a read section, and the
- <code class="Fn">smr_advance</code>(), <code class="Fn">smr_poll</code>(),
- <code class="Fn">smr_wait</code>(), and
- <code class="Fn">smr_synchronize</code>() functions can be used to wait for
- threads in read sections to finish. All of these functions operate on a
- <var class="Ft">smr_t</var> state block which holds both per-CPU and global
- state. Readers load global state and modify per-CPU state, while writers
- must scan all per-CPU states to detect active readers. SMR is designed to
- amortize this cost by batching to give acceptable performance in write-heavy
- workloads.</p>
-<section class="Ss">
-<h2 class="Ss" id="Readers"><a class="permalink" href="#Readers">Readers</a></h2>
-<p class="Pp">Threads enter a read section by calling
- <code class="Fn">smr_enter</code>(). Read sections should be short, and many
- operations are not permitted while in a read section. Specifically, context
- switching is disabled, and thus readers may not acquire blocking mutexes
- such as <a class="Xr">mutex(9)</a>. Another consequence of this is that the
- thread is pinned to the current CPU for the duration of the read section.
- Furthermore, read sections may not be nested: it is incorrect to call
- <code class="Fn">smr_enter</code>() with a given <var class="Ft">smr_t</var>
- state block when already in a read section for that state block.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="UMA_Integration"><a class="permalink" href="#UMA_Integration">UMA
- Integration</a></h2>
-<p class="Pp">To simplify the integration of SMR into consumers, the
- <a class="Xr">uma(9)</a> kernel memory allocator provides some SMR-specified
- facilities. This eliminates a good deal of complexity from the
- implementation of consumers and automatically batches write operations.</p>
-<p class="Pp" id="uma_zone_set_smr">In typical usage, a UMA zone (created with
- the <code class="Dv">UMA_ZONE_SMR</code> flag or initialized with the
- <a class="permalink" href="#uma_zone_set_smr"><code class="Fn">uma_zone_set_smr</code></a>()
- function) is coupled with a <var class="Ft">smr_t</var> state block. To
- insert an item into an SMR-protected data structure, memory is allocated
- from the zone using the
- <a class="permalink" href="#uma_zalloc_smr"><code class="Fn" id="uma_zalloc_smr">uma_zalloc_smr</code></a>()
- function. Insertions and removals are serialized using traditional mutual
- exclusion and items are freed using the
- <a class="permalink" href="#uma_zfree_smr"><code class="Fn" id="uma_zfree_smr">uma_zfree_smr</code></a>()
- function. Read-only lookup operations are performed in SMR read sections.
- <code class="Fn">uma_zfree_smr</code>() waits for all active readers which
- may be accessing the freed item to finish their read sections before
- recycling that item's memory.</p>
-<p class="Pp">If the zone has an associated per-item destructor, it will be
- invoked at some point when no readers can be accessing a given item. The
- destructor can be used to release additional resources associated with the
- item. Note however that there is no guarantee that the destructor will be
- invoked in a bounded time period.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Writers"><a class="permalink" href="#Writers">Writers</a></h2>
-<p class="Pp">Consumers are expected to use SMR in conjunction with UMA and thus
- need only make use of the
- <a class="permalink" href="#smr_enter~3"><code class="Fn" id="smr_enter~3">smr_enter</code></a>()
- and
- <a class="permalink" href="#smr_exit~3"><code class="Fn" id="smr_exit~3">smr_exit</code></a>()
- functions, and the SMR helper macros defined in
- <span class="Pa">sys/smr_types.h</span>. However, an introduction to the
- write-side interface of SMR can be useful.</p>
-<p class="Pp" id="smr_enter~4">Internally, SMR maintains a global
- &#x2018;<code class="Li">write sequence</code>&#x2019; number. When entering
- a read section,
- <a class="permalink" href="#smr_enter~4"><code class="Fn">smr_enter</code></a>()
- loads a copy of the write sequence and stores it in per-CPU memory, hence
- &#x2018;<code class="Li">observing</code>&#x2019; that value. To exit a read
- section, this per-CPU memory is overwritten with an invalid value, making
- the CPU inactive. Writers perform two operations: advancing the write
- sequence number, and polling all CPUs to see whether active readers have
- observed a given sequence number. These operations are performed by
- <code class="Fn">smr_advance</code>() and
- <code class="Fn">smr_poll</code>(), respectively, which do not require
- serialization between multiple writers.</p>
-<p class="Pp" id="smr_advance">After a writer unlinks an item from a data
- structure, it increments the write sequence number and tags the item with
- the new value returned by
- <a class="permalink" href="#smr_advance"><code class="Fn">smr_advance</code></a>().
- Once all CPUs have observed the new value, the writer can use
- <code class="Fn">smr_poll</code>() to deduce that no active readers have
- access to the unlinked item, and thus the item is safe to recycle. Because
- this pair of operations is relatively expensive, it is generally a good idea
- to amortize this cost by accumulating a collection of multiple unlinked
- items and tagging the entire batch with a target write sequence number.</p>
-<p class="Pp" id="smr_poll"><a class="permalink" href="#smr_poll"><code class="Fn">smr_poll</code></a>()
- is a non-blocking operation and returns true only if all active readers are
- guaranteed to have observed the target sequence number value.
- <a class="permalink" href="#smr_wait"><code class="Fn" id="smr_wait">smr_wait</code></a>()
- is a variant of <code class="Fn">smr_poll</code>() which waits until all
- CPUs have observed the target sequence number value.
- <a class="permalink" href="#smr_synchronize"><code class="Fn" id="smr_synchronize">smr_synchronize</code></a>()
- combines <code class="Fn">smr_advance</code>() with
- <code class="Fn">smr_wait</code>() to wait for all CPUs to observe a new
- write sequence number. This is an expensive operation and should only be
- used if polling cannot be deferred in some way.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Memory_Ordering"><a class="permalink" href="#Memory_Ordering">Memory
- Ordering</a></h2>
-<p class="Pp">The <code class="Fn">smr_enter</code>() function has acquire
- semantics, and the <code class="Fn">smr_exit</code>() function has release
- semantics. The <code class="Fn">smr_advance</code>(),
- <code class="Fn">smr_poll</code>(), <code class="Fn">smr_wait</code>(), and
- <code class="Fn">smr_synchronize</code>() functions should not be assumed to
- have any guarantees with respect to memory ordering. In practice, some of
- these functions have stronger ordering semantics than is stated here, but
- this is specific to the implementation and should not be relied upon. See
- <a class="Xr">atomic(9)</a> for more details.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">Outside of <span class="Ux">FreeBSD</span> the acronym SMR
- typically refers to a family of algorithms which enable memory-safe
- read-only access to a data structure concurrent with modifications to that
- data structure. Here, SMR refers to a particular algorithm belonging to this
- family, as well as its implementation in <span class="Ux">FreeBSD</span>.
- See <span class="Pa">sys/sys/smr.h</span> and
- <span class="Pa">sys/kern/subr_smr.c</span> in the
- <span class="Ux">FreeBSD</span> source tree for further details on the
- algorithm and the context.</p>
-<p class="Pp">The acronym SMR is also used to mean &quot;shingled magnetic
- recording&quot;, a technology used to store data on hard disk drives which
- requires operating system support. These two uses of the acronym are
- unrelated.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">uma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The SMR algorithm and its implementation were provided by
- <span class="An">Jeff Roberson</span>
- &lt;<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>&gt;.
- This manual page was written by
- <br/>
- <span class="An">Mark Johnston</span>
- &lt;<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 17, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/socket.9 4.html b/static/freebsd/man9/socket.9 4.html
deleted file mode 100644
index 525c16d0..00000000
--- a/static/freebsd/man9/socket.9 4.html
+++ /dev/null
@@ -1,563 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SOCKET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SOCKET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">socket</code> &#x2014; <span class="Nd">kernel
- socket interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/socket.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/socketvar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">soabort</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soaccept</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockaddr *nam</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">socheckuid</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">uid_t
- uid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sobind</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockaddr *nam</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">soclose</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soconnect</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockaddr *nam</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">socreate</code>(<var class="Fa">int dom</var>,
- <var class="Fa">struct socket **aso</var>, <var class="Fa">int type</var>,
- <var class="Fa">int proto</var>, <var class="Fa">struct ucred *cred</var>,
- <var class="Fa">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sodisconnect</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sodtor_set</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">void (*func)(struct socket *)</var>);</p>
-<p class="Pp"><var class="Ft">struct sockaddr *</var>
- <br/>
- <code class="Fn">sodupsockaddr</code>(<var class="Fa" style="white-space: nowrap;">const
- struct sockaddr *sa</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sofree</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sohasoutofband</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">solisten</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">int
- backlog</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">solisten_proto</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">int
- backlog</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">solisten_proto_check</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">struct socket *</var>
- <br/>
- <code class="Fn">sonewconn</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *head</var>, <var class="Fa" style="white-space: nowrap;">int
- connstatus</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sopoll</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">int events</var>, <var class="Fa">struct ucred
- *active_cred</var>, <var class="Fa">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sopoll_generic</code>(<var class="Fa">struct socket
- *so</var>, <var class="Fa">int events</var>, <var class="Fa">struct ucred
- *active_cred</var>, <var class="Fa">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soreceive</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">struct sockaddr **psa</var>, <var class="Fa">struct uio
- *uio</var>, <var class="Fa">struct mbuf **mp0</var>, <var class="Fa">struct
- mbuf **controlp</var>, <var class="Fa">int *flagsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soreceive_stream</code>(<var class="Fa">struct socket
- *so</var>, <var class="Fa">struct sockaddr **paddr</var>,
- <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf
- **mp0</var>, <var class="Fa">struct mbuf **controlp</var>,
- <var class="Fa">int *flagsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soreceive_dgram</code>(<var class="Fa">struct socket
- *so</var>, <var class="Fa">struct sockaddr **paddr</var>,
- <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf
- **mp0</var>, <var class="Fa">struct mbuf **controlp</var>,
- <var class="Fa">int *flagsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soreceive_generic</code>(<var class="Fa">struct socket
- *so</var>, <var class="Fa">struct sockaddr **paddr</var>,
- <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf
- **mp0</var>, <var class="Fa">struct mbuf **controlp</var>,
- <var class="Fa">int *flagsp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soreserve</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">u_long
- sndcc</var>, <var class="Fa" style="white-space: nowrap;">u_long
- rcvcc</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sorflush</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sosend</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">struct sockaddr *addr</var>, <var class="Fa">struct uio
- *uio</var>, <var class="Fa">struct mbuf *top</var>, <var class="Fa">struct
- mbuf *control</var>, <var class="Fa">int flags</var>, <var class="Fa">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sosend_dgram</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">struct sockaddr *addr</var>, <var class="Fa">struct uio
- *uio</var>, <var class="Fa">struct mbuf *top</var>, <var class="Fa">struct
- mbuf *control</var>, <var class="Fa">int flags</var>, <var class="Fa">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sosend_generic</code>(<var class="Fa">struct socket
- *so</var>, <var class="Fa">struct sockaddr *addr</var>,
- <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf
- *top</var>, <var class="Fa">struct mbuf *control</var>, <var class="Fa">int
- flags</var>, <var class="Fa">struct thread *td</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">soshutdown</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">int
- how</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sotoxsocket</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- xsocket *xso</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">soupcall_clear</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">int
- which</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">soupcall_set</code>(<var class="Fa">struct socket *so</var>,
- <var class="Fa">int which</var>, <var class="Fa">int (*func)(struct socket
- *, void *, int)</var>, <var class="Fa">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sowakeup</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockbuf *sb</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sockopt.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sosetopt</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockopt *sopt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sogetopt</code>(<var class="Fa" style="white-space: nowrap;">struct
- socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct
- sockopt *sopt</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sooptcopyin</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>,
- <var class="Fa" style="white-space: nowrap;">size_t minlen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sooptcopyout</code>(<var class="Fa" style="white-space: nowrap;">struct
- sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">const void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The kernel <code class="Nm">socket</code> programming interface
- permits in-kernel consumers to interact with local and network socket
- objects in a manner similar to that permitted using the
- <a class="Xr">socket(2)</a> user API. These interfaces are appropriate for
- use by distributed file systems and other network-aware kernel services.
- While the user API operates on file descriptors, the kernel interfaces
- operate directly on <var class="Vt">struct socket</var> pointers. Some
- portions of the kernel API exist only to implement the user API, and are not
- expected to be used by kernel code. The portions of the socket API used by
- socket consumers and implementations of network protocols will differ; some
- routines are only useful for protocol implementors.</p>
-<p class="Pp">Except where otherwise indicated, <code class="Nm">socket</code>
- functions may sleep, and are not appropriate for use in an interrupt thread
- context or while holding non-sleepable kernel locks.</p>
-<section class="Ss">
-<h2 class="Ss" id="Creating_and_Destroying_Sockets"><a class="permalink" href="#Creating_and_Destroying_Sockets">Creating
- and Destroying Sockets</a></h2>
-<p class="Pp">A new socket may be created using
- <a class="permalink" href="#socreate"><code class="Fn" id="socreate">socreate</code></a>().
- As with <a class="Xr">socket(2)</a>, arguments specify the requested domain,
- type, and protocol via <var class="Fa">dom</var>,
- <var class="Fa">type</var>, and <var class="Fa">proto</var>. The socket is
- returned via <var class="Fa">aso</var> on success. In addition, the
- credential used to authorize operations associated with the socket will be
- passed via <var class="Fa">cred</var> (and will be cached for the lifetime
- of the socket), and the thread performing the operation via
- <var class="Fa">td</var>.
- <a class="permalink" href="#Warning"><i class="Em" id="Warning">Warning</i></a>:
- authorization of the socket creation operation will be performed using the
- thread credential for some protocols (such as raw sockets).</p>
-<p class="Pp" id="soclose">Sockets may be closed and freed using
- <a class="permalink" href="#soclose"><code class="Fn">soclose</code></a>(),
- which has similar semantics to <a class="Xr">close(2)</a>.</p>
-<p class="Pp" id="soabort">In certain circumstances, it is appropriate to
- destroy a socket without waiting for it to disconnect, for which
- <a class="permalink" href="#soabort"><code class="Fn">soabort</code></a>()
- is used. This is only appropriate for incoming connections which are in a
- partially connected state. It must be called on an unreferenced socket, by
- the thread which removed the socket from its listen queue, to prevent races.
- It will call into protocol code, so no socket locks may be held over the
- call. The caller of <code class="Fn">soabort</code>() is responsible for
- setting the VNET context. The normal path to freeing a socket is
- <a class="permalink" href="#sofree"><code class="Fn" id="sofree">sofree</code></a>(),
- which handles reference counting on the socket. It should be called whenever
- a reference is released, and also whenever reference flags are cleared in
- socket or protocol code. Calls to <code class="Fn">sofree</code>() should
- not be made from outside the socket layer; outside callers should use
- <code class="Fn">soclose</code>() instead.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Connections_and_Addresses"><a class="permalink" href="#Connections_and_Addresses">Connections
- and Addresses</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#sobind"><code class="Fn" id="sobind">sobind</code></a>()
- function is equivalent to the <a class="Xr">bind(2)</a> system call, and
- binds the socket <var class="Fa">so</var> to the address
- <var class="Fa">nam</var>. The operation would be authorized using the
- credential on thread <var class="Fa">td</var>.</p>
-<p class="Pp" id="soconnect">The
- <a class="permalink" href="#soconnect"><code class="Fn">soconnect</code></a>()
- function is equivalent to the <a class="Xr">connect(2)</a> system call, and
- initiates a connection on the socket <var class="Fa">so</var> to the address
- <var class="Fa">nam</var>. The operation will be authorized using the
- credential on thread <var class="Fa">td</var>. Unlike the user system call,
- <code class="Fn">soconnect</code>() returns immediately; the caller may
- <a class="Xr">msleep(9)</a> on <var class="Fa">so-&gt;so_timeo</var> while
- holding the socket mutex and waiting for the
- <code class="Dv">SS_ISCONNECTING</code> flag to clear or
- <var class="Fa">so-&gt;so_error</var> to become non-zero. If
- <code class="Fn">soconnect</code>() fails, the caller must manually clear
- the <code class="Dv">SS_ISCONNECTING</code> flag.</p>
-<p class="Pp" id="sodisconnect">A call to
- <a class="permalink" href="#sodisconnect"><code class="Fn">sodisconnect</code></a>()
- disconnects the socket without closing it.</p>
-<p class="Pp" id="soshutdown">The
- <a class="permalink" href="#soshutdown"><code class="Fn">soshutdown</code></a>()
- function is equivalent to the <a class="Xr">shutdown(2)</a> system call, and
- causes part or all of a connection on a socket to be closed down.</p>
-<p class="Pp" id="solisten">Sockets are transitioned from non-listening status
- to listening with
- <a class="permalink" href="#solisten"><code class="Fn">solisten</code></a>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Socket_Options"><a class="permalink" href="#Socket_Options">Socket
- Options</a></h2>
-<p class="Pp">The <code class="Fn">sogetopt</code>() function is equivalent to
- the <a class="Xr">getsockopt(2)</a> system call, and retrieves a socket
- option on socket <var class="Fa">so</var>. The
- <code class="Fn">sosetopt</code>() function is equivalent to the
- <a class="Xr">setsockopt(2)</a> system call, and sets a socket option on
- socket <var class="Fa">so</var>.</p>
-<p class="Pp" id="sogetopt">The second argument in both
- <a class="permalink" href="#sogetopt"><code class="Fn">sogetopt</code></a>()
- and
- <a class="permalink" href="#sosetopt"><code class="Fn" id="sosetopt">sosetopt</code></a>()
- is the <var class="Fa">sopt</var> pointer to a <var class="Vt">struct
- sopt</var> describing the socket option operation. The caller-allocated
- structure must be zeroed, and then have its fields initialized to specify
- socket option operation arguments:</p>
-<dl class="Bl-tag">
- <dt id="sopt_dir"><var class="Va">sopt_dir</var></dt>
- <dd>Set to <code class="Dv">SOPT_SET</code> or
- <code class="Dv">SOPT_GET</code> depending on whether this is a get or set
- operation.</dd>
- <dt id="sopt_level"><var class="Va">sopt_level</var></dt>
- <dd>Specify the level in the network stack the operation is targeted at; for
- example, <code class="Dv">SOL_SOCKET</code>.</dd>
- <dt id="sopt_name"><var class="Va">sopt_name</var></dt>
- <dd>Specify the name of the socket option to set.</dd>
- <dt id="sopt_val"><var class="Va">sopt_val</var></dt>
- <dd>Kernel space pointer to the argument value for the socket option.</dd>
- <dt id="sopt_valsize"><var class="Va">sopt_valsize</var></dt>
- <dd>Size of the argument value in bytes.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Socket_Upcalls"><a class="permalink" href="#Socket_Upcalls">Socket
- Upcalls</a></h2>
-<p class="Pp">In order for the owner of a socket to be notified when the socket
- is ready to send or receive data, an upcall may be registered on the socket.
- The upcall is a function that will be called by the socket framework when a
- socket buffer associated with the given socket is ready for reading or
- writing.
- <a class="permalink" href="#soupcall_set"><code class="Fn" id="soupcall_set">soupcall_set</code></a>()
- is used to register a socket upcall. The function <var class="Va">func</var>
- is registered, and the pointer <var class="Va">arg</var> will be passed as
- its second argument when it is called by the framework. The possible values
- for <var class="Va">which</var> are <code class="Dv">SO_RCV</code> and
- <code class="Dv">SO_SND</code>, which register upcalls for receive and send
- events, respectively. The upcall function
- <a class="permalink" href="#func"><code class="Fn" id="func">func</code></a>()
- must return either <code class="Dv">SU_OK</code> or
- <code class="Dv">SU_ISCONNECTED</code>, depending on whether or not a call
- to <a class="Xr">soisconnected</a> should be made by the socket framework
- after the upcall returns. The upcall <var class="Va">func</var> cannot call
- <a class="Xr">soisconnected</a> itself due to lock ordering with the socket
- buffer lock. Only <code class="Dv">SO_RCV</code> upcalls should return
- <code class="Dv">SU_ISCONNECTED</code>. When a
- <code class="Dv">SO_RCV</code> upcall returns
- <code class="Dv">SU_ISCONNECTED</code>, the upcall will be removed from the
- socket.</p>
-<p class="Pp" id="soupcall_clear">Upcalls are removed from their socket by
- <a class="permalink" href="#soupcall_clear"><code class="Fn">soupcall_clear</code></a>().
- The <var class="Va">which</var> argument again specifies whether the sending
- or receiving upcall is to be cleared, with <code class="Dv">SO_RCV</code> or
- <code class="Dv">SO_SND</code>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Socket_Destructor_Callback"><a class="permalink" href="#Socket_Destructor_Callback">Socket
- Destructor Callback</a></h2>
-<p class="Pp">A kernel system can use the
- <a class="permalink" href="#sodtor_set"><code class="Fn" id="sodtor_set">sodtor_set</code></a>()
- function to set a destructor for a socket. The destructor is called when the
- socket is about to be freed. The destructor is called before the protocol
- detach routine. The destructor can serve as a callback to initiate
- additional cleanup actions.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Socket_I/O"><a class="permalink" href="#Socket_I/O">Socket
- I/O</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#soreceive"><code class="Fn" id="soreceive">soreceive</code></a>()
- function is equivalent to the <a class="Xr">recvmsg(2)</a> system call, and
- attempts to receive bytes of data from the socket <var class="Fa">so</var>,
- optionally blocking awaiting for data if none is ready to read. Data may be
- retrieved directly to kernel or user memory via the
- <var class="Fa">uio</var> argument, or as an mbuf chain returned to the
- caller via <var class="Fa">mp0</var>, avoiding a data copy. The
- <var class="Fa">uio</var> must always be non-<code class="Dv">NULL</code>.
- If <var class="Fa">mp0</var> is non-<code class="Dv">NULL</code>, only the
- <var class="Fa">uio_resid</var> of <var class="Fa">uio</var> is used. The
- caller may optionally retrieve a socket address on a protocol with the
- <code class="Dv">PR_ADDR</code> capability by providing storage via
- non-<code class="Dv">NULL</code> <var class="Fa">psa</var> argument. The
- caller may optionally retrieve control data mbufs via a
- non-<code class="Dv">NULL</code> <var class="Fa">controlp</var> argument.
- Optional flags may be passed to <code class="Fn">soreceive</code>() via a
- non-<code class="Dv">NULL</code> <var class="Fa">flagsp</var> argument, and
- use the same flag name space as the <a class="Xr">recvmsg(2)</a> system
- call.</p>
-<p class="Pp" id="sosend">The
- <a class="permalink" href="#sosend"><code class="Fn">sosend</code></a>()
- function is equivalent to the <a class="Xr">sendmsg(2)</a> system call, and
- attempts to send bytes of data via the socket <var class="Fa">so</var>,
- optionally blocking if data cannot be immediately sent. Data may be sent
- directly from kernel or user memory via the <var class="Fa">uio</var>
- argument, or as an mbuf chain via <var class="Fa">top</var>, avoiding a data
- copy. Only one of the <var class="Fa">uio</var> or <var class="Fa">top</var>
- pointers may be non-<code class="Dv">NULL</code>. An optional destination
- address may be specified via a non-<code class="Dv">NULL</code>
- <var class="Fa">addr</var> argument, which may result in an implicit connect
- if supported by the protocol. The caller may optionally send control data
- mbufs via a non-<code class="Dv">NULL</code> <var class="Fa">control</var>
- argument. Flags may be passed to <code class="Fn">sosend</code>() using the
- <var class="Fa">flags</var> argument, and use the same flag name space as
- the <a class="Xr">sendmsg(2)</a> system call.</p>
-<p class="Pp">Kernel callers running in an interrupt thread context, or with a
- mutex held, will wish to use non-blocking sockets and pass the
- <code class="Dv">MSG_DONTWAIT</code> flag in order to prevent these
- functions from sleeping.</p>
-<p class="Pp" id="sopoll">A socket can be queried for readability, writability,
- out-of-band data, or end-of-file using
- <a class="permalink" href="#sopoll"><code class="Fn">sopoll</code></a>().
- The possible values for <var class="Va">events</var> are as for
- <a class="Xr">poll(2)</a>, with symbolic values
- <code class="Dv">POLLIN</code>, <code class="Dv">POLLPRI</code>,
- <code class="Dv">POLLOUT</code>, <code class="Dv">POLLRDNORM</code>,
- <code class="Dv">POLLWRNORM</code>, <code class="Dv">POLLRDBAND</code>, and
- <code class="Dv">POLLINGEOF</code> taken from
- <code class="In">&lt;<a class="In">sys/poll.h</a>&gt;</code>.</p>
-<p class="Pp" id="soaccept">Calls to
- <a class="permalink" href="#soaccept"><code class="Fn">soaccept</code></a>()
- pass through to the protocol's accept routine to accept an incoming
- connection.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Socket_Utility_Functions"><a class="permalink" href="#Socket_Utility_Functions">Socket
- Utility Functions</a></h2>
-<p class="Pp">The uid of a socket's credential may be compared against a
- <var class="Va">uid</var> with
- <a class="permalink" href="#socheckuid"><code class="Fn" id="socheckuid">socheckuid</code></a>().</p>
-<p class="Pp" id="sodupsockaddr">A copy of an existing <var class="Vt">struct
- sockaddr</var> may be made using
- <a class="permalink" href="#sodupsockaddr"><code class="Fn">sodupsockaddr</code></a>().</p>
-<p class="Pp" id="sohasoutofband">Protocol implementations notify the socket
- layer of the arrival of out-of-band data using
- <a class="permalink" href="#sohasoutofband"><code class="Fn">sohasoutofband</code></a>(),
- so that the socket layer can notify socket consumers of the available
- data.</p>
-<p class="Pp" id="sotoxsocket">An &#x201C;external-format&#x201D; version of a
- <var class="Vt">struct socket</var> can be created using
- <a class="permalink" href="#sotoxsocket"><code class="Fn">sotoxsocket</code></a>(),
- suitable for isolating user code from changes in the kernel structure.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Protocol_Implementations"><a class="permalink" href="#Protocol_Implementations">Protocol
- Implementations</a></h2>
-<p class="Pp">Protocols must supply an implementation for
- <code class="Fn">solisten</code>(); such protocol implementations can call
- back into the socket layer using
- <a class="permalink" href="#solisten_proto_check"><code class="Fn" id="solisten_proto_check">solisten_proto_check</code></a>()
- and
- <a class="permalink" href="#solisten_proto"><code class="Fn" id="solisten_proto">solisten_proto</code></a>()
- to check and set the socket-layer listen state. These callbacks are provided
- so that the protocol implementation can order the socket layer and protocol
- locks as necessary. Protocols must supply an implementation of
- <code class="Fn">soreceive</code>(); the functions
- <a class="permalink" href="#soreceive_stream"><code class="Fn" id="soreceive_stream">soreceive_stream</code></a>(),
- <a class="permalink" href="#soreceive_dgram"><code class="Fn" id="soreceive_dgram">soreceive_dgram</code></a>(),
- and
- <a class="permalink" href="#soreceive_generic"><code class="Fn" id="soreceive_generic">soreceive_generic</code></a>()
- are supplied for use by such implementations.</p>
-<p class="Pp" id="sonewconn">Protocol implementations can use
- <a class="permalink" href="#sonewconn"><code class="Fn">sonewconn</code></a>()
- to create a socket and attach protocol state to that socket. This can be
- used to create new sockets available for <code class="Fn">soaccept</code>()
- on a listen socket. The returned socket has a reference count of zero.</p>
-<p class="Pp" id="sopoll~2">Protocols must supply an implementation for
- <a class="permalink" href="#sopoll~2"><code class="Fn">sopoll</code></a>();
- <a class="permalink" href="#sopoll_generic"><code class="Fn" id="sopoll_generic">sopoll_generic</code></a>()
- is provided for the use by protocol implementations.</p>
-<p class="Pp" id="sosend_dgram">The functions
- <a class="permalink" href="#sosend_dgram"><code class="Fn">sosend_dgram</code></a>()
- and
- <a class="permalink" href="#sosend_generic"><code class="Fn" id="sosend_generic">sosend_generic</code></a>()
- are supplied to assist in protocol implementations of
- <code class="Fn">sosend</code>().</p>
-<p class="Pp" id="soreserve">When a protocol creates a new socket structure, it
- is necessary to reserve socket buffer space for that socket, by calling
- <a class="permalink" href="#soreserve"><code class="Fn">soreserve</code></a>().
- The rough inverse of this reservation is performed by
- <a class="permalink" href="#sorflush"><code class="Fn" id="sorflush">sorflush</code></a>(),
- which is called automatically by the socket framework.</p>
-<p class="Pp" id="sowakeup">When a protocol needs to wake up threads waiting for
- the socket to become ready to read or write, variants of
- <a class="permalink" href="#sowakeup"><code class="Fn">sowakeup</code></a>()
- are used. The <code class="Fn">sowakeup</code>() function should not be
- called directly by protocol code, instead use the wrappers
- <a class="permalink" href="#sorwakeup"><code class="Fn" id="sorwakeup">sorwakeup</code></a>(),
- <a class="permalink" href="#sorwakeup_locked"><code class="Fn" id="sorwakeup_locked">sorwakeup_locked</code></a>(),
- <a class="permalink" href="#sowwakeup"><code class="Fn" id="sowwakeup">sowwakeup</code></a>(),
- and
- <a class="permalink" href="#sowwakeup_locked"><code class="Fn" id="sowwakeup_locked">sowwakeup_locked</code></a>()
- for readers and writers, with the corresponding socket buffer lock not
- already locked, or already held, respectively.</p>
-<p class="Pp" id="sooptcopyin">The functions
- <a class="permalink" href="#sooptcopyin"><code class="Fn">sooptcopyin</code></a>()
- and
- <a class="permalink" href="#sooptcopyout"><code class="Fn" id="sooptcopyout">sooptcopyout</code></a>()
- are useful for transferring <var class="Vt">struct sockopt</var> data
- between user and kernel code.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bind(2)</a>, <a class="Xr">close(2)</a>,
- <a class="Xr">connect(2)</a>, <a class="Xr">getsockopt(2)</a>,
- <a class="Xr">recv(2)</a>, <a class="Xr">send(2)</a>,
- <a class="Xr">setsockopt(2)</a>, <a class="Xr">shutdown(2)</a>,
- <a class="Xr">socket(2)</a>, <a class="Xr">ng_ksocket(4)</a>,
- <a class="Xr">intr_event(9)</a>, <a class="Xr">msleep(9)</a>,
- <a class="Xr">ucred(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <a class="Xr">socket(2)</a> system call appeared in
- <span class="Ux">4.2BSD</span>. This manual page was introduced in
- <span class="Ux">FreeBSD 7.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Robert
- Watson</span> and
- <br/>
- <span class="An">Benjamin Kaduk</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The use of explicitly passed credentials, credentials hung from
- explicitly passed threads, the credential on
- <code class="Dv">curthread</code>, and the cached credential from socket
- creation time is inconsistent, and may lead to unexpected behaviour. It is
- possible that several of the <var class="Fa">td</var> arguments should be
- <var class="Fa">cred</var> arguments, or simply not be present at all.</p>
-<p class="Pp">The caller may need to manually clear
- <code class="Dv">SS_ISCONNECTING</code> if
- <code class="Fn">soconnect</code>() returns an error.</p>
-<p class="Pp">The <code class="Dv">MSG_DONTWAIT</code> flag is not implemented
- for <code class="Fn">sosend</code>(), and may not always work with
- <code class="Fn">soreceive</code>() when zero copy sockets are enabled.</p>
-<p class="Pp">This manual page does not describe how to register socket upcalls
- or monitor a socket for readability/writability without using blocking
- I/O.</p>
-<p class="Pp">The <code class="Fn">soref</code>() and
- <code class="Fn">sorele</code>() functions are not described, and in most
- cases should not be used, due to confusing and potentially incorrect
- interactions when <code class="Fn">sorele</code>() is last called after
- <code class="Fn">soclose</code>().</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 6, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/stack.9 4.html b/static/freebsd/man9/stack.9 4.html
deleted file mode 100644
index d54d5f4a..00000000
--- a/static/freebsd/man9/stack.9 4.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">STACK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">STACK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">stack</code> &#x2014; <span class="Nd">kernel
- thread stack tracing routines</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/stack.h</a>&gt;</code></p>
-<p class="Pp">In the kernel configuration file:
- <br/>
- <code class="Cd">options DDB</code>
- <br/>
- <code class="Cd">options STACK</code></p>
-<p class="Pp">
- <br/>
- <var class="Ft">struct stack *</var>
- <br/>
- <code class="Fn">stack_create</code>(<var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- stack *st</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">stack_put</code>(<var class="Fa" style="white-space: nowrap;">struct
- stack *st</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- pc</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_copy</code>(<var class="Fa" style="white-space: nowrap;">const
- struct stack *src</var>, <var class="Fa" style="white-space: nowrap;">struct
- stack *dst</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_zero</code>(<var class="Fa" style="white-space: nowrap;">struct
- stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_print</code>(<var class="Fa" style="white-space: nowrap;">const
- struct stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_print_ddb</code>(<var class="Fa" style="white-space: nowrap;">const
- struct stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_print_short</code>(<var class="Fa" style="white-space: nowrap;">const
- struct stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_print_short_ddb</code>(<var class="Fa" style="white-space: nowrap;">const
- struct stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_sbuf_print</code>(<var class="Fa" style="white-space: nowrap;">struct
- sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct
- stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_sbuf_print_ddb</code>(<var class="Fa" style="white-space: nowrap;">struct
- sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct
- stack *st</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">stack_save</code>(<var class="Fa" style="white-space: nowrap;">struct
- stack *st</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">stack_save_td</code>(<var class="Fa" style="white-space: nowrap;">struct
- stack *st</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">stack</code> KPI allows querying of kernel
- stack trace information and the automated generation of kernel stack trace
- strings for the purposes of debugging and tracing. To use the KPI, at least
- one of <code class="Cd">options DDB</code> and <code class="Cd">options
- STACK</code> must be compiled into the kernel.</p>
-<p class="Pp" id="stack_zero">Each stack trace is described by a
- <var class="Vt">struct stack</var>. It can be declared in the usual ways,
- including on the stack, and optionally initialized with
- <a class="permalink" href="#stack_zero"><code class="Fn">stack_zero</code></a>(),
- though this is not necessary before saving a trace. It can also be
- dynamically allocated with
- <a class="permalink" href="#stack_create"><code class="Fn" id="stack_create">stack_create</code></a>().
- The <var class="Ar">flags</var> argument is passed to
- <a class="Xr">malloc(9)</a>. This dynamic allocation must be freed with
- <a class="permalink" href="#stack_destroy"><code class="Fn" id="stack_destroy">stack_destroy</code></a>().</p>
-<p class="Pp" id="stack_save">A trace of the current thread's kernel call stack
- may be captured using
- <a class="permalink" href="#stack_save"><code class="Fn">stack_save</code></a>().
- <a class="permalink" href="#stack_save_td"><code class="Fn" id="stack_save_td">stack_save_td</code></a>()
- can be used to capture the kernel stack of a caller-specified thread.
- Callers of <code class="Fn">stack_save_td</code>() must own the thread lock
- of the specified thread, and the thread's stack must not be swapped out.
- <code class="Fn">stack_save_td</code>() can capture the kernel stack of a
- running thread, though note that this is not implemented on all platforms.
- If the thread is running, the caller must also hold the process lock for the
- target thread.</p>
-<p class="Pp" id="stack_print"><a class="permalink" href="#stack_print"><code class="Fn">stack_print</code></a>()
- and
- <a class="permalink" href="#stack_print_short"><code class="Fn" id="stack_print_short">stack_print_short</code></a>()
- may be used to print a stack trace using the kernel
- <a class="Xr">printf(9)</a>, and may sleep as a result of acquiring
- <a class="Xr">sx(9)</a> locks in the kernel linker while looking up symbol
- names. In locking-sensitive environments, the unsynchronized
- <a class="permalink" href="#stack_print_ddb"><code class="Fn" id="stack_print_ddb">stack_print_ddb</code></a>()
- and
- <a class="permalink" href="#stack_print_short_ddb"><code class="Fn" id="stack_print_short_ddb">stack_print_short_ddb</code></a>()
- variants may be invoked. This function bypasses kernel linker locking,
- making it usable in <a class="Xr">ddb(4)</a>, but not in a live system where
- linker data structures may change.</p>
-<p class="Pp" id="stack_sbuf_print"><a class="permalink" href="#stack_sbuf_print"><code class="Fn">stack_sbuf_print</code></a>()
- may be used to construct a human-readable string, including conversion
- (where possible) from a simple kernel instruction pointer to a named symbol
- and offset. The argument <var class="Ar">sb</var> must be an initialized
- <code class="Dv">struct sbuf</code> as described in
- <a class="Xr">sbuf(9)</a>. This function may sleep if an auto-extending
- <code class="Dv">struct sbuf</code> is used, or due to kernel linker
- locking. In locking-sensitive environments, such as
- <a class="Xr">ddb(4)</a>, the unsynchronized
- <a class="permalink" href="#stack_sbuf_print_ddb"><code class="Fn" id="stack_sbuf_print_ddb">stack_sbuf_print_ddb</code></a>()
- variant may be invoked to avoid kernel linker locking; it should be used
- with a fixed-length sbuf.</p>
-<p class="Pp">The utility functions <code class="Nm">stack_zero</code>,
- <code class="Nm">stack_copy</code>, and <code class="Nm">stack_put</code>
- may be used to manipulate stack data structures directly.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">stack_put</code>() returns 0 on success.
- Otherwise the <code class="Dv">struct stack</code> does not contain space to
- record additional frames, and a non-zero value is returned.</p>
-<p class="Pp"><code class="Fn">stack_save_td</code>() returns 0 when the stack
- capture was successful and a non-zero error number otherwise. In particular,
- <code class="Er">EBUSY</code> is returned if the thread was running in user
- mode at the time that the capture was attempted, and
- <code class="Er">EOPNOTSUPP</code> is returned if the operation is not
- implemented.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">printf(9)</a>,
- <a class="Xr">sbuf(9)</a>, <a class="Xr">sx(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">stack</code> function suite was created by
- <span class="An">Antoine Brodin</span>. <code class="Nm">stack</code> was
- extended by <span class="An">Robert Watson</span> for general-purpose use
- outside of <a class="Xr">ddb(4)</a>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 6, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/store.9 4.html b/static/freebsd/man9/store.9 4.html
deleted file mode 100644
index aff016d8..00000000
--- a/static/freebsd/man9/store.9 4.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">STORE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">STORE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">store</code>, <code class="Nm">subyte</code>,
- <code class="Nm">suword</code> &#x2014; <span class="Nd">store data to
- user-space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/time.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">subyte</code>(<var class="Fa" style="white-space: nowrap;">volatile
- void *base</var>, <var class="Fa" style="white-space: nowrap;">int
- byte</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">suword</code>(<var class="Fa" style="white-space: nowrap;">volatile
- void *base</var>, <var class="Fa" style="white-space: nowrap;">long
- word</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">suword16</code>(<var class="Fa" style="white-space: nowrap;">volatile
- void *base</var>, <var class="Fa" style="white-space: nowrap;">int
- word</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">suword32</code>(<var class="Fa" style="white-space: nowrap;">volatile
- void *base</var>, <var class="Fa" style="white-space: nowrap;">int32_t
- word</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">suword64</code>(<var class="Fa" style="white-space: nowrap;">volatile
- void *base</var>, <var class="Fa" style="white-space: nowrap;">int64_t
- word</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">store</code> functions are designed to copy
- small amounts of data to user-space. If the user address is naturally
- aligned, then the operation will be performed atomically. Otherwise it may
- fail or be performed non-atomically, depending on the platform.</p>
-<p class="Pp">The <code class="Nm">store</code> routines provide the following
- functionality:</p>
-<dl class="Bl-tag">
- <dt id="subyte"><a class="permalink" href="#subyte"><code class="Fn">subyte</code></a>()</dt>
- <dd>Stores a byte of data to the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="suword"><a class="permalink" href="#suword"><code class="Fn">suword</code></a>()</dt>
- <dd>Stores a word of data to the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="suword16"><a class="permalink" href="#suword16"><code class="Fn">suword16</code></a>()</dt>
- <dd>Stores 16 bits of data to the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="suword32"><a class="permalink" href="#suword32"><code class="Fn">suword32</code></a>()</dt>
- <dd>Stores 32 bits of data to the user-space address
- <span class="Pa">base</span>.</dd>
- <dt id="suword64"><a class="permalink" href="#suword64"><code class="Fn">suword64</code></a>()</dt>
- <dd>Stores 64 bits of data to the user-space address
- <span class="Pa">base</span>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Nm">store</code> functions return 0 on success or
- -1 on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">copy(9)</a>, <a class="Xr">fetch(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 22, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/style.9 3.html b/static/freebsd/man9/style.9 3.html
deleted file mode 100644
index 4371bdc1..00000000
--- a/static/freebsd/man9/style.9 3.html
+++ /dev/null
@@ -1,783 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">STYLE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">STYLE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">style</code> &#x2014; <span class="Nd">kernel
- source file style guide</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This file specifies the preferred style for kernel source files in
- the <span class="Ux">FreeBSD</span> source tree. It is also a guide for the
- preferred userland code style. The preferred line width is 80 characters,
- but some exceptions are made when a slightly longer line is clearer or
- easier to read. Anything that is frequently grepped for, such as diagnostic,
- error, or panic messages, should not be broken up over multiple lines
- despite this rule. Many of the style rules are implicit in the examples. Be
- careful to check the examples before assuming that
- <code class="Nm">style</code> is silent on an issue.</p>
-<div class="Bd Pp Li">
-<pre>/*
- * Style guide for FreeBSD. Based on the CSRG's KNF (Kernel Normal Form).
- */
-
-/*
- * VERY important single-line comments look like this.
- */
-
-/* Most single-line comments look like this. */
-
-// Although they may look like this.
-
-/*
- * Multi-line comments look like this. Make them real sentences. Fill
- * them so they look like real paragraphs.
- */</pre>
-</div>
-<p class="Pp">C++ comments may be used in C and C++ code. Single-line comments
- should be consistently either C or C++ within a file. Multi-line comments
- should also be consistently either C or C++, but may differ from single-line
- comments.</p>
-<p class="Pp">The copyright header should be a multi-line comment like so:</p>
-<div class="Bd Pp Li">
-<pre>/*
- * Copyright (c) 1984-2025 John Q. Public
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */</pre>
-</div>
-<p class="Pp">Comments starting in columns other than the first are never
- considered license statements. Write the copyright lines before the
- appropriate SPDX-License-Identifier. If the copyright assertion contains the
- phrase &#x201C;<code class="Li">All Rights Reserved</code>&#x201D; that
- should be on the same line as the word
- &#x201C;<code class="Li">Copyright</code>&#x201D;. You should not insert a
- new copyright line between an old copyright line and this phrase. Instead,
- you should insert a new copyright phrase after a pre-existing
- &#x201C;<code class="Li">All Rights Reserved</code>&#x201D; line. When
- making changes, it is acceptable to fold an &#x201C;<code class="Li">All
- Rights Reserved</code>&#x201D; line with each of the
- &#x201C;<code class="Li">Copyright</code>&#x201D; lines. For files that have
- the &#x201C;<code class="Li">All Rights Reserved</code>&#x201D; line on the
- same line(s) as the word &#x201C;<code class="Li">Copyright</code>&#x201D;,
- new copyright assertions should be added last. New
- &#x201C;<code class="Li">Copyright</code>&#x201D; lines should only be added
- when making substantial changes to the file, not for trivial changes.</p>
-<p class="Pp">After any copyright and license comment, there is a blank line.
- Non-C/C++ source files follow the example above, while C/C++ source files
- follow the one below. Version control system ID tags should only exist once
- in a file (unlike in this one). All VCS (version control system) revision
- identification in files obtained from elsewhere should be maintained,
- including, where applicable, multiple IDs showing a file's history. In
- general, do not edit foreign IDs or their infrastructure. Unless otherwise
- wrapped (such as &#x201C;<code class="Li">#if
- defined(LIBC_SCCS)</code>&#x201D;), enclose both in
- &#x201C;<code class="Li">#if 0 ... #endif</code>&#x201D; to hide any
- uncompilable bits and to keep the IDs out of object files. Only add
- &#x201C;<code class="Li">From: </code>&#x201D; in front of foreign VCS IDs
- if the file is renamed. Add &#x201C;<code class="Li">From: </code>&#x201D;
- and the <span class="Ux">FreeBSD</span> git hash with full path name if the
- file was derived from another <span class="Ux">FreeBSD</span> file and
- include relevant copyright info from the original file.</p>
-<p class="Pp">Leave one blank line before the header files.</p>
-<p class="Pp">Kernel include files (<span class="Pa">sys/*.h</span>) come first.
- If either <code class="In">&lt;<a class="In">sys/types.h</a>&gt;</code> or
- <code class="In">&lt;<a class="In">sys/param.h</a>&gt;</code> is needed,
- include it before other include files.
- (<code class="In">&lt;<a class="In">sys/param.h</a>&gt;</code> includes
- <code class="In">&lt;<a class="In">sys/types.h</a>&gt;</code>; do not
- include both.) Next, include
- <code class="In">&lt;<a class="In">sys/systm.h</a>&gt;</code>, if needed.
- The remaining kernel headers should be sorted alphabetically.</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;sys/types.h&gt; /* Non-local includes in angle brackets. */
-#include &lt;sys/systm.h&gt;
-#include &lt;sys/endian.h&gt;
-#include &lt;sys/lock.h&gt;
-#include &lt;sys/queue.h&gt;</pre>
-</div>
-<p class="Pp">For a network program, put the network include files next.</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;net/if.h&gt;
-#include &lt;net/if_dl.h&gt;
-#include &lt;net/route.h&gt;
-#include &lt;netinet/in.h&gt;
-#include &lt;protocols/rwhod.h&gt;</pre>
-</div>
-<p class="Pp">Do not include files from <span class="Pa">/usr/include</span> in
- the kernel.</p>
-<p class="Pp">Leave a blank line before the next group, the
- <span class="Pa">/usr/include</span> files, which should be sorted
- alphabetically by name.</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;stdio.h&gt;</pre>
-</div>
-<p class="Pp">Global pathnames are defined in
- <code class="In">&lt;<a class="In">paths.h</a>&gt;</code>. Pathnames local
- to the program go in &quot;<span class="Pa">pathnames.h</span>&quot; in the
- local directory.</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;paths.h&gt;</pre>
-</div>
-<p class="Pp">Leave another blank line before the local include files.</p>
-<div class="Bd Pp Li">
-<pre>#include &quot;pathnames.h&quot; /* Local includes in double quotes. */</pre>
-</div>
-<p class="Pp">Do not <code class="Ic">#define</code> or declare names in the
- implementation namespace except for implementing application interfaces.</p>
-<p class="Pp">The names of &#x201C;unsafe&#x201D; macros (ones that have side
- effects), and the names of macros for manifest constants, are all in
- uppercase. The expansions of expression-like macros are either a single
- token or have outer parentheses. Put a single space or tab character between
- the <code class="Ic">#define</code> and the macro name, but be consistent
- within a file. If a macro is an inline expansion of a function, the function
- name is all in lowercase and the macro has the same name all in uppercase.
- Right-justify the backslashes; it makes it easier to read. If the macro
- encapsulates a compound statement, enclose it in a
- <code class="Ic">do</code> loop, so that it can safely be used in
- <code class="Ic">if</code> statements. Any final statement-terminating
- semicolon should be supplied by the macro invocation rather than the macro,
- to make parsing easier for pretty-printers and editors.</p>
-<div class="Bd Pp Li">
-<pre>#define MACRO(x, y) do { \
- variable = (x) + (y); \
- (y) += 2; \
-} while (0)</pre>
-</div>
-<p class="Pp">When code is conditionally compiled using
- <code class="Ic">#ifdef</code> or <code class="Ic">#if</code>, a comment may
- be added following the matching <code class="Ic">#endif</code> or
- <code class="Ic">#else</code> to permit the reader to easily discern where
- conditionally compiled code regions end. This comment should be used only
- for (subjectively) long regions, regions greater than 20 lines, or where a
- series of nested <code class="Ic">#ifdef 's</code> may be confusing to the
- reader. The comment should be separated from the
- <code class="Ic">#endif</code> or <code class="Ic">#else</code> by a single
- space. For short conditionally compiled regions, a closing comment should
- not be used.</p>
-<p class="Pp">The comment for <code class="Ic">#endif</code> should match the
- expression used in the corresponding <code class="Ic">#if</code> or
- <code class="Ic">#ifdef</code>. The comment for
- <code class="Ic">#else</code> and <code class="Ic">#elif</code> should match
- the inverse of the expression(s) used in the preceding
- <code class="Ic">#if</code> and/or <code class="Ic">#elif</code> statements.
- In the comments, the subexpression
- &#x201C;<code class="Li">defined(FOO)</code>&#x201D; is abbreviated as
- &#x201C;<code class="Li">FOO</code>&#x201D;. For the purposes of comments,
- &#x201C;<code class="Ic">#ifndef</code> <code class="Li">FOO</code>&#x201D;
- is treated as &#x201C;<code class="Ic">#if</code>
- <code class="Li">!defined(FOO)</code>&#x201D;.</p>
-<div class="Bd Pp Li">
-<pre>#ifdef KTRACE
-#include &lt;sys/ktrace.h&gt;
-#endif
-
-#ifdef COMPAT_43
-/* A large region here, or other conditional code. */
-#else /* !COMPAT_43 */
-/* Or here. */
-#endif /* COMPAT_43 */
-
-#ifndef COMPAT_43
-/* Yet another large region here, or other conditional code. */
-#else /* COMPAT_43 */
-/* Or here. */
-#endif /* !COMPAT_43 */</pre>
-</div>
-<p class="Pp">The project prefers the use of <span class="St">ISO/IEC 9899:1999
- (&#x201C;ISO&#x00A0;C99&#x201D;)</span> unsigned integer identifiers of the
- form <var class="Vt">uintXX_t</var> rather than the older
- <span class="Ux">BSD</span>-style integer identifiers of the form
- <var class="Vt">u_intXX_t</var>. New code should use the former, and old
- code should be converted to the new form if other major work is being done
- in that area and there is no overriding reason to prefer the older
- <span class="Ux">BSD</span>-style. Like white-space commits, care should be
- taken in making <var class="Vt">uintXX_t</var> only commits.</p>
-<p class="Pp">Similarly, the project prefers the use of ISO C99
- <var class="Vt">bool</var> rather than the older <var class="Vt">int</var>
- or <var class="Vt">boolean_t</var>. New code should use
- <var class="Vt">bool</var>, and old code may be converted if it is
- reasonable to do so. Literal values are named <code class="Dv">true</code>
- and <code class="Dv">false</code>. These are preferred to the old spellings
- <code class="Dv">TRUE</code> and <code class="Dv">FALSE</code>. Userspace
- code should include
- <code class="In">&lt;<a class="In">stdbool.h</a>&gt;</code>, while kernel
- code should include
- <code class="In">&lt;<a class="In">sys/types.h</a>&gt;</code>.</p>
-<p class="Pp">Likewise, the project prefers ISO C99 designated initializers when
- it makes sense to do so.</p>
-<p class="Pp">Enumeration values are all uppercase.</p>
-<div class="Bd Pp Li">
-<pre>enum enumtype { ONE, TWO } et;</pre>
-</div>
-<p class="Pp">The use of internal_underscores in identifiers is preferred over
- camelCase or TitleCase.</p>
-<p class="Pp">In declarations, do not put any whitespace between asterisks and
- adjacent tokens, except for tokens that are identifiers related to types.
- (These identifiers are the names of basic types, type qualifiers, and
- <code class="Ic">typedef</code>-names other than the one being declared.)
- Separate these identifiers from asterisks using a single space.</p>
-<p class="Pp">When declaring variables in structures, declare them sorted by
- use, then by size (largest to smallest), and then in alphabetical order. The
- first category normally does not apply, but there are exceptions. Each one
- gets its own line. Try to make the structure readable by aligning the member
- names using either one or two tabs depending upon your judgment. You should
- use one tab only if it suffices to align at least 90% of the member names.
- Names following extremely long types should be separated by a single
- space.</p>
-<p class="Pp">Major structures should be declared at the top of the file in
- which they are used, or in separate header files if they are used in
- multiple source files. Use of the structures should be by separate
- declarations and should be <code class="Ic">extern</code> if they are
- declared in a header file.</p>
-<div class="Bd Pp Li">
-<pre>struct foo {
- struct foo *next; /* List of active foo. */
- struct mumble amumble; /* Comment for mumble. */
- int bar; /* Try to align the comments. */
- struct verylongtypename *baz; /* Does not fit in 2 tabs. */
-};
-struct foo *foohead; /* Head of global foo list. */</pre>
-</div>
-<p class="Pp">Use <a class="Xr">queue(3)</a> macros rather than rolling your own
- lists, whenever possible. Thus, the previous example would be better
- written:</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;sys/queue.h&gt;
-
-struct foo {
- LIST_ENTRY(foo) link; /* Use queue macros for foo lists. */
- struct mumble amumble; /* Comment for mumble. */
- int bar; /* Try to align the comments. */
- struct verylongtypename *baz; /* Does not fit in 2 tabs. */
-};
-LIST_HEAD(, foo) foohead; /* Head of global foo list. */</pre>
-</div>
-<p class="Pp">Avoid using typedefs for structure types. Typedefs are problematic
- because they do not properly hide their underlying type; for example you
- need to know if the typedef is the structure itself or a pointer to the
- structure. In addition they must be declared exactly once, whereas an
- incomplete structure type can be mentioned as many times as necessary.
- Typedefs are difficult to use in stand-alone header files: the header that
- defines the typedef must be included before the header that uses it, or by
- the header that uses it (which causes namespace pollution), or there must be
- a back-door mechanism for obtaining the typedef.</p>
-<p class="Pp">When convention requires a <code class="Ic">typedef</code>, make
- its name match the struct tag. Avoid typedefs ending in
- &#x201C;<code class="Li">_t</code>&#x201D;, except as specified in Standard
- C or by POSIX.</p>
-<div class="Bd Pp Li">
-<pre>/* Make the structure name match the typedef. */
-typedef struct bar {
- int level;
-} BAR;
-typedef int foo; /* This is foo. */
-typedef const long baz; /* This is baz. */</pre>
-</div>
-<p class="Pp">All functions are prototyped somewhere.</p>
-<p class="Pp">Function prototypes for private functions (i.e., functions not
- used elsewhere) go at the top of the first source module. Functions local to
- one source module should be declared <code class="Ic">static</code>.</p>
-<p class="Pp">Functions used from other parts of the kernel are prototyped in
- the relevant include file. Function prototypes should be listed in a logical
- order, preferably alphabetical unless there is a compelling reason to use a
- different ordering.</p>
-<p class="Pp">Functions that are used locally in more than one module go into a
- separate header file, e.g.,
- &quot;<span class="Pa">extern.h</span>&quot;.</p>
-<p class="Pp">The kernel has a name associated with parameter types, e.g., in
- the kernel use:</p>
-<div class="Bd Pp Li">
-<pre>void function(int fd);</pre>
-</div>
-<p class="Pp">In header files visible to userland applications, prototypes that
- are visible must use either &#x201C;protected&#x201D; names (ones beginning
- with an underscore) or no names with the types. It is preferable to use
- protected names. E.g., use:</p>
-<div class="Bd Pp Li">
-<pre>void function(int);</pre>
-</div>
-<p class="Pp">or:</p>
-<div class="Bd Pp Li">
-<pre>void function(int _fd);</pre>
-</div>
-<p class="Pp">Prototypes may have an extra space after a tab to enable function
- names to line up:</p>
-<div class="Bd Pp Li">
-<pre>static char *function(int _arg, const char *_arg2, struct foo *_arg3,
- struct bar *_arg4);
-static void usage(void);
-
-/*
- * All major routines should have a comment briefly describing what
- * they do. The comment before the &quot;main&quot; routine should describe
- * what the program does.
- */
-int
-main(int argc, char *argv[])
-{
- char *ep;
- long num;
- int ch;</pre>
-</div>
-<p class="Pp">For consistency, <a class="Xr">getopt(3)</a> should be used to
- parse options. Options should be sorted in the <a class="Xr">getopt(3)</a>
- call and the <code class="Ic">switch</code> statement, unless parts of the
- <code class="Ic">switch</code> cascade. Elements in a
- <code class="Ic">switch</code> statement that execute some code and then
- cascade to the next case should have a <code class="Li">FALLTHROUGH</code>
- comment. Numerical arguments should be checked for accuracy. Code which is
- unreachable for non-obvious reasons may be marked /*
- <code class="Li">NOTREACHED</code> */.</p>
-<div class="Bd Pp Li">
-<pre> while ((ch = getopt(argc, argv, &quot;abNn:&quot;)) != -1)
- switch (ch) { /* Indent the switch. */
- case 'a': /* Do not indent the case. */
- aflag = 1; /* Indent case body one tab. */
- /* FALLTHROUGH */
- case 'b':
- bflag = 1;
- break;
- case 'N':
- Nflag = 1;
- break;
- case 'n':
- num = strtol(optarg, &amp;ep, 10);
- if (num &lt;= 0 || *ep != '\0') {
- warnx(&quot;illegal number, -n argument -- %s&quot;,
- optarg);
- usage();
- }
- break;
- case '?':
- default:
- usage();
- }
- argc -= optind;
- argv += optind;</pre>
-</div>
-<p class="Pp">Space after keywords (<code class="Ic">if</code>,
- <code class="Ic">while</code>, <code class="Ic">for</code>,
- <code class="Ic">return</code>, <code class="Ic">switch</code>). Two styles
- of braces (&#x2018;<code class="Li">{</code>&#x2019; and
- &#x2018;<code class="Li">}</code>&#x2019;) are allowed for single line
- statements. Either they are used for all single statements, or they are used
- only where needed for clarity. Usage within a function should be consistent.
- Forever loops are done with <code class="Ic">for</code>'s, not
- <code class="Ic">while</code>'s.</p>
-<div class="Bd Pp Li">
-<pre> for (p = buf; *p != '\0'; ++p)
- ; /* nothing */
- for (;;)
- stmt;
- for (;;) {
- z = a + really + long + statement + that + needs +
- two + lines + gets + indented + four + spaces +
- on + the + second + and + subsequent + lines;
- }
- for (;;) {
- if (cond)
- stmt;
- }
- if (val != NULL)
- val = realloc(val, newsize);</pre>
-</div>
-<p class="Pp">Parts of a <code class="Ic">for</code> loop may be left empty.</p>
-<div class="Bd Pp Li">
-<pre> for (; cnt &lt; 15; cnt++) {
- stmt1;
- stmt2;
- }</pre>
-</div>
-<p class="Pp">A <code class="Ic">for</code> loop may declare and initialize its
- counting variable.</p>
-<div class="Bd Pp Li">
-<pre> for (int i = 0; i &lt; 15; i++) {
- stmt1;
- }</pre>
-</div>
-<p class="Pp">Indentation is an 8 character tab. Second level indents are four
- spaces. If you have to wrap a long statement, put the operator at the end of
- the line.</p>
-<div class="Bd Pp Li">
-<pre> while (cnt &lt; 20 &amp;&amp; this_variable_name_is_too_long &amp;&amp;
- ep != NULL)
- z = a + really + long + statement + that + needs +
- two + lines + gets + indented + four + spaces +
- on + the + second + and + subsequent + lines;</pre>
-</div>
-<p class="Pp">Do not add whitespace at the end of a line, and only use tabs
- followed by spaces to form the indentation. Do not use more spaces than a
- tab will produce and do not use spaces in front of tabs.</p>
-<p class="Pp">Closing and opening braces go on the same line as the
- <code class="Ic">else</code>. Braces that are not necessary may be left
- out.</p>
-<div class="Bd Pp Li">
-<pre> if (test)
- stmt;
- else if (bar) {
- stmt;
- stmt;
- } else
- stmt;</pre>
-</div>
-<p class="Pp">No spaces after function names. Commas have a space after them. No
- spaces after &#x2018;<code class="Li">(</code>&#x2019; or
- &#x2018;<code class="Li">[</code>&#x2019; or preceding
- &#x2018;<code class="Li">]</code>&#x2019; or
- &#x2018;<code class="Li">)</code>&#x2019; characters.</p>
-<div class="Bd Pp Li">
-<pre> error = function(a1, a2);
- if (error != 0)
- exit(error);</pre>
-</div>
-<p class="Pp">Unary operators do not require spaces, binary operators do. Do not
- use parentheses unless they are required for precedence or unless the
- statement is confusing without them. Remember that other people may confuse
- easier than you. Do YOU understand the following?</p>
-<div class="Bd Pp Li">
-<pre> a = b-&gt;c[0] + ~d == (e || f) || g &amp;&amp; h ? i : j &gt;&gt; 1;
- k = !(l &amp; FLAGS);</pre>
-</div>
-<p class="Pp">Exits should be 0 on success, or 1 on failure.</p>
-<div class="Bd Pp Li">
-<pre> exit(0); /*
- * Avoid obvious comments such as
- * &quot;Exit 0 on success.&quot;
- */
-}</pre>
-</div>
-<p class="Pp">The function type should be on a line by itself preceding the
- function. The opening brace of the function body should be on a line by
- itself.</p>
-<div class="Bd Pp Li">
-<pre>static char *
-function(int a1, int a2, float fl, int a4, struct bar *bar)
-{</pre>
-</div>
-<p class="Pp">When declaring variables in functions declare them sorted by size,
- then in alphabetical order; multiple ones per line are okay. If a line
- overflows reuse the type keyword. Variables may be initialized where
- declared especially when they are constant for the rest of the scope.
- Declarations may be in any block, but must be placed before statements.
- Calls to complicated functions should be avoided when initializing
- variables.</p>
-<div class="Bd Pp Li">
-<pre> struct foo one, *two;
- struct baz *three = bar_get_baz(bar);
- double four;
- int *five, six;
- char *seven, eight, nine, ten, eleven, twelve;
-
- four = my_complicated_function(a1, f1, a4);</pre>
-</div>
-<p class="Pp">Do not declare functions inside other functions; ANSI C says that
- such declarations have file scope regardless of the nesting of the
- declaration. Hiding file declarations in what appears to be a local scope is
- undesirable and will elicit complaints from a good compiler.</p>
-<p class="Pp" id="sizeof">Casts and <code class="Ic">sizeof</code>'s are not
- followed by a space. <code class="Ic">sizeof</code>'s are written with
- parenthesis always. The redundant parenthesis rules do not apply to
- <a class="permalink" href="#sizeof"><code class="Fn">sizeof</code></a>(<var class="Fa">var</var>)
- instances.</p>
-<p class="Pp"><code class="Dv">NULL</code> is the preferred null pointer
- constant. Use <code class="Dv">NULL</code> instead of (<var class="Vt">type
- *</var>)0 or (<var class="Vt">type *</var>)<code class="Dv">NULL</code> in
- contexts where the compiler knows the type, e.g., in assignments. Use
- (<var class="Vt">type *</var>)<code class="Dv">NULL</code> in other
- contexts, in particular for all function args. (Casting is essential for
- variadic args and is necessary for other args if the function prototype
- might not be in scope.) Test pointers against <code class="Dv">NULL</code>,
- e.g., use:</p>
-<div class="Bd Pp Li">
-<pre>(p = f()) == NULL</pre>
-</div>
-<p class="Pp">not:</p>
-<div class="Bd Pp Li">
-<pre>!(p = f())</pre>
-</div>
-<p class="Pp">Do not test without a comparison, or with unary
- <code class="Ic">!</code> (except for booleans). For example, use:</p>
-<div class="Bd Pp Li">
-<pre>if (*p == '\0')</pre>
-</div>
-<p class="Pp">not:</p>
-<div class="Bd Pp Li">
-<pre>if (!*p)</pre>
-</div>
-<p class="Pp">Prefer:</p>
-<div class="Bd Pp Li">
-<pre>if (count != 0)</pre>
-</div>
-<p class="Pp">over:</p>
-<div class="Bd Pp Li">
-<pre>if (count)</pre>
-</div>
-<p class="Pp">Routines returning <var class="Vt">void *</var> should not have
- their return values cast to any pointer type.</p>
-<p class="Pp">Values in <code class="Ic">return</code> statements should be
- enclosed in parentheses.</p>
-<p class="Pp">Use <a class="Xr">err(3)</a> or <a class="Xr">warn(3)</a>, do not
- roll your own.</p>
-<div class="Bd Pp Li">
-<pre> if ((four = malloc(sizeof(struct foo))) == NULL)
- err(1, (char *)NULL);
- if ((six = (int *)overflow()) == NULL)
- errx(1, &quot;number overflowed&quot;);
- return (eight);
-}</pre>
-</div>
-<p class="Pp">Do not use K&amp;R style declarations or definitions, they are
- obsolete and are forbidden in C23. Compilers warn of their use and some
- treat them as an error by default. When converting K&amp;R style definitions
- to ANSI style, preserve any comments about parameters.</p>
-<p class="Pp">Long parameter lists are wrapped with a normal four space
- indent.</p>
-<p class="Pp">Variable numbers of arguments should look like this:</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;stdarg.h&gt;
-
-void
-vaf(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- STUFF;
- va_end(ap);
- /* No return needed for void functions. */
-}
-
-static void
-usage(void)
-{</pre>
-</div>
-<p class="Pp">Functions should have local variable declarations first, followed
- by one blank line, followed by the first statement. If no local variables
- are declared, the first line should be a statement. Older versions of this
- <code class="Nm">style</code> document required a blank line before code.
- Such lines should be removed when significant changes are made to the
- code.</p>
-<p class="Pp">Use <a class="Xr">printf(3)</a>, not <a class="Xr">fputs(3)</a>,
- <a class="Xr">puts(3)</a>, <a class="Xr">putchar(3)</a>, whatever; it is
- faster and usually cleaner, not to mention avoiding stupid bugs.</p>
-<p class="Pp">Usage statements should look like the manual pages
- <a class="Sx" href="#SYNOPSIS">SYNOPSIS</a>. The usage statement should be
- structured in the following order:</p>
-<ol class="Bl-enum">
- <li>Options without operands come first, in alphabetical order, inside a
- single set of brackets (&#x2018;<code class="Li">[</code>&#x2019; and
- &#x2018;<code class="Li">]</code>&#x2019;).</li>
- <li>Options with operands come next, also in alphabetical order, with each
- option and its argument inside its own pair of brackets.</li>
- <li>Required arguments (if any) are next, listed in the order they should be
- specified on the command line.</li>
- <li>Finally, any optional arguments should be listed, listed in the order they
- should be specified, and all inside brackets.</li>
-</ol>
-<p class="Pp">A bar (&#x2018;<code class="Li">|</code>&#x2019;) separates
- &#x201C;either-or&#x201D; options/arguments, and multiple options/arguments
- which are specified together are placed in a single set of brackets.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>&quot;usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\n&quot;
-&quot;usage: f [-a | -b] [-c [-dEe] [-n number]]\n&quot;</pre>
-</div>
-<div class="Bd Pp Li">
-<pre> (void)fprintf(stderr, &quot;usage: f [-ab]\n&quot;);
- exit(1);
-}</pre>
-</div>
-<p class="Pp">Note that the manual page options description should list the
- options in pure alphabetical order. That is, without regard to whether an
- option takes arguments or not. The alphabetical ordering should take into
- account the case ordering shown above.</p>
-<p class="Pp">Whenever possible, code should be run through a code checker
- (e.g., various static analyzers or <code class="Nm">cc</code>
- <code class="Fl">-Wall</code>) and produce minimal warnings.</p>
-<p class="Pp" id="_Static_assert">New code should use
- <a class="permalink" href="#_Static_assert"><code class="Fn">_Static_assert</code></a>()
- instead of the older
- <a class="permalink" href="#CTASSERT"><code class="Fn" id="CTASSERT">CTASSERT</code></a>().</p>
-<p class="Pp" id="__predict_true"><a class="permalink" href="#__predict_true"><code class="Fn">__predict_true</code></a>()
- and
- <a class="permalink" href="#__predict_false"><code class="Fn" id="__predict_false">__predict_false</code></a>()
- should only be used in frequently executed code when it makes the code
- measurably faster. It is wasteful to make predictions for infrequently run
- code, like subsystem initialization. When using branch prediction hints,
- atypical error conditions should use
- <code class="Fn">__predict_false</code>() (document the exceptions).
- Operations that almost always succeed use
- <code class="Fn">__predict_true</code>(). Only use the annotation for the
- entire if statement, rather than individual clauses. Do not add these
- annotations without empirical evidence of the likelihood of the branch.</p>
-<p class="Pp">New core kernel code should be compliant with the
- <code class="Nm">style</code> guides. The guidelines for third-party
- maintained modules and device drivers are more relaxed. Their code is
- expected to at least be internally consistent with their style.</p>
-<p class="Pp">Stylistic changes, including whitespace ones, complicate the work
- of downstream consumers and may impair developers' ability to trace the
- history of some changes. Such standalone must be avoided, and should not
- span unrelated directories as this increases the chances of conflicts when
- merging to stable and release branches (MFCs). On the other hand, when a
- significant portion, usually about a half, of some logical unit of code, be
- it a function, group of functions, file or group of files, is going to be
- modified, developers are encouraged to amend the style of the whole unit as
- described in this document. In this case, style changes to otherwise
- unmodified code should be committed separately. Style-only commits should be
- added to the file <span class="Pa">.git-blame-ignore-revs</span> at the top
- of the source repository to hide them from &#x2018;<code class="Li">git
- blame</code>&#x2019;. Comments in this file indicate how to use it. Code
- that is approximately <span class="Ux">FreeBSD</span> KNF
- <code class="Nm">style</code> compliant in the repository must not diverge
- from compliance.</p>
-<section class="Ss">
-<h2 class="Ss" id="C++"><a class="permalink" href="#C++">C++</a></h2>
-<p class="Pp">KNF style was originally defined as a style for C. C++ introduces
- several new idioms which do not have an existing corollary in KNF C such as
- inline function definitions in classes. C++ is also not always compatible
- with some KNF guidelines such as enclosing return values in parentheses. For
- C++ code, FreeBSD aims to follow broadly accepted C++ practices while also
- following the general shape of KNF. This section enumerates C++ specific
- guidelines that differ from KNF C.</p>
-<p class="Pp">The preferred suffixes for C++ source files are
- &#x201C;.cc&#x201D; and &#x201C;.hh&#x201D;. Header files should always use
- a suffix, unlike headers from the C++ standard library.</p>
-<p class="Pp">Return values should not be enclosed in parentheses. When
- converting existing C code to C++, existing return values may remain in
- parentheses.</p>
-<p class="Pp">The opening curly brace for namespace declarations should be on
- the first line similar to structure and class definitions. Nested namespaces
- should be declared using a single namespace declaration.</p>
-<div class="Bd Pp Li">
-<pre>namespace foo::bar {
-}</pre>
-</div>
-<p class="Pp">Member function declarations should follow the same style used for
- standalone function prototypes except that a space should be used between a
- function's return type and name.</p>
-<p class="Pp">Function definitions at the top level should use a newline after
- the function type similar to C function definitions.</p>
-<p class="Pp">Nested member function definitions inside of a class, structure,
- or union should not use a newline after the function type. Instead, these
- should follow the style of member function declarations. This is more common
- C++ style and is more compact for small methods such as getters and
- setters.</p>
-<p class="Pp">Inline functions whose body consists of a single statement may use
- a single line for the function body. Inline functions with an empty body
- should always use a single line.</p>
-<div class="Bd Pp Li">
-<pre>struct widget {
- int foo() { return 4; }
- int bar();
-};
-
-int
-widget::bar()
-{
- return 6;
-}</pre>
-</div>
-<p class="Pp">Default and deleted methods should be declared as a single
- line.</p>
-<div class="Bd Pp Li">
-<pre>class box {
- ~box() = default;
-};</pre>
-</div>
-<p class="Pp">In template declarations, the <code class="Ic">template</code>
- keyword and list of template parameters should be followed by a newline
- before the templated declaration.</p>
-<div class="Bd Pp Li">
-<pre>template &lt;typename T&gt;
-class box {
- T data;
-};</pre>
-</div>
-<p class="Pp">The <code class="Ic">&amp;</code> for reference variables should
- be placed on the variable name rather than the type similar to the style
- used with <code class="Ic">*</code> for pointers.</p>
-<div class="Bd Pp Li">
-<pre> int x;
- int &amp;xp = x;</pre>
-</div>
-<p class="Pp">Variables may be declared at any point within a function, not just
- at the start of blocks.</p>
-<p class="Pp">Standard library containers should be used in preference to
- <a class="Xr">queue(3)</a> or <a class="Xr">tree(3)</a> macros.</p>
-<p class="Pp"><code class="Ic">nullptr</code> should be used instead of
- <code class="Dv">NULL</code> or 0.</p>
-<p class="Pp">Use standard library types for managing strings such as
- <var class="Vt">std::string</var> and <var class="Vt">std::string_view</var>
- rather than <var class="Vt">char *</var> and <var class="Vt">const char
- *</var>. C types may be used when interfacing with C code.</p>
-<p class="Pp" id="std::make_unique">The <code class="Ic">auto</code> keyword can
- be used in various contexts which improve readability. Examples include
- iterators, non-trivial types of ranged-for values, and return values of
- obvious types, such as <code class="Ic">static_cast</code> or
- <a class="permalink" href="#std::make_unique"><code class="Fn">std::make_unique</code></a>().
- Place any qualifiers before <code class="Ic">auto</code>, for example:
- <code class="Ic">const auto</code>.</p>
-<p class="Pp" id="std::make_unique~2">Use the
- <var class="Vt">std::unique_ptr</var> and
- <var class="Vt">std::shared_ptr</var> smart pointers to manage the lifetime
- of dynamically allocated objects instead of <code class="Ic">new</code> and
- <code class="Ic">delete</code>. Construct smart pointers with
- <a class="permalink" href="#std::make_unique~2"><code class="Fn">std::make_unique</code></a>()
- or
- <a class="permalink" href="#std::make_shared"><code class="Fn" id="std::make_shared">std::make_shared</code></a>().
- Do not use <a class="Xr">malloc(3)</a> except when necessary to interface
- with C code.</p>
-<p class="Pp">Do not import any namespaces with <code class="Ic">using</code> at
- global scope in header files. Namespaces other than the
- <code class="Ic">std</code> namespace (for example,
- <code class="Ic">std::literals</code>) may be imported in source files and
- in function scope in header files.</p>
-<p class="Pp">Define type aliases using <code class="Ic">using</code> instead of
- <code class="Ic">typedef</code>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag">
- <dt><span class="Pa">/usr/src/tools/build/checkstyle9.pl</span></dt>
- <dd>A script to check for violations of <code class="Nm">style</code> in a
- source file.</dd>
- <dt><span class="Pa">/usr/src/tools/tools/editing/freebsd.el</span></dt>
- <dd>An Emacs plugin to follow the <span class="Ux">FreeBSD</span>
- <code class="Nm">style</code> indentation rules.</dd>
- <dt><span class="Pa">/usr/src/tools/tools/editing/freebsd.vim</span></dt>
- <dd>A Vim plugin to follow the <span class="Ux">FreeBSD</span>
- <code class="Nm">style</code> indentation rules.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">indent(1)</a>, <a class="Xr">err(3)</a>,
- <a class="Xr">warn(3)</a>, <a class="Xr">style.Makefile(5)</a>,
- <a class="Xr">style.mdoc(5)</a>, <a class="Xr">style.lua(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This manual page was originally based on the
- <span class="Pa">src/admin/style/style</span> file from the
- <span class="Ux">4.4BSD-Lite2</span> release, with frequent updates to
- reflect the current practice and desire of the
- <span class="Ux">FreeBSD</span> project.
- <span class="Pa">src/admin/style/style</span> is a codification by the CSRG
- of the programming style of Ken Thompson and Dennis Ritchie in
- <span class="Ux">Version&#x00A0;6 AT&amp;T UNIX</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 28, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/style.lua.9 3.html b/static/freebsd/man9/style.lua.9 3.html
deleted file mode 100644
index 94053bfd..00000000
--- a/static/freebsd/man9/style.lua.9 3.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">STYLE.LUA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">STYLE.LUA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">style.lua</code> &#x2014;
- <span class="Nd"><span class="Ux">FreeBSD</span> lua file style
- guide</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This file specifies the preferred style for lua source files in
- the <span class="Ux">FreeBSD</span> source tree. Many of the style rules are
- implicit in the examples. Be careful to check the examples before assuming
- that <code class="Nm">style.lua</code> is silent on an issue.</p>
-<p class="Pp">The copyright header should be a series of single-line comments.
- Use the single-line comment style for every line in a multi-line
- comment.</p>
-<p class="Pp">After any copyright header there is a blank line.</p>
-<p class="Pp" id="require">The preferred method of including other files and
- modules is with
- <a class="permalink" href="#require"><code class="Fn">require</code></a>(<var class="Fa">name</var>),
- such as:</p>
-<div class="Bd Pp Li">
-<pre>-- License block
-
-config = require(&quot;config&quot;);
-menu = require(&quot;menu&quot;);
-password = require(&quot;password&quot;);
--- One blank line following the module require block</pre>
-</div>
-<p class="Pp" id="include"><a class="permalink" href="#include"><code class="Fn">include</code></a>()
- is generally avoided.</p>
-<p class="Pp">Indentation and wrapping should match the guidelines provided by
- <a class="Xr">style(9)</a>. Do note that it is ok to wrap much earlier than
- 80 columns if readability would otherwise suffer.</p>
-<p class="Pp" id="s:method">Where possible,
- <a class="permalink" href="#s:method"><code class="Fn">s:method</code></a>(<var class="Fa">...</var>)
- is preferred to
- <a class="permalink" href="#method"><code class="Fn" id="method">method</code></a>(<var class="Fa">s</var>,
- <var class="Fa">...</var>). This is applicable to objects with methods.
- String are a commonly-used example of objects with methods.</p>
-<p class="Pp">Testing for <var class="Va">nil</var> should be done explicitly,
- rather than as a boolean expression. Single-line conditional statements and
- loops should be avoided.</p>
-<p class="Pp"><code class="Ic">local</code> variables should be preferred to
- global variables in module scope. internal_underscores tend to be preferred
- for variable identifiers, while camelCase tends to be preferred for function
- identifiers.</p>
-<p class="Pp">If a table definition spans multiple lines, then the final value
- in the table should include the optional terminating comma. For example:</p>
-<div class="Bd Pp Li">
-<pre>-- No terminating comma needed for trivial table definitions
-local trivial_table = {1, 2, 3, 4}
-
-local complex_table = {
- {
- id = &quot;foo&quot;,
- func = foo_function, -- Trailing comma preferred
- },
- {
- id = &quot;bar&quot;,
- func = bar_function,
- }, -- Trailing comma preferred
-}</pre>
-</div>
-<p class="Pp">This reduces the chance for errors to be introduced when modifying
- more complex tables.</p>
-<p class="Pp" id="and">Multiple local variables should not be declared
- <a class="permalink" href="#and"><b class="Sy">and</b></a> initialized on a
- single line. Lines containing multiple variable declarations without
- initialization are ok. Lines containing multiple variable declarations
- initialized to a single function call returning a tuple with the same number
- of values is also ok.</p>
-<p class="Pp" id="should">Initialization
- <a class="permalink" href="#should"><b class="Sy">should</b></a> be done at
- declaration time as appropriate.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">style(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This manual page is inspired from the same source as
- <a class="Xr">style(9)</a> manual page in
- <span class="Ux">FreeBSD</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 25, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/superio.9 4.html b/static/freebsd/man9/superio.9 4.html
deleted file mode 100644
index c933e7e5..00000000
--- a/static/freebsd/man9/superio.9 4.html
+++ /dev/null
@@ -1,195 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SUPERIO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SUPERIO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">superio</code>,
- <code class="Nm">superio_devid</code>,
- <code class="Nm">superio_dev_disable</code>,
- <code class="Nm">superio_dev_enable</code>,
- <code class="Nm">superio_dev_enabled</code>,
- <code class="Nm">superio_find_dev</code>,
- <code class="Nm">superio_get_dma</code>,
- <code class="Nm">superio_get_iobase</code>,
- <code class="Nm">superio_get_irq</code>,
- <code class="Nm">superio_get_ldn</code>,
- <code class="Nm">superio_get_type</code>,
- <code class="Nm">superio_read</code>, <code class="Nm">superio_revid</code>,
- <code class="Nm">superio_vendor</code>,
- <code class="Nm">superio_write</code> &#x2014; <span class="Nd">Super I/O
- bus interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/superio/superio.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">superio_devid</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">superio_dev_disable</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- mask</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">superio_dev_enable</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- mask</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">superio_dev_enabled</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- mask</var>);</p>
-<p class="Pp"><var class="Ft">device_t</var>
- <br/>
- <code class="Fn">superio_find_dev</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">superio_dev_type_t
- type</var>, <var class="Fa" style="white-space: nowrap;">int ldn</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">superio_get_dma</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">superio_get_iobase</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">superio_get_irq</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">superio_get_ldn</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">superio_dev_type_t</var>
- <br/>
- <code class="Fn">superio_get_type</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">superio_read</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- reg</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">superio_revid</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">superio_vendor_t</var>
- <br/>
- <code class="Fn">superio_vendor</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">superio_write</code>(<var class="Fa" style="white-space: nowrap;">device_t
- dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t reg</var>,
- <var class="Fa" style="white-space: nowrap;">uint8_t val</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">superio</code> set of functions are used for
- managing Super I/O devices. The functions provide support for raw
- configuration access, locating devices, device information, and device
- configuration.</p>
-<section class="Ss">
-<h2 class="Ss" id="The_controller_interface"><a class="permalink" href="#The_controller_interface">The
- controller interface</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#superio_vendor"><code class="Fn" id="superio_vendor">superio_vendor</code></a>()
- function is used to get a vendor of the Super I/O controller
- <var class="Fa">dev</var>. Possible return values are
- <code class="Dv">SUPERIO_VENDOR_ITE</code> and
- <code class="Dv">SUPERIO_VENDOR_NUVOTON</code>.</p>
-<p class="Pp" id="superio_devid">The
- <a class="permalink" href="#superio_devid"><code class="Fn">superio_devid</code></a>()
- function is used to get a device ID of the Super I/O controller
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_revid">The
- <a class="permalink" href="#superio_revid"><code class="Fn">superio_revid</code></a>()
- function is used to get a revision ID of the Super I/O controller
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_find_dev">The
- <a class="permalink" href="#superio_find_dev"><code class="Fn">superio_find_dev</code></a>()
- function is used to find a device on the <a class="Xr">superio(4)</a> bus,
- specified by <var class="Fa">dev</var>, that has the requested type and
- logical device number. Either of those, but not both, can be a wildcard.
- Supported types are <code class="Dv">SUPERIO_DEV_GPIO</code>,
- <code class="Dv">SUPERIO_DEV_HWM</code>, and
- <code class="Dv">SUPERIO_DEV_WDT</code>. The wildcard value for
- <var class="Fa">type</var> is <code class="Dv">SUPERIO_DEV_NONE</code>. The
- wildcard value for <var class="Fa">ldn</var> is -1.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_device_interface"><a class="permalink" href="#The_device_interface">The
- device interface</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#superio_read"><code class="Fn" id="superio_read">superio_read</code></a>()
- function is used to read data from the Super I/O configuration register of
- the device <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_write">The
- <a class="permalink" href="#superio_write"><code class="Fn">superio_write</code></a>()
- function is used to write data to the Super I/O configuration register of
- the device <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_dev_enable">The
- <a class="permalink" href="#superio_dev_enable"><code class="Fn">superio_dev_enable</code></a>(),
- <a class="permalink" href="#superio_dev_disable"><code class="Fn" id="superio_dev_disable">superio_dev_disable</code></a>(),
- and
- <a class="permalink" href="#superio_dev_enabled"><code class="Fn" id="superio_dev_enabled">superio_dev_enabled</code></a>()
- functions are used to enable, disable, or check status of the device
- <var class="Fa">dev</var>. The <var class="Fa">mask</var> parameter selects
- sub-functions of a device that supports them. For devices that do not have
- sub-functions, <var class="Fa">mask</var> should be set to 1.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="The_accessor_interface"><a class="permalink" href="#The_accessor_interface">The
- accessor interface</a></h2>
-<p class="Pp">The
- <a class="permalink" href="#superio_get_dma"><code class="Fn" id="superio_get_dma">superio_get_dma</code></a>()
- is used to get a DMA channel number configured for the device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_get_iobase">The
- <a class="permalink" href="#superio_get_iobase"><code class="Fn">superio_get_iobase</code></a>()
- is used to get a base I/O port configured for the device
- <var class="Fa">dev</var>. The device may expose additional or alternative
- configuration access via the I/O ports.</p>
-<p class="Pp" id="superio_get_irq">The
- <a class="permalink" href="#superio_get_irq"><code class="Fn">superio_get_irq</code></a>()
- is used to get an interrupt number configured for the device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_get_ldn">The
- <a class="permalink" href="#superio_get_ldn"><code class="Fn">superio_get_ldn</code></a>()
- is used to get a Logical Device Number of the device
- <var class="Fa">dev</var>.</p>
-<p class="Pp" id="superio_get_type">The
- <a class="permalink" href="#superio_get_type"><code class="Fn">superio_get_type</code></a>()
- is used to get a type of the device <var class="Fa">dev</var>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">superio(4)</a>, <a class="Xr">device(9)</a>,
- <a class="Xr">driver(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Andriy
- Gapon</span>
- <a class="Mt" href="mailto:avg@FreeBSD.org">avg@FreeBSD.org</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 11, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/swi.9 3.html b/static/freebsd/man9/swi.9 3.html
deleted file mode 100644
index e6f547e6..00000000
--- a/static/freebsd/man9/swi.9 3.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SWI(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SWI(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">swi_add</code>,
- <code class="Nm">swi_remove</code>, <code class="Nm">swi_sched</code>
- &#x2014; <span class="Nd">register and schedule software interrupt
- handlers</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/bus.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/interrupt.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern struct intr_event
- *clk_intr_event</var>;</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">swi_add</code>(<var class="Fa">struct intr_event
- **eventp</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">driver_intr_t handler</var>, <var class="Fa">void
- *arg</var>, <var class="Fa">int pri</var>, <var class="Fa">enum intr_type
- flags</var>, <var class="Fa">void **cookiep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">swi_remove</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">swi_sched</code>(<var class="Fa" style="white-space: nowrap;">void
- *cookie</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions are used to register and schedule software
- interrupt handlers. Software interrupt handlers are attached to a software
- interrupt thread, just as hardware interrupt handlers are attached to a
- hardware interrupt thread. Multiple handlers can be attached to the same
- thread. Software interrupt handlers can be used to queue up less critical
- processing inside of hardware interrupt handlers so that the work can be
- done at a later time. Software interrupt threads are different from other
- kernel threads in that they are treated as an interrupt thread. This means
- that time spent executing these threads is counted as interrupt time, and
- that they can be run via a lightweight context switch.</p>
-<p class="Pp" id="swi_add">The
- <a class="permalink" href="#swi_add"><code class="Fn">swi_add</code></a>()
- function is used to add a new software interrupt handler to a specified
- interrupt event. The <var class="Fa">eventp</var> argument is an optional
- pointer to a <var class="Vt">struct intr_event</var> pointer. If this
- argument points to an existing event that holds a list of interrupt
- handlers, then this handler will be attached to that event. Otherwise a new
- event will be created, and if <var class="Fa">eventp</var> is not
- <code class="Dv">NULL</code>, then the pointer at that address to will be
- modified to point to the newly created event. The <var class="Fa">name</var>
- argument is used to associate a name with a specific handler. This name is
- appended to the name of the software interrupt thread that this handler is
- attached to. The <var class="Fa">handler</var> argument is the function that
- will be executed when the handler is scheduled to run. The
- <var class="Fa">arg</var> parameter will be passed in as the only parameter
- to <var class="Fa">handler</var> when the function is executed. The
- <var class="Fa">pri</var> value specifies the priority of this interrupt
- handler relative to other software interrupt handlers. If an interrupt event
- is created, then this value is used as the vector, and the
- <var class="Fa">flags</var> argument is used to specify the attributes of a
- handler such as <code class="Dv">INTR_MPSAFE</code>. The
- <var class="Fa">cookiep</var> argument points to a <var class="Vt">void
- *</var> cookie. This cookie will be set to a value that uniquely identifies
- this handler, and is used to schedule the handler for execution later
- on.</p>
-<p class="Pp" id="swi_remove">The
- <a class="permalink" href="#swi_remove"><code class="Fn">swi_remove</code></a>()
- function is used to teardown an interrupt handler pointed to by the
- <var class="Fa">cookie</var> argument. It detaches the interrupt handler
- from the associated interrupt event and frees its memory.</p>
-<p class="Pp" id="swi_sched">The
- <a class="permalink" href="#swi_sched"><code class="Fn">swi_sched</code></a>()
- function is used to schedule an interrupt handler and its associated thread
- to run. The <var class="Fa">cookie</var> argument specifies which software
- interrupt handler should be scheduled to run. The
- <var class="Fa">flags</var> argument specifies how and when the handler
- should be run and is a mask of one or more of the following flags:</p>
-<dl class="Bl-tag">
- <dt id="SWI_DELAY"><a class="permalink" href="#SWI_DELAY"><code class="Dv">SWI_DELAY</code></a></dt>
- <dd>Specifies that the kernel should mark the specified handler as needing to
- run, but the kernel should not schedule the software interrupt thread to
- run. Instead, <var class="Fa">handler</var> will be executed the next time
- that the software interrupt thread runs after being scheduled by another
- event.</dd>
- <dt id="SWI_FROMNMI"><a class="permalink" href="#SWI_FROMNMI"><code class="Dv">SWI_FROMNMI</code></a></dt>
- <dd>Specifies that <code class="Fn">swi_sched</code>() is called from NMI
- context and should be careful about used KPIs. On platforms allowing IPI
- sending from NMI context it immediately wakes
- <var class="Va">clk_intr_event</var> via the IPI, otherwise it works just
- like SWI_DELAY.</dd>
-</dl>
-<p class="Pp"><var class="Va">clk_intr_event</var> is a pointer to the
- <var class="Vt">struct intr_event</var> used to hang delayed handlers off of
- the clock interrupt, and is invoked directly by
- <a class="Xr">hardclock(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">swi_add</code>() and
- <code class="Fn">swi_remove</code>() functions return zero on success and
- non-zero on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">swi_add</code>() function will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt>
- <dd>The system-imposed limit on the total number of processes under execution
- would be exceeded. The limit is given by the <a class="Xr">sysctl(3)</a>
- MIB variable <code class="Dv">KERN_MAXPROC</code>.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">flags</var> argument specifies
- <code class="Dv">INTR_ENTROPY</code>.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">eventp</var> argument points to a hardware interrupt
- thread.</dd>
- <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt>
- <dd>Either of the <var class="Fa">name</var> or <var class="Fa">handler</var>
- arguments are <code class="Dv">NULL</code>.</dd>
- <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <code class="Dv">INTR_EXCL</code> flag is specified and the interrupt
- event pointed to by <var class="Fa">eventp</var> already has at least one
- handler, or the interrupt event already has an exclusive handler.</dd>
-</dl>
-<p class="Pp">The <code class="Fn">swi_remove</code>() function will fail
- if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt>
- <dd>A software interrupt handler pointed to by <var class="Fa">cookie</var> is
- <code class="Dv">NULL</code>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">hardclock(9)</a>, <a class="Xr">intr_event(9)</a>,
- <a class="Xr">taskqueue(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">swi_add</code>() and
- <code class="Fn">swi_sched</code>() functions first appeared in
- <span class="Ux">FreeBSD 5.0</span>. They replaced the
- <code class="Fn">register_swi</code>() function which appeared in
- <span class="Ux">FreeBSD 3.0</span> and the
- <code class="Fn">setsoft*</code>(), and <code class="Fn">schedsoft*</code>()
- functions which date back to at least <span class="Ux">4.4BSD</span>. The
- <code class="Fn">swi_remove</code>() function first appeared in
- <span class="Ux">FreeBSD 6.1</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 12, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sx.9 4.html b/static/freebsd/man9/sx.9 4.html
deleted file mode 100644
index 3e4feed3..00000000
--- a/static/freebsd/man9/sx.9 4.html
+++ /dev/null
@@ -1,301 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SX(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SX(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sx</code>, <code class="Nm">sx_init</code>,
- <code class="Nm">sx_init_flags</code>, <code class="Nm">sx_destroy</code>,
- <code class="Nm">sx_slock</code>, <code class="Nm">sx_xlock</code>,
- <code class="Nm">sx_slock_sig</code>, <code class="Nm">sx_xlock_sig</code>,
- <code class="Nm">sx_try_slock</code>, <code class="Nm">sx_try_xlock</code>,
- <code class="Nm">sx_sunlock</code>, <code class="Nm">sx_xunlock</code>,
- <code class="Nm">sx_unlock</code>, <code class="Nm">sx_try_upgrade</code>,
- <code class="Nm">sx_downgrade</code>, <code class="Nm">sx_sleep</code>,
- <code class="Nm">sx_xholder</code>, <code class="Nm">sx_xlocked</code>,
- <code class="Nm">sx_assert</code>, <code class="Nm">SX_SYSINIT</code>,
- <code class="Nm">SX_SYSINIT_FLAGS</code> &#x2014; <span class="Nd">kernel
- shared/exclusive lock</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lock.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sx.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_init</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>, <var class="Fa" style="white-space: nowrap;">const char
- *description</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>, <var class="Fa" style="white-space: nowrap;">const char
- *description</var>, <var class="Fa" style="white-space: nowrap;">int
- opts</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_slock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_slock_sig</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_xlock_sig</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_try_slock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_try_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_sunlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_xunlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_try_upgrade</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_downgrade</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_sleep</code>(<var class="Fa" style="white-space: nowrap;">void
- *chan</var>, <var class="Fa" style="white-space: nowrap;">struct sx
- *sx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>,
- <var class="Fa" style="white-space: nowrap;">int timo</var>);</p>
-<p class="Pp"><var class="Ft">struct thread *</var>
- <br/>
- <code class="Fn">sx_xholder</code>(<var class="Fa" style="white-space: nowrap;">struct
- sx *sx</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sx_xlocked</code>(<var class="Fa" style="white-space: nowrap;">const
- struct sx *sx</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">sx_assert</code>(<var class="Fa" style="white-space: nowrap;">const
- struct sx *sx</var>, <var class="Fa" style="white-space: nowrap;">int
- what</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/kernel.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SX_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct sx *sx</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p>
-<p class="Pp"><code class="Fn">SX_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">struct sx *sx</var>,
- <var class="Fa" style="white-space: nowrap;">const char *desc</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Shared/exclusive locks are used to protect data that are read far
- more often than they are written. Shared/exclusive locks do not implement
- priority propagation like mutexes and reader/writer locks to prevent
- priority inversions, so shared/exclusive locks should be used prudently.</p>
-<p class="Pp" id="sx_init">Shared/exclusive locks are created with either
- <a class="permalink" href="#sx_init"><code class="Fn">sx_init</code></a>()
- or
- <a class="permalink" href="#sx_init_flags"><code class="Fn" id="sx_init_flags">sx_init_flags</code></a>()
- where <var class="Fa">sx</var> is a pointer to space for a
- <var class="Vt">struct sx</var>, and <var class="Fa">description</var> is a
- pointer to a null-terminated character string that describes the
- shared/exclusive lock. The <var class="Fa">opts</var> argument to
- <code class="Fn">sx_init_flags</code>() specifies a set of optional flags to
- alter the behavior of <var class="Fa">sx</var>. It contains one or more of
- the following flags:</p>
-<dl class="Bl-tag">
- <dt id="SX_DUPOK"><a class="permalink" href="#SX_DUPOK"><code class="Dv">SX_DUPOK</code></a></dt>
- <dd>Witness should not log messages about duplicate locks being acquired.</dd>
- <dt id="SX_NOWITNESS"><a class="permalink" href="#SX_NOWITNESS"><code class="Dv">SX_NOWITNESS</code></a></dt>
- <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd>
- <dt id="SX_NOPROFILE"><a class="permalink" href="#SX_NOPROFILE"><code class="Dv">SX_NOPROFILE</code></a></dt>
- <dd>Do not profile this lock.</dd>
- <dt id="SX_RECURSE"><a class="permalink" href="#SX_RECURSE"><code class="Dv">SX_RECURSE</code></a></dt>
- <dd>Allow threads to recursively acquire exclusive locks for
- <var class="Fa">sx</var>.</dd>
- <dt id="SX_QUIET"><a class="permalink" href="#SX_QUIET"><code class="Dv">SX_QUIET</code></a></dt>
- <dd>Do not log any operations for this lock via <a class="Xr">ktr(4)</a>.</dd>
- <dt id="SX_NEW"><a class="permalink" href="#SX_NEW"><code class="Dv">SX_NEW</code></a></dt>
- <dd>If the kernel has been compiled with <code class="Cd">options
- INVARIANTS</code>, <code class="Fn">sx_init</code>() will assert that the
- <var class="Fa">sx</var> has not been initialized multiple times without
- intervening calls to <code class="Fn">sx_destroy</code>() unless this
- option is specified.</dd>
-</dl>
-<p class="Pp" id="sx_destroy">Shared/exclusive locks are destroyed with
- <a class="permalink" href="#sx_destroy"><code class="Fn">sx_destroy</code></a>().
- The lock <var class="Fa">sx</var> must not be locked by any thread when it
- is destroyed.</p>
-<p class="Pp" id="sx_slock">Threads acquire and release a shared lock by calling
- <a class="permalink" href="#sx_slock"><code class="Fn">sx_slock</code></a>(),
- <code class="Fn">sx_slock_sig</code>() or
- <code class="Fn">sx_try_slock</code>() and
- <code class="Fn">sx_sunlock</code>() or <code class="Fn">sx_unlock</code>().
- Threads acquire and release an exclusive lock by calling
- <a class="permalink" href="#sx_xlock"><code class="Fn" id="sx_xlock">sx_xlock</code></a>(),
- <code class="Fn">sx_xlock_sig</code>() or
- <code class="Fn">sx_try_xlock</code>() and
- <code class="Fn">sx_xunlock</code>() or <code class="Fn">sx_unlock</code>().
- A thread can attempt to upgrade a currently held shared lock to an exclusive
- lock by calling <code class="Fn">sx_try_upgrade</code>(). A thread that has
- an exclusive lock can downgrade it to a shared lock by calling
- <a class="permalink" href="#sx_downgrade"><code class="Fn" id="sx_downgrade">sx_downgrade</code></a>().</p>
-<p class="Pp" id="sx_try_slock"><a class="permalink" href="#sx_try_slock"><code class="Fn">sx_try_slock</code></a>()
- and
- <a class="permalink" href="#sx_try_xlock"><code class="Fn" id="sx_try_xlock">sx_try_xlock</code></a>()
- will return 0 if the shared/exclusive lock cannot be acquired immediately;
- otherwise the shared/exclusive lock will be acquired and a non-zero value
- will be returned.</p>
-<p class="Pp" id="sx_try_upgrade"><a class="permalink" href="#sx_try_upgrade"><code class="Fn">sx_try_upgrade</code></a>()
- will return 0 if the shared lock cannot be upgraded to an exclusive lock
- immediately; otherwise the exclusive lock will be acquired and a non-zero
- value will be returned.</p>
-<p class="Pp" id="sx_slock_sig"><a class="permalink" href="#sx_slock_sig"><code class="Fn">sx_slock_sig</code></a>()
- and
- <a class="permalink" href="#sx_xlock_sig"><code class="Fn" id="sx_xlock_sig">sx_xlock_sig</code></a>()
- do the same as their normal versions but performing an interruptible sleep.
- They return a non-zero value if the sleep has been interrupted by a signal
- or an interrupt, otherwise 0.</p>
-<p class="Pp" id="sx_sleep">A thread can atomically release a shared/exclusive
- lock while waiting for an event by calling
- <a class="permalink" href="#sx_sleep"><code class="Fn">sx_sleep</code></a>().
- For more details on the parameters to this function, see
- <a class="Xr">sleep(9)</a>.</p>
-<p class="Pp" id="sx_assert">When compiled with <code class="Cd">options
- INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>, the
- <a class="permalink" href="#sx_assert"><code class="Fn">sx_assert</code></a>()
- function tests <var class="Fa">sx</var> for the assertions specified in
- <var class="Fa">what</var>, and panics if they are not met. One of the
- following assertions must be specified:</p>
-<dl class="Bl-tag">
- <dt id="SA_LOCKED"><a class="permalink" href="#SA_LOCKED"><code class="Dv">SA_LOCKED</code></a></dt>
- <dd>Assert that the current thread has either a shared or an exclusive lock on
- the <var class="Vt">sx</var> lock pointed to by the first argument.</dd>
- <dt id="SA_SLOCKED"><a class="permalink" href="#SA_SLOCKED"><code class="Dv">SA_SLOCKED</code></a></dt>
- <dd>Assert that the current thread has a shared lock on the
- <var class="Vt">sx</var> lock pointed to by the first argument.</dd>
- <dt id="SA_XLOCKED"><a class="permalink" href="#SA_XLOCKED"><code class="Dv">SA_XLOCKED</code></a></dt>
- <dd>Assert that the current thread has an exclusive lock on the
- <var class="Vt">sx</var> lock pointed to by the first argument.</dd>
- <dt id="SA_UNLOCKED"><a class="permalink" href="#SA_UNLOCKED"><code class="Dv">SA_UNLOCKED</code></a></dt>
- <dd>Assert that the current thread has no lock on the <var class="Vt">sx</var>
- lock pointed to by the first argument.</dd>
-</dl>
-<p class="Pp">In addition, one of the following optional assertions may be
- included with either an <code class="Dv">SA_LOCKED</code>,
- <code class="Dv">SA_SLOCKED</code>, or <code class="Dv">SA_XLOCKED</code>
- assertion:</p>
-<dl class="Bl-tag">
- <dt id="SA_RECURSED"><a class="permalink" href="#SA_RECURSED"><code class="Dv">SA_RECURSED</code></a></dt>
- <dd>Assert that the current thread has a recursed lock on
- <var class="Fa">sx</var>.</dd>
- <dt id="SA_NOTRECURSED"><a class="permalink" href="#SA_NOTRECURSED"><code class="Dv">SA_NOTRECURSED</code></a></dt>
- <dd>Assert that the current thread does not have a recursed lock on
- <var class="Fa">sx</var>.</dd>
-</dl>
-<p class="Pp" id="sx_xholder"><a class="permalink" href="#sx_xholder"><code class="Fn">sx_xholder</code></a>()
- will return a pointer to the thread which currently holds an exclusive lock
- on <var class="Fa">sx</var>. If no thread holds an exclusive lock on
- <var class="Fa">sx</var>, then <code class="Dv">NULL</code> is returned
- instead.</p>
-<p class="Pp" id="sx_xlocked"><a class="permalink" href="#sx_xlocked"><code class="Fn">sx_xlocked</code></a>()
- will return non-zero if the current thread holds the exclusive lock;
- otherwise, it will return zero.</p>
-<p class="Pp" id="sx_unlock">For ease of programming,
- <a class="permalink" href="#sx_unlock"><code class="Fn">sx_unlock</code></a>()
- is provided as a macro frontend to the respective functions,
- <a class="permalink" href="#sx_sunlock"><code class="Fn" id="sx_sunlock">sx_sunlock</code></a>()
- and
- <a class="permalink" href="#sx_xunlock"><code class="Fn" id="sx_xunlock">sx_xunlock</code></a>().
- Algorithms that are aware of what state the lock is in should use either of
- the two specific functions for a minor performance benefit.</p>
-<p class="Pp" id="SX_SYSINIT">The
- <a class="permalink" href="#SX_SYSINIT"><code class="Fn">SX_SYSINIT</code></a>()
- macro is used to generate a call to the
- <a class="permalink" href="#sx_sysinit"><code class="Fn" id="sx_sysinit">sx_sysinit</code></a>()
- routine at system startup in order to initialize a given
- <var class="Fa">sx</var> lock. The parameters are the same as
- <code class="Fn">sx_init</code>() but with an additional argument,
- <var class="Fa">name</var>, that is used in generating unique variable names
- for the related structures associated with the lock and the sysinit routine.
- The
- <a class="permalink" href="#SX_SYSINIT_FLAGS"><code class="Fn" id="SX_SYSINIT_FLAGS">SX_SYSINIT_FLAGS</code></a>()
- macro can similarly be used to initialize a given <var class="Fa">sx</var>
- lock using <code class="Fn">sx_init_flags</code>().</p>
-<p class="Pp">A thread may not hold both a shared lock and an exclusive lock on
- the same lock simultaneously; attempting to do so will result in
- deadlock.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1>
-<p class="Pp">A thread may hold a shared or exclusive lock on an
- <code class="Nm">sx</code> lock while sleeping. As a result, an
- <code class="Nm">sx</code> lock may not be acquired while holding a mutex.
- Otherwise, if one thread slept while holding an <code class="Nm">sx</code>
- lock while another thread blocked on the same <code class="Nm">sx</code>
- lock after acquiring a mutex, then the second thread would effectively end
- up sleeping while holding a mutex, which is not allowed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">lock(9)</a>, <a class="Xr">locking(9)</a>,
- <a class="Xr">mutex(9)</a>, <a class="Xr">panic(9)</a>,
- <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">A kernel without <code class="Dv">WITNESS</code> cannot assert
- whether the current thread does or does not hold a shared lock.
- <code class="Dv">SA_LOCKED</code> and <code class="Dv">SA_SLOCKED</code> can
- only assert that
- <a class="permalink" href="#any"><i class="Em" id="any">any</i></a> thread
- holds a shared lock. They cannot ensure that the current thread holds a
- shared lock. Further, <code class="Dv">SA_UNLOCKED</code> can only assert
- that the current thread does not hold an exclusive lock.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 11, 2017</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/syscall_helper_register.9 4.html b/static/freebsd/man9/syscall_helper_register.9 4.html
deleted file mode 100644
index cd3e0983..00000000
--- a/static/freebsd/man9/syscall_helper_register.9 4.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSCALL_HELPER_REGISTER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSCALL_HELPER_REGISTER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">syscall_helper_register</code>,
- <code class="Nm">syscall_helper_unregister</code> &#x2014;
- <span class="Nd">kernel syscall registration routines</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sysent.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">syscall_helper_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- syscall_helper_data *sd</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">syscall_helper_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- syscall_helper_data *sd</var>);</p>
-<section class="Ss">
-<h2 class="Ss" id="INITIALIZER_MACROS"><a class="permalink" href="#INITIALIZER_MACROS">INITIALIZER
- MACROS</a></h2>
-<p class="Pp"><var class="Ft">struct syscall_helper_data</var>
- <br/>
- <code class="Fn">SYSCALL_INIT_HELPER</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>);</p>
-<p class="Pp"><var class="Ft">struct syscall_helper_data</var>
- <br/>
- <code class="Fn">SYSCALL_INIT_HELPER_F</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="COMPATIBILITY_INITIALIZER_MACROS"><a class="permalink" href="#COMPATIBILITY_INITIALIZER_MACROS">COMPATIBILITY
- INITIALIZER MACROS</a></h2>
-<p class="Pp"><var class="Ft">struct syscall_helper_data</var>
- <br/>
- <code class="Fn">SYSCALL_INIT_HELPER_COMPAT</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>);</p>
-<p class="Pp"><var class="Ft">struct syscall_helper_data</var>
- <br/>
- <code class="Fn">SYSCALL_INIT_HELPER_COMPAT_F</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#syscall_helper_register"><code class="Fn" id="syscall_helper_register">syscall_helper_register</code></a>()
- registers a system call. This function takes the structure
- <var class="Va">struct syscall_helper_data sd</var>, which specifies the
- parameters for syscall registration:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent Li">
-<pre>struct syscall_helper_data {
- struct sysent new_sysent;
- struct sysent old_sysent;
- int syscall_no;
- int registered;
-};</pre>
-</div>
-<p class="Pp" id="syscall_helper_register~2">The only valid flag for the
- <var class="Fa">flags</var> argument to
- <a class="permalink" href="#syscall_helper_register~2"><code class="Fn">syscall_helper_register</code></a>()
- is <code class="Dv">SY_THR_STATIC</code>. This flag prevents the syscall
- from being unregistered.</p>
-<p class="Pp" id="SYSCALL_INIT_HELPER*">Before use, the structure must be
- initialized with one of the
- <a class="permalink" href="#SYSCALL_INIT_HELPER*"><code class="Fn">SYSCALL_INIT_HELPER*</code></a>()
- macros. In new code, syscall implementation functions shall be named
- <a class="permalink" href="#sys_syscallname"><code class="Fn" id="sys_syscallname">sys_syscallname</code></a>()
- and the regular macros shall be used.</p>
-<p class="Pp">For legacy syscall functions named without &quot;sys_&quot;
- prefixes, the &quot;COMPAT&quot; versions of the macros may be used.</p>
-<p class="Pp">The only valid flag for the <var class="Fa">flags</var> argument
- to the &quot;F&quot; variants of the initializer macros is
- <code class="Dv">SYF_CAPENABLED</code>. This flag indicates that the syscall
- is allowed in capability mode.</p>
-<p class="Pp" id="syscall_helper_unregister">The
- <a class="permalink" href="#syscall_helper_unregister"><code class="Fn">syscall_helper_unregister</code></a>()
- unregisters a system call. This function takes the same structure
- <var class="Va">struct syscall_helper_data sd</var> that was previously
- initialized in the manner described above and used in a successful
- invocation of <code class="Fn">syscall_helper_register</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, <code class="Fn">syscall_helper_register</code>()
- and <code class="Fn">syscall_helper_unregister</code>() will return 0.
- Otherwise, they will return an error.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">syscall_helper_register</code>() call will
- fail and the syscall will not be registered if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">flags</var> argument contained a value other than
- <code class="Dv">SY_THR_STATIC</code>.</dd>
- <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The specified syscall number, <code class="Dv">sd.syscall_no</code>
- (<code class="Dv">SYS_syscallname</code>), was outside of the valid range
- of system call numbers (zero through
- <code class="Dv">SYS_MAXSYSCALL</code>).</dd>
- <dt id="ENFILE">[<a class="permalink" href="#ENFILE"><code class="Er">ENFILE</code></a>]</dt>
- <dd>The system call table does not have any available slots.</dd>
- <dt id="EEXIST">[<a class="permalink" href="#EEXIST"><code class="Er">EEXIST</code></a>]</dt>
- <dd>The specified syscall number, <code class="Dv">sd.syscall_no</code>
- (<code class="Dv">SYS_syscallname</code>), was already in use.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">SYSCALL_MODULE(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 10, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sysctl.9 3.html b/static/freebsd/man9/sysctl.9 3.html
deleted file mode 100644
index 93380af8..00000000
--- a/static/freebsd/man9/sysctl.9 3.html
+++ /dev/null
@@ -1,1148 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSCTL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSCTL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">SYSCTL_DECL</code>,
- <code class="Nm">SYSCTL_ADD_BOOL</code>,
- <code class="Nm">SYSCTL_ADD_COUNTER_U64</code>,
- <code class="Nm">SYSCTL_ADD_COUNTER_U64_ARRAY</code>,
- <code class="Nm">SYSCTL_ADD_INT</code>,
- <code class="Nm">SYSCTL_ADD_LONG</code>,
- <code class="Nm">SYSCTL_ADD_NODE</code>,
- <code class="Nm">SYSCTL_ADD_NODE_WITH_LABEL</code>,
- <code class="Nm">SYSCTL_ADD_OPAQUE</code>,
- <code class="Nm">SYSCTL_ADD_PROC</code>,
- <code class="Nm">SYSCTL_ADD_QUAD</code>,
- <code class="Nm">SYSCTL_ADD_ROOT_NODE</code>,
- <code class="Nm">SYSCTL_ADD_S8</code>,
- <code class="Nm">SYSCTL_ADD_S16</code>,
- <code class="Nm">SYSCTL_ADD_S32</code>,
- <code class="Nm">SYSCTL_ADD_S64</code>,
- <code class="Nm">SYSCTL_ADD_SBINTIME_MSEC</code>,
- <code class="Nm">SYSCTL_ADD_SBINTIME_USEC</code>,
- <code class="Nm">SYSCTL_ADD_STRING</code>,
- <code class="Nm">SYSCTL_ADD_CONST_STRING</code>,
- <code class="Nm">SYSCTL_ADD_STRUCT</code>,
- <code class="Nm">SYSCTL_ADD_TIMEVAL_SEC</code>,
- <code class="Nm">SYSCTL_ADD_U8</code>,
- <code class="Nm">SYSCTL_ADD_U16</code>,
- <code class="Nm">SYSCTL_ADD_U32</code>,
- <code class="Nm">SYSCTL_ADD_U64</code>,
- <code class="Nm">SYSCTL_ADD_UAUTO</code>,
- <code class="Nm">SYSCTL_ADD_UINT</code>,
- <code class="Nm">SYSCTL_ADD_ULONG</code>,
- <code class="Nm">SYSCTL_ADD_UMA_CUR</code>,
- <code class="Nm">SYSCTL_ADD_UMA_MAX</code>,
- <code class="Nm">SYSCTL_ADD_UQUAD</code>,
- <code class="Nm">SYSCTL_CHILDREN</code>,
- <code class="Nm">SYSCTL_STATIC_CHILDREN</code>,
- <code class="Nm">SYSCTL_NODE_CHILDREN</code>,
- <code class="Nm">SYSCTL_PARENT</code>, <code class="Nm">SYSCTL_BOOL</code>,
- <code class="Nm">SYSCTL_COUNTER_U64</code>,
- <code class="Nm">SYSCTL_COUNTER_U64_ARRAY</code>,
- <code class="Nm">SYSCTL_INT</code>,
- <code class="Nm">SYSCTL_INT_WITH_LABEL</code>,
- <code class="Nm">SYSCTL_LONG</code>,
- <code class="Nm">sysctl_msec_to_ticks</code>,
- <code class="Nm">SYSCTL_NODE</code>,
- <code class="Nm">SYSCTL_NODE_WITH_LABEL</code>,
- <code class="Nm">SYSCTL_OPAQUE</code>, <code class="Nm">SYSCTL_PROC</code>,
- <code class="Nm">SYSCTL_QUAD</code>,
- <code class="Nm">SYSCTL_ROOT_NODE</code>, <code class="Nm">SYSCTL_S8</code>,
- <code class="Nm">SYSCTL_S16</code>, <code class="Nm">SYSCTL_S32</code>,
- <code class="Nm">SYSCTL_S64</code>,
- <code class="Nm">SYSCTL_SBINTIME_MSEC</code>,
- <code class="Nm">SYSCTL_SBINTIME_USEC</code>,
- <code class="Nm">SYSCTL_STRING</code>,
- <code class="Nm">SYSCTL_CONST_STRING</code>,
- <code class="Nm">SYSCTL_STRUCT</code>,
- <code class="Nm">SYSCTL_TIMEVAL_SEC</code>,
- <code class="Nm">SYSCTL_U8</code>, <code class="Nm">SYSCTL_U16</code>,
- <code class="Nm">SYSCTL_U32</code>, <code class="Nm">SYSCTL_U64</code>,
- <code class="Nm">SYSCTL_UINT</code>, <code class="Nm">SYSCTL_ULONG</code>,
- <code class="Nm">SYSCTL_UMA_CUR</code>,
- <code class="Nm">SYSCTL_UMA_MAX</code>, <code class="Nm">SYSCTL_UQUAD</code>
- &#x2014; <span class="Nd">Dynamic and static sysctl MIB creation
- functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SYSCTL_DECL</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_BOOL</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">bool *ptr</var>,
- <var class="Fa">uint8_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_COUNTER_U64</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>,
- <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>,
- <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">intmax_t
- len</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_INT</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int *ptr</var>,
- <var class="Fa">int val</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_LONG</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">long *ptr</var>,
- <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_NODE</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int
- (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_NODE_WITH_LABEL</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">int
- (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char
- *descr</var>, <var class="Fa">const char *label</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_OPAQUE</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void
- *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char
- *format</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_PROC</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">void *arg1</var>,
- <var class="Fa">intptr_t arg2</var>, <var class="Fa">int (*handler)
- (SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char *format</var>,
- <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_QUAD</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int64_t *ptr</var>,
- <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">int number</var>,
- <var class="Fa">const char *name</var>, <var class="Fa">int ctlflags</var>,
- <var class="Fa">int (*handler)(SYSCTL_HANDLER_ARGS)</var>,
- <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_S8</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int8_t *ptr</var>,
- <var class="Fa">int8_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_S16</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int16_t *ptr</var>,
- <var class="Fa">int16_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_S32</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int32_t *ptr</var>,
- <var class="Fa">int32_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_S64</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">int64_t *ptr</var>,
- <var class="Fa">int64_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">sbintime_t
- *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">sbintime_t
- *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_STRING</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">char
- *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_CONST_STRING</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">const char
- *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_STRUCT</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void
- *ptr</var>, <var class="Fa">struct_type</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">struct
- timeval *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_U8</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">uint8_t *ptr</var>,
- <var class="Fa">uint8_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_U16</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">uint16_t *ptr</var>,
- <var class="Fa">uint16_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_U32</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">uint32_t *ptr</var>,
- <var class="Fa">uint32_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_U64</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">uint64_t *ptr</var>,
- <var class="Fa">uint64_t val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_UINT</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int ctlflags</var>, <var class="Fa">unsigned int *ptr</var>,
- <var class="Fa">unsigned int val</var>, <var class="Fa">const char
- *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_ULONG</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">unsigned
- long *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_UQUAD</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uint64_t
- *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_UMA_CUR</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uma_zone_t
- ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_UMA_MAX</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uma_zone_t
- ptr</var>, <var class="Fa">const char *descr</var>); <var class="Fa">const
- char *descr</var>
- <br/>
- <var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_ADD_UAUTO</code>(<var class="Fa">struct
- sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list
- *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void
- *ptr</var>, <var class="Fa">const char *descr</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var>
- <br/>
- <code class="Fn">SYSCTL_CHILDREN</code>(<var class="Fa">struct sysctl_oid
- *oidp</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var>
- <br/>
- <code class="Fn">SYSCTL_STATIC_CHILDREN</code>(<var class="Fa">struct
- sysctl_oid_list OID_NAME</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var>
- <br/>
- <code class="Fn">SYSCTL_NODE_CHILDREN</code>(<var class="Fa">parent</var>,
- <var class="Fa">name</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">SYSCTL_PARENT</code>(<var class="Fa">struct sysctl_oid
- *oid</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_BOOL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">len</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_INT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_INT_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>,
- <var class="Fa" style="white-space: nowrap;">label</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_LONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_msec_to_ticks</code>(<var class="Fa" style="white-space: nowrap;">SYSCTL_HANDLER_ARGS</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_NODE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">handler</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_NODE_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">handler</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>,
- <var class="Fa" style="white-space: nowrap;">label</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_OPAQUE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">len</var>,
- <var class="Fa" style="white-space: nowrap;">format</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_PROC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">arg1</var>,
- <var class="Fa" style="white-space: nowrap;">arg2</var>,
- <var class="Fa" style="white-space: nowrap;">handler</var>,
- <var class="Fa" style="white-space: nowrap;">format</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_QUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ROOT_NODE</code>(<var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">handler</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_S8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_S16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_S32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_S64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_MSEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_USEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">arg</var>,
- <var class="Fa" style="white-space: nowrap;">len</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_CONST_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">arg</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_STRUCT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">struct_type</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_TIMEVAL_SEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_U8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_U16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_U32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_UINT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ULONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_UQUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">val</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">number</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">ctlflags</var>,
- <var class="Fa" style="white-space: nowrap;">ptr</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">SYSCTL</code> kernel interface allows dynamic
- or static creation of <a class="Xr">sysctl(8)</a> MIB entries. All static
- sysctls are automatically destroyed when the module which they are part of
- is unloaded. Most top level categories are created statically and are
- available to all kernel code and its modules.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION_OF_ARGUMENTS"><a class="permalink" href="#DESCRIPTION_OF_ARGUMENTS">DESCRIPTION
- OF ARGUMENTS</a></h1>
-<dl class="Bl-tag">
- <dt><var class="Fa">ctx</var></dt>
- <dd>Pointer to sysctl context or NULL, if no context. See
- <a class="Xr">sysctl_ctx_init(9)</a> for how to create a new sysctl
- context. Programmers are strongly advised to use contexts to organize the
- dynamic OIDs which they create because when a context is destroyed all
- belonging sysctls are destroyed as well. This makes the sysctl cleanup
- code much simpler. Else deletion of all created OIDs is required at module
- unload.</dd>
- <dt id="SYSCTL_STATIC_CHILDREN"><var class="Fa">parent</var></dt>
- <dd>A pointer to a <code class="Li">struct sysctl_oid_list</code>, which is
- the head of the parent's list of children. This pointer is retrieved using
- the
- <a class="permalink" href="#SYSCTL_STATIC_CHILDREN"><code class="Fn">SYSCTL_STATIC_CHILDREN</code></a>()
- macro for static sysctls and the
- <a class="permalink" href="#SYSCTL_CHILDREN"><code class="Fn" id="SYSCTL_CHILDREN">SYSCTL_CHILDREN</code></a>()
- macro for dynamic sysctls. The
- <a class="permalink" href="#SYSCTL_PARENT"><code class="Fn" id="SYSCTL_PARENT">SYSCTL_PARENT</code></a>()
- macro can be used to get the parent of an OID. The macro returns NULL if
- there is no parent.</dd>
- <dt><var class="Fa">number</var></dt>
- <dd>The OID number that will be assigned to this OID. In almost all cases this
- should be set to <code class="Dv">OID_AUTO</code>, which will result in
- the assignment of the next available OID number.</dd>
- <dt><var class="Fa">name</var></dt>
- <dd>The name of the OID. The newly created OID will contain a copy of the
- name.</dd>
- <dt><var class="Fa">ctlflags</var></dt>
- <dd>A bit mask of sysctl control flags. See the section below describing all
- the control flags.</dd>
- <dt><var class="Fa">arg1</var></dt>
- <dd>First callback argument for procedure sysctls.</dd>
- <dt><var class="Fa">arg2</var></dt>
- <dd>Second callback argument for procedure sysctls.</dd>
- <dt><var class="Fa">len</var></dt>
- <dd>The length of the data pointed to by the <var class="Fa">ptr</var>
- argument. For string type OIDs a length of zero means that
- <a class="Xr">strlen(3)</a> will be used to get the length of the string
- at each access to the OID. For array type OIDs the length must be greater
- than zero.</dd>
- <dt><var class="Fa">ptr</var></dt>
- <dd>Pointer to sysctl variable or string data. For sysctl values the pointer
- can be SYSCTL_NULL_XXX_PTR which means the OID is read-only and the
- returned value should be taken from the <var class="Fa">val</var>
- argument.</dd>
- <dt><var class="Fa">val</var></dt>
- <dd>If the <var class="Fa">ptr</var> argument is SYSCTL_NULL_XXX_PTR, gives
- the constant value returned by this OID. Else this argument is not
- used.</dd>
- <dt><var class="Fa">struct_type</var></dt>
- <dd>Name of structure type.</dd>
- <dt><var class="Fa">handler</var></dt>
- <dd>A pointer to the function that is responsible for handling read and write
- requests to this OID. There are several standard handlers that support
- operations on nodes, integers, strings and opaque objects. It is possible
- to define custom handlers using the <code class="Fn">SYSCTL_PROC</code>()
- macro or the <code class="Fn">SYSCTL_ADD_PROC</code>() function.</dd>
- <dt><var class="Fa">format</var></dt>
- <dd>A pointer to a string which specifies the format of the OID in a symbolic
- way. This format is used as a hint by <a class="Xr">sysctl(8)</a> to apply
- proper data formatting for display purposes.
- <p class="Pp">Current formats:</p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="N"><a class="permalink" href="#N"><code class="Cm">N</code></a></dt>
- <dd>node</dd>
- <dt id="A"><a class="permalink" href="#A"><code class="Cm">A</code></a></dt>
- <dd><a class="permalink" href="#char"><code class="Li" id="char">char
- *</code></a></dd>
- <dt id="C"><a class="permalink" href="#C"><code class="Cm">C</code></a></dt>
- <dd><a class="permalink" href="#int8_t"><code class="Li" id="int8_t">int8_t</code></a></dd>
- <dt id="CU"><a class="permalink" href="#CU"><code class="Cm">CU</code></a></dt>
- <dd><a class="permalink" href="#uint8_t"><code class="Li" id="uint8_t">uint8_t</code></a></dd>
- <dt id="I"><a class="permalink" href="#I"><code class="Cm">I</code></a></dt>
- <dd><a class="permalink" href="#int"><code class="Li" id="int">int</code></a></dd>
- <dt id="IK"><a class="permalink" href="#IK"><code class="Cm">IK</code></a>[<var class="Ar">n</var>]</dt>
- <dd>temperature in Kelvin, multiplied by an optional single digit power of
- ten scaling factor: 1 (default) gives deciKelvin, 0 gives Kelvin, 3
- gives milliKelvin</dd>
- <dt id="IU"><a class="permalink" href="#IU"><code class="Cm">IU</code></a></dt>
- <dd><a class="permalink" href="#unsigned"><code class="Li" id="unsigned">unsigned
- int</code></a></dd>
- <dt id="L"><a class="permalink" href="#L"><code class="Cm">L</code></a></dt>
- <dd><a class="permalink" href="#long"><code class="Li" id="long">long</code></a></dd>
- <dt id="LU"><a class="permalink" href="#LU"><code class="Cm">LU</code></a></dt>
- <dd><a class="permalink" href="#unsigned~2"><code class="Li" id="unsigned~2">unsigned
- long</code></a></dd>
- <dt id="Q"><a class="permalink" href="#Q"><code class="Cm">Q</code></a></dt>
- <dd><a class="permalink" href="#quad_t"><code class="Li" id="quad_t">quad_t</code></a></dd>
- <dt id="QU"><a class="permalink" href="#QU"><code class="Cm">QU</code></a></dt>
- <dd><a class="permalink" href="#u_quad_t"><code class="Li" id="u_quad_t">u_quad_t</code></a></dd>
- <dt id="S"><a class="permalink" href="#S"><code class="Cm">S</code></a></dt>
- <dd><a class="permalink" href="#int16_t"><code class="Li" id="int16_t">int16_t</code></a></dd>
- <dt id="SU"><a class="permalink" href="#SU"><code class="Cm">SU</code></a></dt>
- <dd><a class="permalink" href="#uint16_t"><code class="Li" id="uint16_t">uint16_t</code></a></dd>
- <dt id="S,TYPE"><a class="permalink" href="#S,TYPE"><code class="Cm">S,TYPE</code></a></dt>
- <dd><a class="permalink" href="#struct"><code class="Li" id="struct">struct
- TYPE</code></a> structures</dd>
- </dl>
- </div>
- </dd>
- <dt><var class="Fa">descr</var></dt>
- <dd>A pointer to a textual description of the OID.</dd>
- <dt><var class="Fa">label</var></dt>
- <dd>A pointer to an aggregation label for this component of the OID. To make
- it easier to export sysctl data to monitoring systems that support
- aggregations through labels (e.g., Prometheus), this argument can be used
- to attach a label name to an OID. The label acts as a hint that this
- component's name should not be part of the metric's name, but attached to
- the metric as a label instead.
- <p class="Pp">Labels should only be applied to siblings that are
- structurally similar and encode the same type of value, as aggregation
- is of no use otherwise.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NODE_VALUE_TYPES"><a class="permalink" href="#NODE_VALUE_TYPES">NODE
- VALUE TYPES</a></h1>
-<p class="Pp">Most of the macros and functions used to create sysctl nodes
- export a read-only constant or in-kernel variable whose type matches the
- type of the node's value. For example,
- <a class="permalink" href="#SYSCTL_INT"><code class="Fn" id="SYSCTL_INT">SYSCTL_INT</code></a>()
- reports the raw value of an associated variable of type
- <var class="Vt">int</var>. However, nodes may also export a value that is a
- translation of an internal representation.</p>
-<p class="Pp" id="sysctl_msec_to_ticks">The
- <a class="permalink" href="#sysctl_msec_to_ticks"><code class="Fn">sysctl_msec_to_ticks</code></a>()
- handler can be used with <code class="Fn">SYSCTL_PROC</code>() or
- <a class="permalink" href="#SYSCTL_ADD_PROC"><code class="Fn" id="SYSCTL_ADD_PROC">SYSCTL_ADD_PROC</code></a>()
- to export a millisecond time interval. When using this handler, the
- <var class="Fa">arg2</var> parameter points to an in-kernel variable of type
- <var class="Vt">int</var> which stores a tick count suitable for use with
- functions like <a class="Xr">tsleep(9)</a>. The
- <code class="Fn">sysctl_msec_to_ticks</code>() function converts this value
- to milliseconds when reporting the node's value. Similarly,
- <code class="Fn">sysctl_msec_to_ticks</code>() accepts new values in
- milliseconds and stores an equivalent value in ticks to
- <var class="Fa">*arg2</var>. Note that new code should use kernel variables
- of type <var class="Vt">sbintime_t</var> instead of tick counts.</p>
-<p class="Pp" id="SYSCTL_ADD_SBINTIME_MSEC">The
- <a class="permalink" href="#SYSCTL_ADD_SBINTIME_MSEC"><code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code></a>()
- and
- <a class="permalink" href="#SYSCTL_ADD_SBINTIME_USEC"><code class="Fn" id="SYSCTL_ADD_SBINTIME_USEC">SYSCTL_ADD_SBINTIME_USEC</code></a>()
- functions and
- <a class="permalink" href="#SYSCTL_SBINTIME_MSEC"><code class="Fn" id="SYSCTL_SBINTIME_MSEC">SYSCTL_SBINTIME_MSEC</code></a>()
- and
- <a class="permalink" href="#SYSCTL_SBINTIME_USEC"><code class="Fn" id="SYSCTL_SBINTIME_USEC">SYSCTL_SBINTIME_USEC</code></a>()
- macros all create nodes which export an in-kernel variable of type
- <var class="Vt">sbintime_t</var>. These nodes do not export the raw value of
- the associated variable. Instead, they export a 64-bit integer containing a
- count of either milliseconds (the MSEC variants) or microseconds (the USEC
- variants).</p>
-<p class="Pp" id="SYSCTL_ADD_TIMEVAL_SEC">The
- <a class="permalink" href="#SYSCTL_ADD_TIMEVAL_SEC"><code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code></a>()
- function and
- <a class="permalink" href="#SYSCTL_TIMEVAL_SEC"><code class="Fn" id="SYSCTL_TIMEVAL_SEC">SYSCTL_TIMEVAL_SEC</code></a>()
- macro create nodes which export an in-kernel variable of type
- <var class="Vt">struct timeval</var>. These nodes do not export full value
- of the associated structure. Instead, they export a count in seconds as a
- simple integer which is stored in the <var class="Fa">tv_sec</var> field of
- the associated variable. This function and macro are intended to be used
- with variables which store a non-negative interval rather than an absolute
- time. As a result, they reject attempts to store negative values.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_ROOT_NODES"><a class="permalink" href="#CREATING_ROOT_NODES">CREATING
- ROOT NODES</a></h1>
-<p class="Pp">Sysctl MIBs or OIDs are created in a hierarchical tree. The nodes
- at the bottom of the tree are called root nodes, and have no parent OID. To
- create bottom tree nodes the
- <a class="permalink" href="#SYSCTL_ROOT_NODE"><code class="Fn" id="SYSCTL_ROOT_NODE">SYSCTL_ROOT_NODE</code></a>()
- macro or the
- <a class="permalink" href="#SYSCTL_ADD_ROOT_NODE"><code class="Fn" id="SYSCTL_ADD_ROOT_NODE">SYSCTL_ADD_ROOT_NODE</code></a>()
- function needs to be used. By default all static sysctl node OIDs are global
- and need a
- <a class="permalink" href="#SYSCTL_DECL"><code class="Fn" id="SYSCTL_DECL">SYSCTL_DECL</code></a>()
- statement prior to their
- <a class="permalink" href="#SYSCTL_NODE"><code class="Fn" id="SYSCTL_NODE">SYSCTL_NODE</code></a>()
- definition statement, typically in a so-called header file.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_SYSCTL_STRINGS"><a class="permalink" href="#CREATING_SYSCTL_STRINGS">CREATING
- SYSCTL STRINGS</a></h1>
-<p class="Pp">Zero terminated character strings sysctls are created either using
- the
- <a class="permalink" href="#SYSCTL_STRING"><code class="Fn" id="SYSCTL_STRING">SYSCTL_STRING</code></a>()
- macro or the
- <a class="permalink" href="#SYSCTL_ADD_STRING"><code class="Fn" id="SYSCTL_ADD_STRING">SYSCTL_ADD_STRING</code></a>()
- function. If the <var class="Fa">len</var> argument is zero, the string
- length is computed at every access to the OID using
- <a class="Xr">strlen(3)</a>. Use the
- <a class="permalink" href="#SYSCTL_CONST_STRING"><code class="Fn" id="SYSCTL_CONST_STRING">SYSCTL_CONST_STRING</code></a>()
- macro or the
- <a class="permalink" href="#SYSCTL_ADD_CONST_STRING"><code class="Fn" id="SYSCTL_ADD_CONST_STRING">SYSCTL_ADD_CONST_STRING</code></a>()
- function to add a sysctl for a constant string.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_OPAQUE_SYSCTLS"><a class="permalink" href="#CREATING_OPAQUE_SYSCTLS">CREATING
- OPAQUE SYSCTLS</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#SYSCTL_OPAQUE"><code class="Fn" id="SYSCTL_OPAQUE">SYSCTL_OPAQUE</code></a>()
- or
- <a class="permalink" href="#SYSCTL_STRUCT"><code class="Fn" id="SYSCTL_STRUCT">SYSCTL_STRUCT</code></a>()
- macros or the
- <a class="permalink" href="#SYSCTL_ADD_OPAQUE"><code class="Fn" id="SYSCTL_ADD_OPAQUE">SYSCTL_ADD_OPAQUE</code></a>()
- or
- <a class="permalink" href="#SYSCTL_ADD_STRUCT"><code class="Fn" id="SYSCTL_ADD_STRUCT">SYSCTL_ADD_STRUCT</code></a>()
- functions create an OID that handle any chunk of data of the size specified
- by the <var class="Fa">len</var> argument and data pointed to by the
- <var class="Fa">ptr</var> argument. When using the structure version the
- type is encoded as part of the created sysctl.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_CUSTOM_SYSCTLS"><a class="permalink" href="#CREATING_CUSTOM_SYSCTLS">CREATING
- CUSTOM SYSCTLS</a></h1>
-<p class="Pp">The <code class="Fn">SYSCTL_PROC</code>() macro and the
- <code class="Fn">SYSCTL_ADD_PROC</code>() function create OIDs with the
- specified <span class="Pa">handler</span> function. The handler is
- responsible for handling all read and write requests to the OID. This OID
- type is especially useful if the kernel data is not easily accessible, or
- needs to be processed before exporting.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_A_STATIC_SYSCTL"><a class="permalink" href="#CREATING_A_STATIC_SYSCTL">CREATING
- A STATIC SYSCTL</a></h1>
-<p class="Pp">Static sysctls are declared using one of the
- <a class="permalink" href="#SYSCTL_BOOL"><code class="Fn" id="SYSCTL_BOOL">SYSCTL_BOOL</code></a>(),
- <a class="permalink" href="#SYSCTL_COUNTER_U64"><code class="Fn" id="SYSCTL_COUNTER_U64">SYSCTL_COUNTER_U64</code></a>(),
- <a class="permalink" href="#SYSCTL_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_COUNTER_U64_ARRAY">SYSCTL_COUNTER_U64_ARRAY</code></a>(),
- <code class="Fn">SYSCTL_INT</code>(),
- <a class="permalink" href="#SYSCTL_INT_WITH_LABEL"><code class="Fn" id="SYSCTL_INT_WITH_LABEL">SYSCTL_INT_WITH_LABEL</code></a>(),
- <a class="permalink" href="#SYSCTL_LONG"><code class="Fn" id="SYSCTL_LONG">SYSCTL_LONG</code></a>(),
- <code class="Fn">SYSCTL_NODE</code>(),
- <a class="permalink" href="#SYSCTL_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_NODE_WITH_LABEL">SYSCTL_NODE_WITH_LABEL</code></a>(),
- <code class="Fn">SYSCTL_OPAQUE</code>(),
- <code class="Fn">SYSCTL_PROC</code>(),
- <a class="permalink" href="#SYSCTL_QUAD"><code class="Fn" id="SYSCTL_QUAD">SYSCTL_QUAD</code></a>(),
- <code class="Fn">SYSCTL_ROOT_NODE</code>(),
- <a class="permalink" href="#SYSCTL_S8"><code class="Fn" id="SYSCTL_S8">SYSCTL_S8</code></a>(),
- <a class="permalink" href="#SYSCTL_S16"><code class="Fn" id="SYSCTL_S16">SYSCTL_S16</code></a>(),
- <a class="permalink" href="#SYSCTL_S32"><code class="Fn" id="SYSCTL_S32">SYSCTL_S32</code></a>(),
- <a class="permalink" href="#SYSCTL_S64"><code class="Fn" id="SYSCTL_S64">SYSCTL_S64</code></a>(),
- <code class="Fn">SYSCTL_SBINTIME_MSEC</code>(),
- <code class="Fn">SYSCTL_SBINTIME_USEC</code>(),
- <code class="Fn">SYSCTL_STRING</code>(),
- <code class="Fn">SYSCTL_CONST_STRING</code>(),
- <code class="Fn">SYSCTL_STRUCT</code>(),
- <code class="Fn">SYSCTL_TIMEVAL_SEC</code>(),
- <a class="permalink" href="#SYSCTL_U8"><code class="Fn" id="SYSCTL_U8">SYSCTL_U8</code></a>(),
- <a class="permalink" href="#SYSCTL_U16"><code class="Fn" id="SYSCTL_U16">SYSCTL_U16</code></a>(),
- <a class="permalink" href="#SYSCTL_U32"><code class="Fn" id="SYSCTL_U32">SYSCTL_U32</code></a>(),
- <a class="permalink" href="#SYSCTL_U64"><code class="Fn" id="SYSCTL_U64">SYSCTL_U64</code></a>(),
- <a class="permalink" href="#SYSCTL_UINT"><code class="Fn" id="SYSCTL_UINT">SYSCTL_UINT</code></a>(),
- <a class="permalink" href="#SYSCTL_ULONG"><code class="Fn" id="SYSCTL_ULONG">SYSCTL_ULONG</code></a>(),
- <a class="permalink" href="#SYSCTL_UQUAD"><code class="Fn" id="SYSCTL_UQUAD">SYSCTL_UQUAD</code></a>(),
- <a class="permalink" href="#SYSCTL_UMA_CUR"><code class="Fn" id="SYSCTL_UMA_CUR">SYSCTL_UMA_CUR</code></a>()
- or
- <a class="permalink" href="#SYSCTL_UMA_MAX"><code class="Fn" id="SYSCTL_UMA_MAX">SYSCTL_UMA_MAX</code></a>()
- macros.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CREATING_A_DYNAMIC_SYSCTL"><a class="permalink" href="#CREATING_A_DYNAMIC_SYSCTL">CREATING
- A DYNAMIC SYSCTL</a></h1>
-<p class="Pp">Dynamic nodes are created using one of the
- <a class="permalink" href="#SYSCTL_ADD_BOOL"><code class="Fn" id="SYSCTL_ADD_BOOL">SYSCTL_ADD_BOOL</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64">SYSCTL_ADD_COUNTER_U64</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64_ARRAY">SYSCTL_ADD_COUNTER_U64_ARRAY</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_INT"><code class="Fn" id="SYSCTL_ADD_INT">SYSCTL_ADD_INT</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_LONG"><code class="Fn" id="SYSCTL_ADD_LONG">SYSCTL_ADD_LONG</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_NODE"><code class="Fn" id="SYSCTL_ADD_NODE">SYSCTL_ADD_NODE</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_ADD_NODE_WITH_LABEL">SYSCTL_ADD_NODE_WITH_LABEL</code></a>(),
- <code class="Fn">SYSCTL_ADD_OPAQUE</code>(),
- <code class="Fn">SYSCTL_ADD_PROC</code>(),
- <a class="permalink" href="#SYSCTL_ADD_QUAD"><code class="Fn" id="SYSCTL_ADD_QUAD">SYSCTL_ADD_QUAD</code></a>(),
- <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(),
- <a class="permalink" href="#SYSCTL_ADD_S8"><code class="Fn" id="SYSCTL_ADD_S8">SYSCTL_ADD_S8</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_S16"><code class="Fn" id="SYSCTL_ADD_S16">SYSCTL_ADD_S16</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_S32"><code class="Fn" id="SYSCTL_ADD_S32">SYSCTL_ADD_S32</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_S64"><code class="Fn" id="SYSCTL_ADD_S64">SYSCTL_ADD_S64</code></a>(),
- <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code>(),
- <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</code>(),
- <code class="Fn">SYSCTL_ADD_STRING</code>(),
- <code class="Fn">SYSCTL_ADD_CONST_STRING</code>(),
- <code class="Fn">SYSCTL_ADD_STRUCT</code>(),
- <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code>(),
- <a class="permalink" href="#SYSCTL_ADD_U8"><code class="Fn" id="SYSCTL_ADD_U8">SYSCTL_ADD_U8</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_U16"><code class="Fn" id="SYSCTL_ADD_U16">SYSCTL_ADD_U16</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_U32"><code class="Fn" id="SYSCTL_ADD_U32">SYSCTL_ADD_U32</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_U64"><code class="Fn" id="SYSCTL_ADD_U64">SYSCTL_ADD_U64</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_UAUTO"><code class="Fn" id="SYSCTL_ADD_UAUTO">SYSCTL_ADD_UAUTO</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_UINT"><code class="Fn" id="SYSCTL_ADD_UINT">SYSCTL_ADD_UINT</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_ULONG"><code class="Fn" id="SYSCTL_ADD_ULONG">SYSCTL_ADD_ULONG</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_UQUAD"><code class="Fn" id="SYSCTL_ADD_UQUAD">SYSCTL_ADD_UQUAD</code></a>(),
- <a class="permalink" href="#SYSCTL_ADD_UMA_CUR"><code class="Fn" id="SYSCTL_ADD_UMA_CUR">SYSCTL_ADD_UMA_CUR</code></a>()
- or
- <a class="permalink" href="#SYSCTL_ADD_UMA_MAX"><code class="Fn" id="SYSCTL_ADD_UMA_MAX">SYSCTL_ADD_UMA_MAX</code></a>()
- functions. See <a class="Xr">sysctl_remove_oid(9)</a> or
- <a class="Xr">sysctl_ctx_free(9)</a> for more information on how to destroy
- a dynamically created OID.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONTROL_FLAGS"><a class="permalink" href="#CONTROL_FLAGS">CONTROL
- FLAGS</a></h1>
-<p class="Pp">For most of the above functions and macros, declaring a type as
- part of the access flags is not necessary &#x2014; however, when declaring a
- sysctl implemented by a function, including a type in the access mask is
- required:</p>
-<dl class="Bl-tag">
- <dt id="CTLTYPE_NODE"><a class="permalink" href="#CTLTYPE_NODE"><code class="Dv">CTLTYPE_NODE</code></a></dt>
- <dd>This is a node intended to be a parent for other nodes.</dd>
- <dt id="CTLTYPE_INT"><a class="permalink" href="#CTLTYPE_INT"><code class="Dv">CTLTYPE_INT</code></a></dt>
- <dd>This is a signed integer.</dd>
- <dt id="CTLTYPE_STRING"><a class="permalink" href="#CTLTYPE_STRING"><code class="Dv">CTLTYPE_STRING</code></a></dt>
- <dd>This is a nul-terminated string stored in a character array.</dd>
- <dt id="CTLTYPE_S8"><a class="permalink" href="#CTLTYPE_S8"><code class="Dv">CTLTYPE_S8</code></a></dt>
- <dd>This is an 8-bit signed integer.</dd>
- <dt id="CTLTYPE_S16"><a class="permalink" href="#CTLTYPE_S16"><code class="Dv">CTLTYPE_S16</code></a></dt>
- <dd>This is a 16-bit signed integer.</dd>
- <dt id="CTLTYPE_S32"><a class="permalink" href="#CTLTYPE_S32"><code class="Dv">CTLTYPE_S32</code></a></dt>
- <dd>This is a 32-bit signed integer.</dd>
- <dt id="CTLTYPE_S64"><a class="permalink" href="#CTLTYPE_S64"><code class="Dv">CTLTYPE_S64</code></a></dt>
- <dd>This is a 64-bit signed integer.</dd>
- <dt id="CTLTYPE_OPAQUE"><a class="permalink" href="#CTLTYPE_OPAQUE"><code class="Dv">CTLTYPE_OPAQUE</code></a></dt>
- <dd>This is an opaque data structure.</dd>
- <dt id="CTLTYPE_STRUCT"><a class="permalink" href="#CTLTYPE_STRUCT"><code class="Dv">CTLTYPE_STRUCT</code></a></dt>
- <dd>Alias for <code class="Dv">CTLTYPE_OPAQUE</code>.</dd>
- <dt id="CTLTYPE_U8"><a class="permalink" href="#CTLTYPE_U8"><code class="Dv">CTLTYPE_U8</code></a></dt>
- <dd>This is an 8-bit unsigned integer.</dd>
- <dt id="CTLTYPE_U16"><a class="permalink" href="#CTLTYPE_U16"><code class="Dv">CTLTYPE_U16</code></a></dt>
- <dd>This is a 16-bit unsigned integer.</dd>
- <dt id="CTLTYPE_U32"><a class="permalink" href="#CTLTYPE_U32"><code class="Dv">CTLTYPE_U32</code></a></dt>
- <dd>This is a 32-bit unsigned integer.</dd>
- <dt id="CTLTYPE_U64"><a class="permalink" href="#CTLTYPE_U64"><code class="Dv">CTLTYPE_U64</code></a></dt>
- <dd>This is a 64-bit unsigned integer.</dd>
- <dt id="CTLTYPE_UINT"><a class="permalink" href="#CTLTYPE_UINT"><code class="Dv">CTLTYPE_UINT</code></a></dt>
- <dd>This is an unsigned integer.</dd>
- <dt id="CTLTYPE_LONG"><a class="permalink" href="#CTLTYPE_LONG"><code class="Dv">CTLTYPE_LONG</code></a></dt>
- <dd>This is a signed long.</dd>
- <dt id="CTLTYPE_ULONG"><a class="permalink" href="#CTLTYPE_ULONG"><code class="Dv">CTLTYPE_ULONG</code></a></dt>
- <dd>This is an unsigned long.</dd>
-</dl>
-<p class="Pp">All sysctl types except for new node declarations require one of
- the following flags to be set indicating the read and write disposition of
- the sysctl:</p>
-<dl class="Bl-tag">
- <dt id="CTLFLAG_RD"><a class="permalink" href="#CTLFLAG_RD"><code class="Dv">CTLFLAG_RD</code></a></dt>
- <dd>This is a read-only sysctl.</dd>
- <dt id="CTLFLAG_RDTUN"><a class="permalink" href="#CTLFLAG_RDTUN"><code class="Dv">CTLFLAG_RDTUN</code></a></dt>
- <dd>This is a read-only sysctl and tunable which is fetched once from the
- system environment early during module load or system boot.</dd>
- <dt id="CTLFLAG_WR"><a class="permalink" href="#CTLFLAG_WR"><code class="Dv">CTLFLAG_WR</code></a></dt>
- <dd>This is a writable sysctl.</dd>
- <dt id="CTLFLAG_RW"><a class="permalink" href="#CTLFLAG_RW"><code class="Dv">CTLFLAG_RW</code></a></dt>
- <dd>This sysctl is readable and writable.</dd>
- <dt id="CTLFLAG_RWTUN"><a class="permalink" href="#CTLFLAG_RWTUN"><code class="Dv">CTLFLAG_RWTUN</code></a></dt>
- <dd>This is a readable and writeable sysctl and tunable which is fetched once
- from the system environment early during module load or system boot.</dd>
- <dt id="CTLFLAG_NOFETCH"><a class="permalink" href="#CTLFLAG_NOFETCH"><code class="Dv">CTLFLAG_NOFETCH</code></a></dt>
- <dd>In case the node is marked as a tunable using the CTLFLAG_[XX]TUN, this
- flag will prevent fetching the initial value from the system environment.
- Typically this flag should only be used for very early low level system
- setup code, and not by common drivers and modules.</dd>
- <dt id="CTLFLAG_MPSAFE"><a class="permalink" href="#CTLFLAG_MPSAFE"><code class="Dv">CTLFLAG_MPSAFE</code></a></dt>
- <dd>This <a class="Xr">sysctl(9)</a> handler is MP safe. Do not grab Giant
- around calls to this handler. This should only be used for
- <a class="permalink" href="#SYSCTL_PROC"><code class="Fn" id="SYSCTL_PROC">SYSCTL_PROC</code></a>()
- entries.</dd>
-</dl>
-<p class="Pp">Additionally, any of the following optional flags may also be
- specified:</p>
-<dl class="Bl-tag">
- <dt id="CTLFLAG_ANYBODY"><a class="permalink" href="#CTLFLAG_ANYBODY"><code class="Dv">CTLFLAG_ANYBODY</code></a></dt>
- <dd>Any user or process can write to this sysctl.</dd>
- <dt id="CTLFLAG_CAPRD"><a class="permalink" href="#CTLFLAG_CAPRD"><code class="Dv">CTLFLAG_CAPRD</code></a></dt>
- <dd>A process in capability mode can read from this sysctl.</dd>
- <dt id="CTLFLAG_CAPWR"><a class="permalink" href="#CTLFLAG_CAPWR"><code class="Dv">CTLFLAG_CAPWR</code></a></dt>
- <dd>A process in capability mode can write to this sysctl.</dd>
- <dt id="CTLFLAG_SECURE"><a class="permalink" href="#CTLFLAG_SECURE"><code class="Dv">CTLFLAG_SECURE</code></a></dt>
- <dd>This sysctl can be written to only if the effective securelevel of the
- process is &#x2264; 0.</dd>
- <dt id="CTLFLAG_PRISON"><a class="permalink" href="#CTLFLAG_PRISON"><code class="Dv">CTLFLAG_PRISON</code></a></dt>
- <dd>This sysctl can be written to by processes in
- <a class="Xr">jail(2)</a>.</dd>
- <dt id="CTLFLAG_SKIP"><a class="permalink" href="#CTLFLAG_SKIP"><code class="Dv">CTLFLAG_SKIP</code></a></dt>
- <dd>When iterating the sysctl name space, do not list this sysctl.</dd>
- <dt id="CTLFLAG_TUN"><a class="permalink" href="#CTLFLAG_TUN"><code class="Dv">CTLFLAG_TUN</code></a></dt>
- <dd>Advisory flag that a system tunable also exists for this variable. The
- initial sysctl value is fetched once from the system environment early
- during module load or system boot.</dd>
- <dt id="CTLFLAG_DYN"><a class="permalink" href="#CTLFLAG_DYN"><code class="Dv">CTLFLAG_DYN</code></a></dt>
- <dd>Dynamically created OIDs automatically get this flag set.</dd>
- <dt id="CTLFLAG_VNET"><a class="permalink" href="#CTLFLAG_VNET"><code class="Dv">CTLFLAG_VNET</code></a></dt>
- <dd>OID references a VIMAGE-enabled variable.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Sample use of <code class="Fn">SYSCTL_DECL</code>() to declare the
- <var class="Va">security</var> sysctl tree for use by new nodes:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>SYSCTL_DECL(_security);</pre>
-</div>
-<p class="Pp">Examples of integer, opaque, string, and procedure sysctls
- follow:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>/*
- * Example of a constant integer value. Notice that the control
- * flags are CTLFLAG_RD, the variable pointer is SYSCTL_NULL_INT_PTR,
- * and the value is declared.
- */
-SYSCTL_INT(_kern, OID_AUTO, hz_max, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, HZ_MAXIMUM,
- &quot;Maximum hz value supported&quot;);
-
-/*
- * Example of a variable integer value. Notice that the control
- * flags are CTLFLAG_RW, the variable pointer is set, and the
- * value is 0.
- */
-static int doingcache = 1; /* 1 =&gt; enable the cache */
-SYSCTL_INT(_debug, OID_AUTO, vfscache, CTLFLAG_RW, &amp;doingcache, 0,
- &quot;Enable name cache&quot;);
-
-/*
- * Example of a variable string value. Notice that the control
- * flags are CTLFLAG_RW, that the variable pointer and string
- * size are set. Unlike newer sysctls, this older sysctl uses a
- * static oid number.
- */
-char kernelname[MAXPATHLEN] = &quot;/kernel&quot;; /* XXX bloat */
-SYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW,
- kernelname, sizeof(kernelname), &quot;Name of kernel file booted&quot;);
-
-/*
- * Example of an opaque data type exported by sysctl. Notice that
- * the variable pointer and size are provided, as well as a format
- * string for sysctl(8).
- */
-static l_fp pps_freq; /* scaled frequency offset (ns/s) */
-SYSCTL_OPAQUE(_kern_ntp_pll, OID_AUTO, pps_freq, CTLFLAG_RD,
- &amp;pps_freq, sizeof(pps_freq), &quot;I&quot;, &quot;&quot;);
-
-/*
- * Example of a procedure based sysctl exporting string
- * information. Notice that the data type is declared, the NULL
- * variable pointer and 0 size, the function pointer, and the
- * format string for sysctl(8).
- */
-SYSCTL_PROC(_kern_timecounter, OID_AUTO, hardware, CTLTYPE_STRING |
- CTLFLAG_RW, NULL, 0, sysctl_kern_timecounter_hardware, &quot;A&quot;,
- &quot;&quot;);</pre>
-</div>
-<p class="Pp">The following is an example of how to create a new top-level
- category and how to hook up another subtree to an existing static node. This
- example does not use contexts, which results in tedious management of all
- intermediate oids, as they need to be freed later on:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>#include &lt;sys/sysctl.h&gt;
- ...
-/*
- * Need to preserve pointers to newly created subtrees,
- * to be able to free them later:
- */
-static struct sysctl_oid *root1;
-static struct sysctl_oid *root2;
-static struct sysctl_oid *oidp;
-static int a_int;
-static char *string = &quot;dynamic sysctl&quot;;
- ...
-
-root1 = SYSCTL_ADD_ROOT_NODE(NULL,
- OID_AUTO, &quot;newtree&quot;, CTLFLAG_RW, 0, &quot;new top level tree&quot;);
-oidp = SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(root1),
- OID_AUTO, &quot;newint&quot;, CTLFLAG_RW, &amp;a_int, 0, &quot;new int leaf&quot;);
- ...
-root2 = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_debug),
- OID_AUTO, &quot;newtree&quot;, CTLFLAG_RW, 0, &quot;new tree under debug&quot;);
-oidp = SYSCTL_ADD_STRING(NULL, SYSCTL_CHILDREN(root2),
- OID_AUTO, &quot;newstring&quot;, CTLFLAG_RD, string, 0, &quot;new string leaf&quot;);</pre>
-</div>
-<p class="Pp">This example creates the following subtrees:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>debug.newtree.newstring
-newtree.newint</pre>
-</div>
-<p class="Pp" id="Care"><a class="permalink" href="#Care"><i class="Em">Care
- should be taken to free all OIDs once they are no longer needed!</i></a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYSCTL_NAMING"><a class="permalink" href="#SYSCTL_NAMING">SYSCTL
- NAMING</a></h1>
-<p class="Pp">When adding, modifying, or removing sysctl names, it is important
- to be aware that these interfaces may be used by users, libraries,
- applications, or documentation (such as published books), and are implicitly
- published application interfaces. As with other application interfaces,
- caution must be taken not to break existing applications, and to think about
- future use of new name spaces so as to avoid the need to rename or remove
- interfaces that might be depended on in the future.</p>
-<p class="Pp">The semantics chosen for a new sysctl should be as clear as
- possible, and the name of the sysctl must closely reflect its semantics.
- Therefore the sysctl name deserves a fair amount of consideration. It should
- be short but yet representative of the sysctl meaning. If the name consists
- of several words, they should be separated by underscore characters, as in
- <var class="Va">compute_summary_at_mount</var>. Underscore characters may be
- omitted only if the name consists of not more than two words, each being not
- longer than four characters, as in <var class="Va">bootfile</var>.</p>
-<p class="Pp">For boolean sysctls, negative logic should be totally avoided.
- That is, do not use names like <var class="Va">no_foobar</var> or
- <var class="Va">foobar_disable</var>. They are confusing and lead to
- configuration errors. Use positive logic instead:
- <var class="Va">foobar</var>, <var class="Va">foobar_enable</var>.</p>
-<p class="Pp">A temporary sysctl node OID that should not be relied upon must be
- designated as such by a leading underscore character in its name. For
- example: <var class="Va">_dirty_hack</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sysctl(3)</a>, <a class="Xr">sysctl(8)</a>,
- <a class="Xr">device_get_sysctl(9)</a>, <a class="Xr">sysctl_add_oid(9)</a>,
- <a class="Xr">sysctl_ctx_free(9)</a>, <a class="Xr">sysctl_ctx_init(9)</a>,
- <a class="Xr">sysctl_remove_oid(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <a class="Xr">sysctl(8)</a> utility first appeared in
- <span class="Ux">4.4BSD</span>.
- <code class="Nm">SYSCTL_ADD_CONST_STRING</code> first appeared in
- <span class="Ux">FreeBSD 12.1</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">sysctl</code> implementation originally found
- in <span class="Ux">BSD</span> has been extensively rewritten by
- <span class="An">Poul-Henning Kamp</span> in order to add support for name
- lookups, name space iteration, and dynamic addition of MIB nodes.</p>
-<p class="Pp">This man page was written by <span class="An">Robert N. M.
- Watson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SECURITY_CONSIDERATIONS"><a class="permalink" href="#SECURITY_CONSIDERATIONS">SECURITY
- CONSIDERATIONS</a></h1>
-<p class="Pp">When creating new sysctls, careful attention should be paid to the
- security implications of the monitoring or management interface being
- created. Most sysctls present in the kernel are read-only or writable only
- by the superuser. Sysctls exporting extensive information on system data
- structures and operation, especially those implemented using procedures,
- will wish to implement access control to limit the undesired exposure of
- information about other processes, network connections, etc.</p>
-<p class="Pp">The following top level sysctl name spaces are commonly used:</p>
-<dl class="Bl-tag">
- <dt id="compat"><var class="Va">compat</var></dt>
- <dd>Compatibility layer information.</dd>
- <dt id="debug"><var class="Va">debug</var></dt>
- <dd>Debugging information. Various name spaces exist under
- <var class="Va">debug</var>.</dd>
- <dt id="hw"><var class="Va">hw</var></dt>
- <dd>Hardware and device driver information.</dd>
- <dt id="kern"><var class="Va">kern</var></dt>
- <dd>Kernel behavior tuning; generally deprecated in favor of more specific
- name spaces.</dd>
- <dt id="machdep"><var class="Va">machdep</var></dt>
- <dd>Machine-dependent configuration parameters.</dd>
- <dt id="net"><var class="Va">net</var></dt>
- <dd>Network subsystem. Various protocols have name spaces under
- <var class="Va">net</var>.</dd>
- <dt id="regression"><var class="Va">regression</var></dt>
- <dd>Regression test configuration and information.</dd>
- <dt id="security"><var class="Va">security</var></dt>
- <dd>Security and security-policy configuration and information.</dd>
- <dt id="sysctl"><var class="Va">sysctl</var></dt>
- <dd>Reserved name space for the implementation of sysctl.</dd>
- <dt id="user"><var class="Va">user</var></dt>
- <dd>Configuration settings relating to user application behavior. Generally,
- configuring applications using kernel sysctls is discouraged.</dd>
- <dt id="vfs"><var class="Va">vfs</var></dt>
- <dd>Virtual file system configuration and information.</dd>
- <dt id="vm"><var class="Va">vm</var></dt>
- <dd>Virtual memory subsystem configuration and information.</dd>
-</dl>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 28, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sysctl_add_oid.9 3.html b/static/freebsd/man9/sysctl_add_oid.9 3.html
deleted file mode 100644
index a47cb3ce..00000000
--- a/static/freebsd/man9/sysctl_add_oid.9 3.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSCTL_ADD_OID(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSCTL_ADD_OID(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sysctl_add_oid</code>,
- <code class="Nm">sysctl_move_oid</code>,
- <code class="Nm">sysctl_remove_oid</code>,
- <code class="Nm">sysctl_remove_name</code> &#x2014; <span class="Nd">runtime
- sysctl tree manipulation</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
- <br/>
- <code class="Fn">sysctl_add_oid</code>(<var class="Fa">struct sysctl_ctx_list
- *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
- <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">int kind</var>, <var class="Fa">void *arg1</var>,
- <var class="Fa">intmax_t arg2</var>, <var class="Fa">int (*handler)
- (SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char *format</var>,
- <var class="Fa">const char *descr</var>, <var class="Fa">const char
- *label</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_move_oid</code>(<var class="Fa">struct sysctl_oid
- *oidp</var>, <var class="Fa">struct sysctl_oid_list *parent</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_remove_oid</code>(<var class="Fa">struct sysctl_oid
- *oidp</var>, <var class="Fa">int del</var>, <var class="Fa">int
- recurse</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_remove_name</code>(<var class="Fa">struct sysctl_oid
- *oidp</var>, <var class="Fa">const char *name</var>, <var class="Fa">int
- del</var>, <var class="Fa">int recurse</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions provide the interface for creating and deleting
- sysctl OIDs at runtime for example during the lifetime of a module. The
- wrapper macros defined by <a class="Xr">sysctl(9)</a> are recommended when
- creating new OIDs.
- <a class="permalink" href="#sysctl_add_oid"><code class="Fn" id="sysctl_add_oid">sysctl_add_oid</code></a>()
- should not be called directly from the code.</p>
-<p class="Pp">Dynamic OIDs of type <code class="Dv">CTLTYPE_NODE</code> are
- reusable so that several code sections can create and delete them, but in
- reality they are allocated and freed based on their reference count. As a
- consequence, it is possible for two or more code sections to create
- partially overlapping trees that they both can use. It is not possible to
- create overlapping leaves, nor to create different child types with the same
- name and parent.</p>
-<p class="Pp" id="sysctl_add_oid~2">The
- <a class="permalink" href="#sysctl_add_oid~2"><code class="Fn">sysctl_add_oid</code></a>()
- function creates a raw OID of any type and connects it to its parent node,
- if any. If the OID is successfully created, the function returns a pointer
- to it else it returns <code class="Dv">NULL</code>. Many of the arguments
- for <code class="Fn">sysctl_add_oid</code>() are common to the wrapper
- macros defined by <a class="Xr">sysctl(9)</a>.</p>
-<p class="Pp" id="sysctl_move_oid">The
- <a class="permalink" href="#sysctl_move_oid"><code class="Fn">sysctl_move_oid</code></a>()
- function reparents an existing OID. The OID is assigned a new number as if
- it had been created with <var class="Fa">number</var> set to
- <code class="Dv">OID_AUTO</code>.</p>
-<p class="Pp" id="sysctl_remove_oid">The
- <a class="permalink" href="#sysctl_remove_oid"><code class="Fn">sysctl_remove_oid</code></a>()
- function removes a dynamically created OID from the tree and optionally
- freeing its resources. It takes the following arguments:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">oidp</var></dt>
- <dd>A pointer to the dynamic OID to be removed. If the OID is not dynamic, or
- the pointer is <code class="Dv">NULL</code>, the function returns
- <code class="Er">EINVAL</code>.</dd>
- <dt><var class="Fa">del</var></dt>
- <dd>If non-zero, <code class="Fn">sysctl_remove_oid</code>() will try to free
- the OID's resources when the reference count of the OID becomes zero.
- However, if <var class="Fa">del</var> is set to 0, the routine will only
- deregister the OID from the tree, without freeing its resources. This
- behaviour is useful when the caller expects to rollback (possibly
- partially failed) deletion of many OIDs later.</dd>
- <dt id="WARNING"><var class="Fa">recurse</var></dt>
- <dd>If non-zero, attempt to remove the node and all its children. If
- <span class="Pa">recurse</span> is set to 0, any attempt to remove a node
- that contains any children will result in a
- <code class="Er">ENOTEMPTY</code> error.
- <a class="permalink" href="#WARNING"><i class="Em">WARNING</i></a>:
- <a class="permalink" href="#use"><i class="Em" id="use">use recursive
- deletion with extreme caution</i></a>! Normally it should not be needed if
- contexts are used. Contexts take care of tracking inter-dependencies
- between users of the tree. However, in some extreme cases it might be
- necessary to remove part of the subtree no matter how it was created, in
- order to free some other resources. Be aware, though, that this may result
- in a system <a class="Xr">panic(9)</a> if other code sections continue to
- use removed subtrees.</dd>
-</dl>
-<p class="Pp" id="sysctl_remove_name">The
- <a class="permalink" href="#sysctl_remove_name"><code class="Fn">sysctl_remove_name</code></a>()
- function looks up the child node matching the <var class="Fa">name</var>
- argument and then invokes the <code class="Fn">sysctl_remove_oid</code>()
- function on that node, passing along the <var class="Fa">del</var> and
- <var class="Fa">recurse</var> arguments. If a node having the specified name
- does not exist an error code of <code class="Er">ENOENT</code> is returned.
- Else the error code from <code class="Fn">sysctl_remove_oid</code>() is
- returned.</p>
-<p class="Pp">In most cases the programmer should use contexts, as described in
- <a class="Xr">sysctl_ctx_init(9)</a>, to keep track of created OIDs, and to
- delete them later in orderly fashion.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">sysctl(9)</a>,
- <a class="Xr">sysctl_ctx_free(9)</a>,
- <a class="Xr">sysctl_ctx_init(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions first appeared in <span class="Ux">FreeBSD
- 4.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Andrzej Bialecki</span>
- &lt;<a class="Mt" href="mailto:abial@FreeBSD.org">abial@FreeBSD.org</a>&gt;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">Sharing nodes between many code sections causes interdependencies
- that sometimes may lock the resources. For example, if module A hooks up a
- subtree to an OID created by module B, module B will be unable to delete
- that OID. These issues are handled properly by sysctl contexts.</p>
-<p class="Pp">Many operations on the tree involve traversing linked lists. For
- this reason, OID creation and removal is relatively costly.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 13, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/sysctl_ctx_init.9 3.html b/static/freebsd/man9/sysctl_ctx_init.9 3.html
deleted file mode 100644
index 6d96ac48..00000000
--- a/static/freebsd/man9/sysctl_ctx_init.9 3.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SYSCTL_CTX_INIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">SYSCTL_CTX_INIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sysctl_ctx_init</code>,
- <code class="Nm">sysctl_ctx_free</code>,
- <code class="Nm">sysctl_ctx_entry_add</code>,
- <code class="Nm">sysctl_ctx_entry_find</code>,
- <code class="Nm">sysctl_ctx_entry_del</code> &#x2014;
- <span class="Nd">sysctl context for managing dynamically created sysctl
- OIDs</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_ctx_init</code>(<var class="Fa">struct sysctl_ctx_list
- *clist</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_ctx_free</code>(<var class="Fa">struct sysctl_ctx_list
- *clist</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_ctx_entry *</var>
- <br/>
- <code class="Fn">sysctl_ctx_entry_add</code>(<var class="Fa">struct
- sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid
- *oidp</var>);</p>
-<p class="Pp"><var class="Ft">struct sysctl_ctx_entry *</var>
- <br/>
- <code class="Fn">sysctl_ctx_entry_find</code>(<var class="Fa">struct
- sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid
- *oidp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">sysctl_ctx_entry_del</code>(<var class="Fa">struct
- sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid
- *oidp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions provide an interface for managing dynamically
- created OIDs. The sysctl context is responsible for keeping track of created
- OIDs, as well as their proper removal when needed. It adds a simple
- transactional aspect to OID removal operations; i.e., if a removal operation
- fails part way, it is possible to roll back the sysctl tree to its previous
- state.</p>
-<p class="Pp" id="sysctl_ctx_init">The
- <a class="permalink" href="#sysctl_ctx_init"><code class="Fn">sysctl_ctx_init</code></a>()
- function initializes a sysctl context. The <var class="Fa">clist</var>
- argument must point to an already allocated variable. A context
- <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be
- initialized before use. Once it is initialized, a pointer to the context can
- be passed as an argument to all the <var class="Fa">SYSCTL_ADD_*</var>
- macros (see <a class="Xr">sysctl_add_oid(9)</a>), and it will be updated
- with entries pointing to newly created OIDS.</p>
-<p class="Pp">Internally, the context is represented as a
- <a class="Xr">queue(3)</a> TAILQ linked list. The list consists of
- <code class="Li">struct sysctl_ctx_entry</code> entries:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct sysctl_ctx_entry {
- struct sysctl_oid *entry;
- TAILQ_ENTRY(sysctl_ctx_entry) link;
-};
-
-TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);</pre>
-</div>
-<p class="Pp">Each context entry points to one dynamic OID that it manages.
- Newly created OIDs are always inserted in the front of the list.</p>
-<p class="Pp" id="sysctl_ctx_free">The
- <a class="permalink" href="#sysctl_ctx_free"><code class="Fn">sysctl_ctx_free</code></a>()
- function removes the context and associated OIDs it manages. If the function
- completes successfully, all managed OIDs have been unregistered (removed
- from the tree) and freed, together with all their allocated memory, and the
- entries of the context have been freed as well.</p>
-<p class="Pp" id="sysctl_ctx_free~2">The removal operation is performed in two
- steps. First, for each context entry, the function
- <a class="Xr">sysctl_remove_oid(9)</a> is executed, with parameter
- <var class="Fa">del</var> set to 0, which inhibits the freeing of resources.
- If there are no errors during this step,
- <a class="permalink" href="#sysctl_ctx_free~2"><code class="Fn">sysctl_ctx_free</code></a>()
- proceeds to the next step. If the first step fails, all unregistered OIDs
- associated with the context are registered again.</p>
-<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>:
- in most cases, the programmer specifies <code class="Dv">OID_AUTO</code> as
- the OID number when creating an OID. However, during registration of the OID
- in the tree, this number is changed to the first available number greater
- than or equal to <code class="Dv">CTL_AUTO_START</code>. If the first step
- of context deletion fails, re-registration of the OID does not change the
- already assigned OID number (which is different from OID_AUTO). This ensures
- that re-registered entries maintain their original positions in the
- tree.</p>
-<p class="Pp">The second step actually performs the deletion of the dynamic
- OIDs. <a class="Xr">sysctl_remove_oid(9)</a> iterates through the context
- list, starting from beginning (i.e., the newest entries).
- <i class="Em">Important</i>: this time, the function not only deletes the
- OIDs from the tree, but also frees their memory (provided that oid_refcnt ==
- 0), as well as the memory of all context entries.</p>
-<p class="Pp" id="sysctl_ctx_entry_add">The
- <a class="permalink" href="#sysctl_ctx_entry_add"><code class="Fn">sysctl_ctx_entry_add</code></a>()
- function allows the addition of an existing dynamic OID to a context.</p>
-<p class="Pp" id="sysctl_ctx_entry_del">The
- <a class="permalink" href="#sysctl_ctx_entry_del"><code class="Fn">sysctl_ctx_entry_del</code></a>()
- function removes an entry from the context. <i class="Em">Important</i>: in
- this case, only the corresponding <code class="Li">struct
- sysctl_ctx_entry</code> is freed, but the <var class="Fa">oidp</var> pointer
- remains intact. Thereafter, the programmer is responsible for managing the
- resources allocated to this OID.</p>
-<p class="Pp" id="sysctl_ctx_entry_find">The
- <a class="permalink" href="#sysctl_ctx_entry_find"><code class="Fn">sysctl_ctx_entry_find</code></a>()
- function searches for a given <var class="Fa">oidp</var> within a context
- list, either returning a pointer to the <var class="Fa">struct
- sysctl_ctx_entry</var> found, or <code class="Dv">NULL</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following is an example of how to create a new top-level
- category and how to hook up another subtree to an existing static node. This
- example uses contexts to keep track of the OIDs.</p>
-<div class="Bd Pp Li">
-<pre>#include &lt;sys/sysctl.h&gt;
- ...
-static struct sysctl_ctx_list clist;
-static struct sysctl_oid *oidp;
-static int a_int;
-static const char *string = &quot;dynamic sysctl&quot;;
- ...
-
-sysctl_ctx_init(&amp;clist);
-oidp = SYSCTL_ADD_ROOT_NODE(&amp;clist,
- OID_AUTO, &quot;newtree&quot;, CTLFLAG_RW, 0, &quot;new top level tree&quot;);
-oidp = SYSCTL_ADD_INT(&amp;clist, SYSCTL_CHILDREN(oidp),
- OID_AUTO, &quot;newint&quot;, CTLFLAG_RW, &amp;a_int, 0, &quot;new int leaf&quot;);
- ...
-oidp = SYSCTL_ADD_NODE(&amp;clist, SYSCTL_STATIC_CHILDREN(_debug),
- OID_AUTO, &quot;newtree&quot;, CTLFLAG_RW, 0, &quot;new tree under debug&quot;);
-oidp = SYSCTL_ADD_STRING(&amp;clist, SYSCTL_CHILDREN(oidp),
- OID_AUTO, &quot;newstring&quot;, CTLFLAG_RD, string, 0, &quot;new string leaf&quot;);
- ...
-/* Now we can free up the OIDs */
-if (sysctl_ctx_free(&amp;clist)) {
- printf(&quot;can't free this context - other OIDs depend on it&quot;);
- return (ENOTEMPTY);
-} else {
- printf(&quot;Success!\n&quot;);
- return (0);
-}</pre>
-</div>
-<p class="Pp">This example creates the following subtrees:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>debug.newtree.newstring
-newtree.newint</pre>
-</div>
-<p class="Pp">Note that both trees are removed, and their resources freed,
- through one <code class="Fn">sysctl_ctx_free</code>() call, which starts by
- freeing the newest entries (leaves) and then proceeds to free the older
- entries (in this case the nodes).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">queue(3)</a>, <a class="Xr">sysctl(8)</a>,
- <a class="Xr">sysctl(9)</a>, <a class="Xr">sysctl_add_oid(9)</a>,
- <a class="Xr">sysctl_remove_oid(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">These functions first appeared in <span class="Ux">FreeBSD
- 4.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><span class="An">Andrzej Bialecki</span>
- &lt;<a class="Mt" href="mailto:abial@FreeBSD.org">abial@FreeBSD.org</a>&gt;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">The current removal algorithm is somewhat heavy. In the worst
- case, all OIDs need to be unregistered, registered again, and then
- unregistered and deleted. However, the algorithm does guarantee
- transactional properties for removal operations.</p>
-<p class="Pp">All operations on contexts involve linked list traversal. For this
- reason, creation and removal of entries is relatively costly.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 31, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/taskqueue.9 4.html b/static/freebsd/man9/taskqueue.9 4.html
deleted file mode 100644
index d9c314ee..00000000
--- a/static/freebsd/man9/taskqueue.9 4.html
+++ /dev/null
@@ -1,494 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">TASKQUEUE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">TASKQUEUE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">taskqueue</code> &#x2014;
- <span class="Nd">asynchronous task execution</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/malloc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/queue.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/taskqueue.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>typedef void (*task_fn_t)(void *context, int pending);
-
-typedef void (*taskqueue_enqueue_fn)(void *context);
-
-struct task {
- STAILQ_ENTRY(task) ta_link; /* link for queue */
- u_short ta_pending; /* count times queued */
- u_short ta_priority; /* priority of task in queue */
- task_fn_t ta_func; /* task handler */
- void *ta_context; /* argument for handler */
-};
-
-enum taskqueue_callback_type {
- TASKQUEUE_CALLBACK_TYPE_INIT,
- TASKQUEUE_CALLBACK_TYPE_SHUTDOWN,
-};
-
-typedef void (*taskqueue_callback_fn)(void *context);
-
-struct timeout_task;</pre>
-</div>
-<br/>
-<var class="Ft">struct taskqueue *</var>
-<br/>
-<code class="Fn">taskqueue_create</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>,
- <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn
- enqueue</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>);
-<p class="Pp"><var class="Ft">struct taskqueue *</var>
- <br/>
- <code class="Fn">taskqueue_create_fast</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- mflags</var>,
- <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn
- enqueue</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_start_threads</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue **tqp</var>, <var class="Fa" style="white-space: nowrap;">int
- count</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>,
- <var class="Fa" style="white-space: nowrap;">const char *name</var>,
- <var class="Fa" style="white-space: nowrap;">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_start_threads_cpuset</code>(<var class="Fa">struct
- taskqueue **tqp</var>, <var class="Fa">int count</var>, <var class="Fa">int
- pri</var>, <var class="Fa">cpuset_t *mask</var>, <var class="Fa">const char
- *name</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_start_threads_in_proc</code>(<var class="Fa">struct
- taskqueue **tqp</var>, <var class="Fa">int count</var>, <var class="Fa">int
- pri</var>, <var class="Fa">struct proc *proc</var>, <var class="Fa">const
- char *name</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_set_callback</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">enum
- taskqueue_callback_type cb_type</var>,
- <var class="Fa" style="white-space: nowrap;">taskqueue_callback_fn
- callback</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_free</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- task *task</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_enqueue_flags</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- task *task</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_enqueue_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- timeout_task *timeout_task</var>,
- <var class="Fa" style="white-space: nowrap;">int ticks</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_enqueue_timeout_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- timeout_task *timeout_task</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>,
- <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_cancel</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- task *task</var>, <var class="Fa" style="white-space: nowrap;">u_int
- *pendp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_cancel_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- timeout_task *timeout_task</var>,
- <var class="Fa" style="white-space: nowrap;">u_int *pendp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_drain</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- task *task</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_drain_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- timeout_task *timeout_task</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_drain_all</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_quiesce</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_block</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_unblock</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">taskqueue_member</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- thread *td</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">taskqueue_run</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>);</p>
-<p class="Pp"><code class="Fn">TASK_INIT</code>(<var class="Fa" style="white-space: nowrap;">struct
- task *task</var>, <var class="Fa" style="white-space: nowrap;">int
- priority</var>, <var class="Fa" style="white-space: nowrap;">task_fn_t
- func</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>);</p>
-<p class="Pp"><code class="Fn">TASK_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">int
- priority</var>, <var class="Fa" style="white-space: nowrap;">task_fn_t
- func</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>);</p>
-<p class="Pp"><code class="Fn">TASKQUEUE_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">TASKQUEUE_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn
- enqueue</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>,
- <var class="Fa" style="white-space: nowrap;">init</var>);</p>
-<p class="Pp"><code class="Fn">TASKQUEUE_FAST_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn
- enqueue</var>, <var class="Fa" style="white-space: nowrap;">void
- *context</var>,
- <var class="Fa" style="white-space: nowrap;">init</var>);</p>
-<p class="Pp"><code class="Fn">TASKQUEUE_DEFINE_THREAD</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">TASKQUEUE_FAST_DEFINE_THREAD</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p>
-<p class="Pp"><code class="Fn">TIMEOUT_TASK_INIT</code>(<var class="Fa" style="white-space: nowrap;">struct
- taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct
- timeout_task *timeout_task</var>,
- <var class="Fa" style="white-space: nowrap;">int priority</var>,
- <var class="Fa" style="white-space: nowrap;">task_fn_t func</var>,
- <var class="Fa" style="white-space: nowrap;">void *context</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">These functions provide a simple interface for asynchronous
- execution of code.</p>
-<p class="Pp" id="taskqueue_create">The function
- <a class="permalink" href="#taskqueue_create"><code class="Fn">taskqueue_create</code></a>()
- is used to create new queues. The arguments to
- <code class="Fn">taskqueue_create</code>() include a name that should be
- unique, a set of <a class="Xr">malloc(9)</a> flags that specify whether the
- call to
- <a class="permalink" href="#malloc"><code class="Fn" id="malloc">malloc</code></a>()
- is allowed to sleep, a function that is called from
- <code class="Fn">taskqueue_enqueue</code>() when a task is added to the
- queue, and a pointer to the memory location where the identity of the thread
- that services the queue is recorded. The function called from
- <code class="Fn">taskqueue_enqueue</code>() must arrange for the queue to be
- processed (for instance by scheduling a software interrupt or waking a
- kernel thread). The memory location where the thread identity is recorded is
- used to signal the service thread(s) to terminate--when this value is set to
- zero and the thread is signaled it will terminate. If the queue is intended
- for use in fast interrupt handlers
- <code class="Fn">taskqueue_create_fast</code>() should be used in place of
- <code class="Fn">taskqueue_create</code>().</p>
-<p class="Pp" id="taskqueue_free">The function
- <a class="permalink" href="#taskqueue_free"><code class="Fn">taskqueue_free</code></a>()
- should be used to free the memory used by the queue. Any tasks that are on
- the queue will be executed at this time after which the thread servicing the
- queue will be signaled that it should exit.</p>
-<p class="Pp" id="taskqueue_start_threads">Once a taskqueue has been created,
- its threads should be started using
- <a class="permalink" href="#taskqueue_start_threads"><code class="Fn">taskqueue_start_threads</code></a>(),
- <a class="permalink" href="#taskqueue_start_threads_cpuset"><code class="Fn" id="taskqueue_start_threads_cpuset">taskqueue_start_threads_cpuset</code></a>()
- or
- <a class="permalink" href="#taskqueue_start_threads_in_proc"><code class="Fn" id="taskqueue_start_threads_in_proc">taskqueue_start_threads_in_proc</code></a>().
- <code class="Fn">taskqueue_start_threads_cpuset</code>() takes a
- <var class="Va">cpuset</var> argument which will cause the threads which are
- started for the taskqueue to be restricted to run on the given CPUs.
- <code class="Fn">taskqueue_start_threads_in_proc</code>() takes a
- <var class="Va">proc</var> argument which will cause the threads which are
- started for the taskqueue to be assigned to the given kernel process.
- Callbacks may optionally be registered using
- <a class="permalink" href="#taskqueue_set_callback"><code class="Fn" id="taskqueue_set_callback">taskqueue_set_callback</code></a>().
- Currently, callbacks may be registered for the following purposes:</p>
-<dl class="Bl-tag">
- <dt id="TASKQUEUE_CALLBACK_TYPE_INIT"><a class="permalink" href="#TASKQUEUE_CALLBACK_TYPE_INIT"><code class="Dv">TASKQUEUE_CALLBACK_TYPE_INIT</code></a></dt>
- <dd>This callback is called by every thread in the taskqueue, before it
- executes any tasks. This callback must be set before the taskqueue's
- threads are started.</dd>
- <dt id="TASKQUEUE_CALLBACK_TYPE_SHUTDOWN"><a class="permalink" href="#TASKQUEUE_CALLBACK_TYPE_SHUTDOWN"><code class="Dv">TASKQUEUE_CALLBACK_TYPE_SHUTDOWN</code></a></dt>
- <dd>This callback is called by every thread in the taskqueue, after it
- executes its last task. This callback will always be called before the
- taskqueue structure is reclaimed.</dd>
-</dl>
-<p class="Pp" id="taskqueue_enqueue">To add a task to the list of tasks queued
- on a taskqueue, call
- <a class="permalink" href="#taskqueue_enqueue"><code class="Fn">taskqueue_enqueue</code></a>()
- with pointers to the queue and task. If the task's
- <var class="Va">ta_pending</var> field is non-zero, then it is simply
- incremented to reflect the number of times the task was enqueued, up to a
- cap of USHRT_MAX. Otherwise, the task is added to the list before the first
- task which has a lower <var class="Va">ta_priority</var> value or at the end
- of the list if no tasks have a lower priority. Enqueueing a task does not
- perform any memory allocation which makes it suitable for calling from an
- interrupt handler. This function will return <code class="Er">EPIPE</code>
- if the queue is being freed.</p>
-<p class="Pp" id="taskqueue_enqueue~2">When a task is executed, first it is
- removed from the queue, the value of <var class="Va">ta_pending</var> is
- recorded and then the field is zeroed. The function
- <var class="Va">ta_func</var> from the task structure is called with the
- value of the field <var class="Va">ta_context</var> as its first argument
- and the value of <var class="Va">ta_pending</var> as its second argument.
- After the function <var class="Va">ta_func</var> returns,
- <a class="Xr">wakeup(9)</a> is called on the task pointer passed to
- <a class="permalink" href="#taskqueue_enqueue~2"><code class="Fn">taskqueue_enqueue</code></a>().</p>
-<p class="Pp" id="taskqueue_enqueue_flags">The
- <a class="permalink" href="#taskqueue_enqueue_flags"><code class="Fn">taskqueue_enqueue_flags</code></a>()
- accepts an extra <var class="Va">flags</var> parameter which specifies a set
- of optional flags to alter the behavior of
- <code class="Fn">taskqueue_enqueue</code>(). It contains one or more of the
- following flags:</p>
-<dl class="Bl-tag">
- <dt id="TASKQUEUE_FAIL_IF_PENDING"><a class="permalink" href="#TASKQUEUE_FAIL_IF_PENDING"><code class="Dv">TASKQUEUE_FAIL_IF_PENDING</code></a></dt>
- <dd><code class="Fn">taskqueue_enqueue_flags</code>() fails if the task is
- already scheduled for execution. <code class="Er">EEXIST</code> is
- returned and the <var class="Va">ta_pending</var> counter value remains
- unchanged.</dd>
- <dt id="TASKQUEUE_FAIL_IF_CANCELING"><a class="permalink" href="#TASKQUEUE_FAIL_IF_CANCELING"><code class="Dv">TASKQUEUE_FAIL_IF_CANCELING</code></a></dt>
- <dd><code class="Fn">taskqueue_enqueue_flags</code>() fails if the task is in
- the canceling state and <code class="Er">ECANCELED</code> is
- returned.</dd>
-</dl>
-<p class="Pp" id="taskqueue_enqueue_timeout">The
- <a class="permalink" href="#taskqueue_enqueue_timeout"><code class="Fn">taskqueue_enqueue_timeout</code></a>()
- function is used to schedule the enqueue after the specified number of
- <var class="Va">ticks</var>. The
- <a class="permalink" href="#taskqueue_enqueue_timeout_sbt"><code class="Fn" id="taskqueue_enqueue_timeout_sbt">taskqueue_enqueue_timeout_sbt</code></a>()
- function provides finer control over the scheduling based on
- <var class="Va">sbt</var>, <var class="Va">pr</var>, and
- <var class="Va">flags</var>, as detailed in <a class="Xr">callout(9)</a>. If
- the <var class="Va">ticks</var> argument is negative, the already scheduled
- enqueueing is not re-scheduled. Otherwise, the task is scheduled for
- enqueueing in the future, after the absolute value of
- <var class="Va">ticks</var> is passed. This function returns -1 if the task
- is being drained. Otherwise, the number of pending calls is returned.</p>
-<p class="Pp" id="taskqueue_cancel">The
- <a class="permalink" href="#taskqueue_cancel"><code class="Fn">taskqueue_cancel</code></a>()
- function is used to cancel a task. The <var class="Va">ta_pending</var>
- count is cleared, and the old value returned in the reference parameter
- <var class="Fa">pendp</var>, if it is non-<code class="Dv">NULL</code>. If
- the task is currently running, <code class="Dv">EBUSY</code> is returned,
- otherwise 0. To implement a blocking
- <code class="Fn">taskqueue_cancel</code>() that waits for a running task to
- finish, it could look like:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>while (taskqueue_cancel(tq, task, NULL) != 0)
- taskqueue_drain(tq, task);</pre>
-</div>
-<p class="Pp" id="taskqueue_drain">Note that, as with
- <a class="permalink" href="#taskqueue_drain"><code class="Fn">taskqueue_drain</code></a>(),
- the caller is responsible for ensuring that the task is not re-enqueued
- after being canceled.</p>
-<p class="Pp" id="taskqueue_cancel_timeout">Similarly, the
- <a class="permalink" href="#taskqueue_cancel_timeout"><code class="Fn">taskqueue_cancel_timeout</code></a>()
- function is used to cancel the scheduled task execution.</p>
-<p class="Pp" id="taskqueue_drain~2">The
- <a class="permalink" href="#taskqueue_drain~2"><code class="Fn">taskqueue_drain</code></a>()
- function is used to wait for the task to finish, and the
- <a class="permalink" href="#taskqueue_drain_timeout"><code class="Fn" id="taskqueue_drain_timeout">taskqueue_drain_timeout</code></a>()
- function is used to wait for the scheduled task to finish. There is no
- guarantee that the task will not be enqueued after call to
- <code class="Fn">taskqueue_drain</code>(). If the caller wants to put the
- task into a known state, then before calling
- <code class="Fn">taskqueue_drain</code>() the caller should use out-of-band
- means to ensure that the task would not be enqueued. For example, if the
- task is enqueued by an interrupt filter, then the interrupt could be
- disabled.</p>
-<p class="Pp" id="taskqueue_drain_all">The
- <a class="permalink" href="#taskqueue_drain_all"><code class="Fn">taskqueue_drain_all</code></a>()
- function is used to wait for all pending and running tasks that are enqueued
- on the taskqueue to finish. Tasks posted to the taskqueue after
- <code class="Fn">taskqueue_drain_all</code>() begins processing, including
- pending enqueues scheduled by a previous call to
- <code class="Fn">taskqueue_enqueue_timeout</code>(), do not extend the wait
- time of <code class="Fn">taskqueue_drain_all</code>() and may complete after
- <code class="Fn">taskqueue_drain_all</code>() returns. The
- <a class="permalink" href="#taskqueue_quiesce"><code class="Fn" id="taskqueue_quiesce">taskqueue_quiesce</code></a>()
- function is used to wait for the queue to become empty and for all running
- tasks to finish. To avoid blocking indefinitely, the caller must ensure by
- some mechanism that tasks will eventually stop being posted to the
- queue.</p>
-<p class="Pp" id="taskqueue_block">The
- <a class="permalink" href="#taskqueue_block"><code class="Fn">taskqueue_block</code></a>()
- function blocks the taskqueue. It prevents any enqueued but not running
- tasks from being executed. Future calls to
- <code class="Fn">taskqueue_enqueue</code>() will enqueue tasks, but the
- tasks will not be run until <code class="Fn">taskqueue_unblock</code>() is
- called. Please note that <code class="Fn">taskqueue_block</code>() does not
- wait for any currently running tasks to finish. Thus, the
- <code class="Fn">taskqueue_block</code>() does not provide a guarantee that
- <code class="Fn">taskqueue_run</code>() is not running after
- <code class="Fn">taskqueue_block</code>() returns, but it does provide a
- guarantee that <code class="Fn">taskqueue_run</code>() will not be called
- again until <code class="Fn">taskqueue_unblock</code>() is called. If the
- caller requires a guarantee that <code class="Fn">taskqueue_run</code>() is
- not running, then this must be arranged by the caller. Note that if
- <code class="Fn">taskqueue_drain</code>() is called on a task that is
- enqueued on a taskqueue that is blocked by
- <code class="Fn">taskqueue_block</code>(), then
- <code class="Fn">taskqueue_drain</code>() can not return until the taskqueue
- is unblocked. This can result in a deadlock if the thread blocked in
- <code class="Fn">taskqueue_drain</code>() is the thread that is supposed to
- call <code class="Fn">taskqueue_unblock</code>(). Thus, use of
- <code class="Fn">taskqueue_drain</code>() after
- <code class="Fn">taskqueue_block</code>() is discouraged, because the state
- of the task can not be known in advance. The same caveat applies to
- <code class="Fn">taskqueue_drain_all</code>().</p>
-<p class="Pp" id="taskqueue_unblock">The
- <a class="permalink" href="#taskqueue_unblock"><code class="Fn">taskqueue_unblock</code></a>()
- function unblocks the previously blocked taskqueue. All enqueued tasks can
- be run after this call.</p>
-<p class="Pp" id="taskqueue_member">The
- <a class="permalink" href="#taskqueue_member"><code class="Fn">taskqueue_member</code></a>()
- function returns <span class="No">1</span> if the given thread
- <var class="Fa">td</var> is part of the given taskqueue
- <var class="Fa">queue</var> and <span class="No">0</span> otherwise.</p>
-<p class="Pp" id="taskqueue_run">The
- <a class="permalink" href="#taskqueue_run"><code class="Fn">taskqueue_run</code></a>()
- function will run all pending tasks in the specified
- <var class="Fa">queue</var>. Normally this function is only used
- internally.</p>
-<p class="Pp" id="TASK_INIT">A convenience macro,
- <a class="permalink" href="#TASK_INIT"><code class="Fn">TASK_INIT</code></a>(<var class="Fa">task</var>,
- <var class="Fa">priority</var>, <var class="Fa">func</var>,
- <var class="Fa">context</var>) is provided to initialise a
- <var class="Va">task</var> structure. The
- <a class="permalink" href="#TASK_INITIALIZER"><code class="Fn" id="TASK_INITIALIZER">TASK_INITIALIZER</code></a>()
- macro generates an initializer for a task structure. A macro
- <a class="permalink" href="#TIMEOUT_TASK_INIT"><code class="Fn" id="TIMEOUT_TASK_INIT">TIMEOUT_TASK_INIT</code></a>(<var class="Fa">queue</var>,
- <var class="Fa">timeout_task</var>, <var class="Fa">priority</var>,
- <var class="Fa">func</var>, <var class="Fa">context</var>) initializes the
- <var class="Va">timeout_task</var> structure. The values of
- <var class="Va">priority</var>, <var class="Va">func</var>, and
- <var class="Va">context</var> are simply copied into the task structure
- fields and the <var class="Va">ta_pending</var> field is cleared.</p>
-<p class="Pp" id="TASKQUEUE_DECLARE">Five macros
- <a class="permalink" href="#TASKQUEUE_DECLARE"><code class="Fn">TASKQUEUE_DECLARE</code></a>(<var class="Fa">name</var>),
- <a class="permalink" href="#TASKQUEUE_DEFINE"><code class="Fn" id="TASKQUEUE_DEFINE">TASKQUEUE_DEFINE</code></a>(<var class="Fa">name</var>,
- <var class="Fa">enqueue</var>, <var class="Fa">context</var>,
- <var class="Fa">init</var>),
- <code class="Fn">TASKQUEUE_FAST_DEFINE</code>(<var class="Fa">name</var>,
- <var class="Fa">enqueue</var>, <var class="Fa">context</var>,
- <var class="Fa">init</var>), and
- <code class="Fn">TASKQUEUE_DEFINE_THREAD</code>(<var class="Fa">name</var>)
- <code class="Fn">TASKQUEUE_FAST_DEFINE_THREAD</code>(<var class="Fa">name</var>)
- are used to declare a reference to a global queue, to define the
- implementation of the queue, and declare a queue that uses its own thread.
- The <code class="Fn">TASKQUEUE_DEFINE</code>() macro arranges to call
- <code class="Fn">taskqueue_create</code>() with the values of its
- <var class="Va">name</var>, <var class="Va">enqueue</var> and
- <var class="Va">context</var> arguments during system initialisation. After
- calling <code class="Fn">taskqueue_create</code>(), the
- <var class="Va">init</var> argument to the macro is executed as a C
- statement, allowing any further initialisation to be performed (such as
- registering an interrupt handler, etc.).</p>
-<p class="Pp" id="TASKQUEUE_DEFINE_THREAD">The
- <a class="permalink" href="#TASKQUEUE_DEFINE_THREAD"><code class="Fn">TASKQUEUE_DEFINE_THREAD</code></a>()
- macro defines a new taskqueue with its own kernel thread to serve tasks. The
- variable <var class="Vt">struct taskqueue *taskqueue_name</var> is used to
- enqueue tasks onto the queue.</p>
-<p class="Pp" id="TASKQUEUE_FAST_DEFINE"><a class="permalink" href="#TASKQUEUE_FAST_DEFINE"><code class="Fn">TASKQUEUE_FAST_DEFINE</code></a>()
- and
- <a class="permalink" href="#TASKQUEUE_FAST_DEFINE_THREAD"><code class="Fn" id="TASKQUEUE_FAST_DEFINE_THREAD">TASKQUEUE_FAST_DEFINE_THREAD</code></a>()
- act just like <code class="Fn">TASKQUEUE_DEFINE</code>() and
- <code class="Fn">TASKQUEUE_DEFINE_THREAD</code>() respectively but taskqueue
- is created with
- <a class="permalink" href="#taskqueue_create_fast"><code class="Fn" id="taskqueue_create_fast">taskqueue_create_fast</code></a>().</p>
-<section class="Ss">
-<h2 class="Ss" id="Predefined_Task_Queues"><a class="permalink" href="#Predefined_Task_Queues">Predefined
- Task Queues</a></h2>
-<p class="Pp">The system provides four global taskqueues,
- <var class="Va">taskqueue_fast</var>, <var class="Va">taskqueue_swi</var>,
- <var class="Va">taskqueue_swi_giant</var>, and
- <var class="Va">taskqueue_thread</var>. The
- <var class="Va">taskqueue_fast</var> queue is for swi handlers dispatched
- from fast interrupt handlers, where sleep mutexes cannot be used. The swi
- taskqueues are run via a software interrupt mechanism. The
- <var class="Va">taskqueue_swi</var> queue runs without the protection of the
- <var class="Va">Giant</var> kernel lock, and the
- <var class="Va">taskqueue_swi_giant</var> queue runs with the protection of
- the <var class="Va">Giant</var> kernel lock. The thread taskqueue
- <var class="Va">taskqueue_thread</var> runs in a kernel thread context, and
- tasks run from this thread do not run under the <var class="Va">Giant</var>
- kernel lock. If the caller wants to run under <var class="Va">Giant</var>,
- he should explicitly acquire and release <var class="Va">Giant</var> in his
- taskqueue handler routine.</p>
-<p class="Pp" id="taskqueue_enqueue~3">To use these queues, call
- <a class="permalink" href="#taskqueue_enqueue~3"><code class="Fn">taskqueue_enqueue</code></a>()
- with the value of the global taskqueue variable for the queue you wish to
- use.</p>
-<p class="Pp">The software interrupt queues can be used, for instance, for
- implementing interrupt handlers which must perform a significant amount of
- processing in the handler. The hardware interrupt handler would perform
- minimal processing of the interrupt and then enqueue a task to finish the
- work. This reduces to a minimum the amount of time spent with interrupts
- disabled.</p>
-<p class="Pp">The thread queue can be used, for instance, by interrupt level
- routines that need to call kernel functions that do things that can only be
- done from a thread context. (e.g., call malloc with the M_WAITOK flag.)</p>
-<p class="Pp">Note that tasks queued on shared taskqueues such as
- <var class="Va">taskqueue_swi</var> may be delayed an indeterminate amount
- of time before execution. If queueing delays cannot be tolerated then a
- private taskqueue should be created with a dedicated processing thread.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">intr_event(9)</a>,
- <a class="Xr">kthread(9)</a>, <a class="Xr">swi(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This interface first appeared in <span class="Ux">FreeBSD
- 5.0</span>. There is a similar facility called work_queue in the Linux
- kernel.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 25, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/tcp_functions.9 3.html b/static/freebsd/man9/tcp_functions.9 3.html
deleted file mode 100644
index a75f8a1f..00000000
--- a/static/freebsd/man9/tcp_functions.9 3.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">TCP_FUNCTIONS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">TCP_FUNCTIONS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">tcp_functions</code> &#x2014;
- <span class="Nd">Alternate TCP Stack Framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">netinet/tcp.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">netinet/tcp_var.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">register_tcp_functions</code>(<var class="Fa" style="white-space: nowrap;">struct
- tcp_function_block *blk</var>,
- <var class="Fa" style="white-space: nowrap;">int wait</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">register_tcp_functions_as_name</code>(<var class="Fa" style="white-space: nowrap;">struct
- tcp_function_block *blk</var>,
- <var class="Fa" style="white-space: nowrap;">const char *name</var>,
- <var class="Fa" style="white-space: nowrap;">int wait</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">register_tcp_functions_as_names</code>(<var class="Fa" style="white-space: nowrap;">struct
- tcp_function_block *blk</var>,
- <var class="Fa" style="white-space: nowrap;">int wait</var>,
- <var class="Fa" style="white-space: nowrap;">const char *names[]</var>,
- <var class="Fa" style="white-space: nowrap;">int *num_names</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">deregister_tcp_functions</code>(<var class="Fa" style="white-space: nowrap;">struct
- tcp_function_block *blk</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">tcp_functions</code> framework allows a
- kernel developer to implement alternate TCP stacks. The alternate stacks can
- be compiled in the kernel or can be implemented in loadable kernel modules.
- This functionality is intended to encourage experimentation with the TCP
- stack and to allow alternate behaviors to be deployed for different TCP
- connections on a single system.</p>
-<p class="Pp">A system administrator can set a system default stack. By default,
- all TCP connections will use the system default stack. Additionally, users
- can specify a particular stack to use on a per-connection basis. (See
- <a class="Xr">tcp(4)</a> for details on setting the system default stack, or
- selecting a specific stack for a given connection.)</p>
-<p class="Pp">This man page treats &quot;TCP stacks&quot; as synonymous with
- &quot;function blocks&quot;. This is intentional. A &quot;TCP stack&quot; is
- a collection of functions that implement a set of behavior. Therefore, an
- alternate &quot;function block&quot; defines an alternate &quot;TCP
- stack&quot;.</p>
-<p class="Pp" id="register_tcp_functions">The
- <a class="permalink" href="#register_tcp_functions"><code class="Fn">register_tcp_functions</code></a>(),
- <code class="Fn">register_tcp_functions_as_name</code>(), and
- <code class="Fn">register_tcp_functions_as_names</code>() functions request
- that the system add a specified function block and register it for use with
- a given name. Modules may register the same function block multiple times
- with different names. However, names must be globally unique among all
- registered function blocks. Also, modules may not ever modify the contents
- of the function block (including the name) after it has been registered,
- unless the module first successfully de-registers the function block.</p>
-<p class="Pp" id="register_tcp_functions~2">The
- <a class="permalink" href="#register_tcp_functions~2"><code class="Fn">register_tcp_functions</code></a>()
- function requests that the system register the function block with the name
- defined in the function block's <var class="Va">tfb_tcp_block_name</var>
- field. Note that this is the only one of the three registration functions
- that automatically registers the function block using the name defined in
- the function block's <var class="Va">tfb_tcp_block_name</var> field. If a
- module uses one of the other registration functions, it may request that the
- system register the function block using the name defined in the function
- block's <var class="Va">tfb_tcp_block_name</var> field by explicitly
- providing that name.</p>
-<p class="Pp" id="register_tcp_functions_as_name">The
- <a class="permalink" href="#register_tcp_functions_as_name"><code class="Fn">register_tcp_functions_as_name</code></a>()
- function requests that the system register the function block with the name
- provided in the <var class="Fa">name</var> argument.</p>
-<p class="Pp" id="register_tcp_functions_as_names">The
- <a class="permalink" href="#register_tcp_functions_as_names"><code class="Fn">register_tcp_functions_as_names</code></a>()
- function requests that the system register the function block with all the
- names provided in the <var class="Fa">names</var> argument. The
- <var class="Fa">num_names</var> argument provides a pointer to the number of
- names. This number must not exceed TCP_FUNCTION_NAME_NUM_MAX. This function
- will either succeed in registering all of the names in the array, or none of
- the names in the array. On failure, the <var class="Fa">num_names</var>
- argument is updated with the index number of the entry in the
- <var class="Fa">names</var> array which the system was processing when it
- encountered the error.</p>
-<p class="Pp" id="deregister_tcp_functions">The
- <a class="permalink" href="#deregister_tcp_functions"><code class="Fn">deregister_tcp_functions</code></a>()
- function requests that the system remove a specified function block from the
- system. If this call succeeds, it will completely deregister the function
- block, regardless of the number of names used to register the function
- block. If the call fails because sockets are still using the specified
- function block, the system will mark the function block as being in the
- process of being removed. This will prevent additional sockets from using
- the specified function block. However, it will not impact sockets that are
- already using the function block.</p>
-<p class="Pp" id="deregister_tcp_functions~2"><code class="Nm">tcp_functions</code>
- modules must call one or more of the registration functions during
- initialization and successfully call the
- <a class="permalink" href="#deregister_tcp_functions~2"><code class="Fn">deregister_tcp_functions</code></a>()
- function prior to allowing the module to be unloaded.</p>
-<p class="Pp">The <var class="Fa">blk</var> argument is a pointer to a
- <var class="Vt">struct tcp_function_block</var>, which is explained below
- (see <a class="Sx" href="#Function_Block_Structure">Function Block
- Structure</a>). The <var class="Fa">wait</var> argument is used as the
- <var class="Fa">flags</var> argument to <a class="Xr">malloc(9)</a>, and
- must be set to one of the valid values defined in that man page.</p>
-<section class="Ss">
-<h2 class="Ss" id="Function_Block_Structure"><a class="permalink" href="#Function_Block_Structure">Function
- Block Structure</a></h2>
-<p class="Pp">The <var class="Fa">blk argument is a pointer to a</var>
- <var class="Vt">struct tcp_function_block</var>, which has the following
- members:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct tcp_function_block {
- char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX];
- int (*tfb_tcp_output)(struct tcpcb *);
- void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *,
- struct socket *, struct tcpcb *,
- int, int, uint8_t,
- int);
- int (*tfb_tcp_ctloutput)(struct socket *so,
- struct sockopt *sopt,
- struct inpcb *inp, struct tcpcb *tp);
- /* Optional memory allocation/free routine */
- void (*tfb_tcp_fb_init)(struct tcpcb *);
- void (*tfb_tcp_fb_fini)(struct tcpcb *, int);
- /* Optional timers, must define all if you define one */
- int (*tfb_tcp_timer_stop_all)(struct tcpcb *);
- void (*tfb_tcp_timer_activate)(struct tcpcb *,
- uint32_t, u_int);
- int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t);
- void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t);
- /* Optional function */
- void (*tfb_tcp_rexmit_tmr)(struct tcpcb *);
- /* Mandatory function */
- int (*tfb_tcp_handoff_ok)(struct tcpcb *);
- /* System use */
- volatile uint32_t tfb_refcnt;
- uint32_t tfb_flags;
-};</pre>
-</div>
-<p class="Pp">The <var class="Va">tfb_tcp_block_name</var> field identifies the
- unique name of the TCP stack, and should be no longer than
- TCP_FUNCTION_NAME_LEN_MAX-1 characters in length.</p>
-<p class="Pp" id="tcp_output">The <var class="Va">tfb_tcp_output</var>,
- <var class="Va">tfb_tcp_do_segment</var>, and
- <var class="Va">tfb_tcp_ctloutput</var> fields are pointers to functions
- that perform the equivalent actions as the default
- <a class="permalink" href="#tcp_output"><code class="Fn">tcp_output</code></a>(),
- <a class="permalink" href="#tcp_do_segment"><code class="Fn" id="tcp_do_segment">tcp_do_segment</code></a>(),
- and
- <a class="permalink" href="#tcp_default_ctloutput"><code class="Fn" id="tcp_default_ctloutput">tcp_default_ctloutput</code></a>()
- functions, respectively. Each of these function pointers must be
- non-NULL.</p>
-<p class="Pp">If a TCP stack needs to initialize data when a socket first
- selects the TCP stack (or, when the socket is first opened), it should set a
- non-NULL pointer in the <var class="Va">tfb_tcp_fb_init</var> field.
- Likewise, if a TCP stack needs to cleanup data when a socket stops using the
- TCP stack (or, when the socket is closed), it should set a non-NULL pointer
- in the <var class="Va">tfb_tcp_fb_fini</var> field.</p>
-<p class="Pp">If the <var class="Va">tfb_tcp_fb_fini</var> argument is non-NULL,
- the function to which it points is called when the kernel is destroying the
- TCP control block or when the socket is transitioning to use a different TCP
- stack. The function is called with arguments of the TCP control block and an
- integer flag. The flag will be zero if the socket is transitioning to use
- another TCP stack or one if the TCP control block is being destroyed.</p>
-<p class="Pp" id="tcp_timer_activate">If the TCP stack implements additional
- timers, the TCP stack should set a non-NULL pointer in the
- <var class="Va">tfb_tcp_timer_stop_all</var>,
- <var class="Va">tfb_tcp_timer_activate</var>,
- <var class="Va">tfb_tcp_timer_active</var>, and
- <var class="Va">tfb_tcp_timer_stop</var> fields. These fields should all be
- <code class="Dv">NULL</code> or should all contain pointers to functions.
- The <var class="Va">tfb_tcp_timer_activate</var>,
- <var class="Va">tfb_tcp_timer_active</var>, and
- <var class="Va">tfb_tcp_timer_stop</var> functions will be called when the
- <a class="permalink" href="#tcp_timer_activate"><code class="Fn">tcp_timer_activate</code></a>(),
- <a class="permalink" href="#tcp_timer_active"><code class="Fn" id="tcp_timer_active">tcp_timer_active</code></a>(),
- and
- <a class="permalink" href="#tcp_timer_stop"><code class="Fn" id="tcp_timer_stop">tcp_timer_stop</code></a>()
- functions, respectively, are called with a timer type other than the
- standard types. The functions defined by the TCP stack have the same
- semantics (both for arguments and return values) as the normal timer
- functions they supplement.</p>
-<p class="Pp">Additionally, a stack may define its own actions to take when the
- retransmit timer fires by setting a non-NULL function pointer in the
- <var class="Va">tfb_tcp_rexmit_tmr</var> field. This function is called very
- early in the process of handling a retransmit timer. However, care must be
- taken to ensure the retransmit timer leaves the TCP control block in a valid
- state for the remainder of the retransmit timer logic.</p>
-<p class="Pp">A user may select a new TCP stack before calling at any time.
- Therefore, the function pointer <var class="Va">tfb_tcp_handoff_ok</var>
- field must be non-NULL. If a user attempts to select that TCP stack, the
- kernel will call the function pointed to by the
- <var class="Va">tfb_tcp_handoff_ok</var> field. The function should return 0
- if the user is allowed to switch the socket to use the TCP stack. In this
- case, the kernel will call the function pointed to by
- <var class="Va">tfb_tcp_fb_init</var> if this function pointer is non-NULL
- and finally perform the stack switch. If the user is not allowed to switch
- the socket, the function should undo any changes it made to the connection
- state configuration and return an error code, which will be returned to the
- user.</p>
-<p class="Pp">The <var class="Va">tfb_refcnt</var> and
- <var class="Va">tfb_flags</var> fields are used by the kernel's TCP code and
- will be initialized when the TCP stack is registered.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Requirements_for_Alternate_TCP_Stacks"><a class="permalink" href="#Requirements_for_Alternate_TCP_Stacks">Requirements
- for Alternate TCP Stacks</a></h2>
-<p class="Pp">If the TCP stack needs to store data beyond what is stored in the
- default TCP control block, the TCP stack can initialize its own
- per-connection storage. The <var class="Va">t_fb_ptr</var> field in the
- <var class="Vt">struct tcpcb</var> control block structure has been reserved
- to hold a pointer to this per-connection storage. If the TCP stack uses this
- alternate storage, it should understand that the value of the
- <var class="Va">t_fb_ptr</var> pointer may not be initialized to
- <code class="Dv">NULL</code>. Therefore, it should use a
- <var class="Va">tfb_tcp_fb_init</var> function to initialize this field.
- Additionally, it should use a <var class="Va">tfb_tcp_fb_fini</var> function
- to deallocate storage when the socket is closed.</p>
-<p class="Pp">It is understood that alternate TCP stacks may keep different sets
- of data. However, in order to ensure that data is available to both the user
- and the rest of the system in a standardized format, alternate TCP stacks
- must update all fields in the TCP control block to the greatest extent
- practical.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">register_tcp_functions</code>(),
- <code class="Fn">register_tcp_functions_as_name</code>(),
- <code class="Fn">register_tcp_functions_as_names</code>(), and
- <code class="Fn">deregister_tcp_functions</code>() functions return zero on
- success and non-zero on failure. In particular, the
- <code class="Fn">deregister_tcp_functions</code>() will return
- <code class="Er">EBUSY</code> until no more connections are using the
- specified TCP stack. A module calling
- <code class="Fn">deregister_tcp_functions</code>() must be prepared to wait
- until all connections have stopped using the specified TCP stack.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">register_tcp_functions</code>(),
- <code class="Fn">register_tcp_functions_as_name</code>(), and
- <code class="Fn">register_tcp_functions_as_names</code>() functions will
- fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>Any of the members of the <var class="Fa">blk</var> argument are set
- incorrectly.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The function could not allocate memory for its internal data.</dd>
- <dt id="EALREADY">[<a class="permalink" href="#EALREADY"><code class="Er">EALREADY</code></a>]</dt>
- <dd>The <var class="Fa">blk</var> is already registered or a function block is
- already registered with the same name.</dd>
-</dl>
-Additionally, <code class="Fn">register_tcp_functions_as_names</code>() will
- fail if:
-<dl class="Bl-tag">
- <dt id="E2BIG">[<a class="permalink" href="#E2BIG"><code class="Er">E2BIG</code></a>]</dt>
- <dd>The number of names pointed to by the <var class="Fa">num_names</var>
- argument is larger than TCP_FUNCTION_NAME_NUM_MAX.</dd>
-</dl>
-The <code class="Fn">deregister_tcp_functions</code>() function will fail if:
-<dl class="Bl-tag">
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>The <var class="Fa">blk</var> argument references the kernel's compiled-in
- default function block.</dd>
- <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
- <dd>The function block is still in use by one or more sockets, or is defined
- as the current default function block.</dd>
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The <var class="Fa">blk</var> argument references a function block that is
- not currently registered.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">connect(2)</a>, <a class="Xr">listen(2)</a>,
- <a class="Xr">tcp(4)</a>, <a class="Xr">malloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This framework first appeared in <span class="Ux">FreeBSD
- 11.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">tcp_functions</code> framework was written by
- <span class="An">Randall Stewart</span>
- &lt;<a class="Mt" href="mailto:rrs@FreeBSD.org">rrs@FreeBSD.org</a>&gt;.</p>
-<p class="Pp">This manual page was written by <span class="An">Jonathan
- Looney</span>
- &lt;<a class="Mt" href="mailto:jtl@FreeBSD.org">jtl@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 13, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/thread_exit.9 4.html b/static/freebsd/man9/thread_exit.9 4.html
deleted file mode 100644
index 399dfae7..00000000
--- a/static/freebsd/man9/thread_exit.9 4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">THREAD_EXIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">THREAD_EXIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">thread_exit</code> &#x2014;
- <span class="Nd">abandon current thread context</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">thread_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#thread_exit"><code class="Fn" id="thread_exit">thread_exit</code></a>()
- function implements the machine independent prelude to a thread shutdown. It
- will not return, and will result in a call to <a class="Xr">mi_switch(9)</a>
- to schedule some other thread.</p>
-<p class="Pp" id="thread_exit~2"><a class="permalink" href="#thread_exit~2"><code class="Fn">thread_exit</code></a>()
- arranges to free all the resources of the thread, specifically the kernel
- stack.</p>
-<p class="Pp" id="thread_exit~3">To protect the <a class="Xr">runqueue(9)</a>,
- <a class="permalink" href="#thread_exit~3"><code class="Fn">thread_exit</code></a>()
- must be called with the <var class="Va">sched_lock</var> mutex held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mi_switch(9)</a>, <a class="Xr">mutex(9)</a>,
- <a class="Xr">runqueue(9)</a>, <a class="Xr">sleep(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 5, 2002</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/time.9 4.html b/static/freebsd/man9/time.9 4.html
deleted file mode 100644
index 6a526213..00000000
--- a/static/freebsd/man9/time.9 4.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">TIME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">TIME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">boottime</code>,
- <code class="Nm">time_second</code>, <code class="Nm">time_uptime</code>
- &#x2014; <span class="Nd">system time variables</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/time.h</a>&gt;</code></p>
-<p class="Pp">
- <br/>
- <var class="Vt">extern struct timeval boottime</var>;
- <br/>
- <var class="Vt">extern time_t time_second</var>;
- <br/>
- <var class="Vt">extern time_t time_uptime</var>;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <var class="Va">boottime</var> variable holds the estimated
- system boot time. This time is initially set when the system boots, either
- from the RTC, or from a time estimated from the system's root filesystem.
- When the current system time is set, stepped by <a class="Xr">ntpd(8)</a>,
- or a new time is read from the RTC as the system resumes,
- <var class="Va">boottime</var> is recomputed as new_time - uptime. The
- <a class="Xr">sysctl(8)</a> <var class="Va">kern.boottime</var> returns this
- value.</p>
-<p class="Pp">The <var class="Va">time_second</var> variable is the system's
- &#x201C;wall time&#x201D; clock to the second.</p>
-<p class="Pp">The <var class="Va">time_uptime</var> variable is the number of
- seconds since boot.</p>
-<p class="Pp">The <a class="Xr">bintime(9)</a>, <a class="Xr">getbintime(9)</a>,
- <a class="Xr">microtime(9)</a>, <a class="Xr">getmicrotime(9)</a>,
- <a class="Xr">nanotime(9)</a>, and <a class="Xr">getnanotime(9)</a>
- functions can be used to get the current time more accurately and in an
- atomic manner. Similarly, the <a class="Xr">binuptime(9)</a>,
- <a class="Xr">getbinuptime(9)</a>, <a class="Xr">microuptime(9)</a>,
- <a class="Xr">getmicrouptime(9)</a>, <a class="Xr">nanouptime(9)</a>, and
- <a class="Xr">getnanouptime(9)</a> functions can be used to get the time
- elapse since boot more accurately and in an atomic manner. The
- <var class="Va">boottime</var> variable may be read and written without
- special precautions. It is adjusted when the phase of the system time
- changes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">clock_settime(2)</a>,
- <a class="Xr">ntp_adjtime(2)</a>, <a class="Xr">settimeofday(2)</a>,
- <a class="Xr">bintime(9)</a>, <a class="Xr">binuptime(9)</a>,
- <a class="Xr">getbintime(9)</a>, <a class="Xr">getbinuptime(9)</a>,
- <a class="Xr">getmicrotime(9)</a>, <a class="Xr">getmicrouptime(9)</a>,
- <a class="Xr">getnanotime(9)</a>, <a class="Xr">getnanouptime(9)</a>,
- <a class="Xr">microtime(9)</a>, <a class="Xr">microuptime(9)</a>,
- <a class="Xr">nanotime(9)</a>, <a class="Xr">nanouptime(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Poul-Henning Kamp</span>,
- <span class="RsT">Timecounters: Efficient and precise timekeeping in SMP
- kernels</span>, <i class="RsJ">Proceedings of EuroBSDCon 2002,
- Amsterdam</i>,
- <span class="RsO">/usr/share/doc/papers/timecounter.ascii.gz</span>.</cite></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Marshall Kirk McKusick</span>
- and <span class="RsA">George V. Neville-Neil</span>, <i class="RsB">The
- Design and Implementation of the FreeBSD Operating System</i>,
- <i class="RsI">Addison-Wesley</i>, <span class="RsP">57-61,65-66</span>,
- <span class="RsD">July 2004</span>.</cite></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 4, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/tvtohz.9 4.html b/static/freebsd/man9/tvtohz.9 4.html
deleted file mode 100644
index 170f67d9..00000000
--- a/static/freebsd/man9/tvtohz.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">TVTOHZ(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">TVTOHZ(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">tvtohz</code> &#x2014; <span class="Nd">convert
- time interval to tick count</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/time.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">tvtohz</code>(<var class="Fa" style="white-space: nowrap;">struct
- timeval *tv</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#tvtohz"><code class="Fn" id="tvtohz">tvtohz</code></a>()
- function accepts a single argument <var class="Fa">tv</var> which specifies
- the time interval over which to calculate the number of system ticks that
- would elapse.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Returns the integral number of system ticks expected to elapse in
- the given interval, including the current tick.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">microtime(9)</a>,
- <a class="Xr">microuptime(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">tvtohz</code> function first appeared in
- <span class="Ux">FreeBSD 3.0</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Kelly
- Yancey</span>
- &lt;<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 3, 2000</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/ucred.9 4.html b/static/freebsd/man9/ucred.9 4.html
deleted file mode 100644
index 81a93db8..00000000
--- a/static/freebsd/man9/ucred.9 4.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">UCRED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">UCRED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">ucred</code>, <code class="Nm">crget</code>,
- <code class="Nm">crhold</code>, <code class="Nm">crfree</code>,
- <code class="Nm">crcopy</code>, <code class="Nm">crdup</code>,
- <code class="Nm">cru2x</code> &#x2014; <span class="Nd">functions related to
- user credentials</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/ucred.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct ucred *</var>
- <br/>
- <code class="Fn">crget</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">struct ucred *</var>
- <br/>
- <code class="Fn">crhold</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crfree</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crcopy</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *dest</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *src</var>);</p>
-<p class="Pp"><var class="Ft">struct ucred *</var>
- <br/>
- <code class="Fn">crcopysafe</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cr</var>);</p>
-<p class="Pp"><var class="Ft">struct ucred *</var>
- <br/>
- <code class="Fn">crdup</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crsetgroups</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int
- ngrp</var>, <var class="Fa" style="white-space: nowrap;">gid_t
- *groups</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">crsetgroups_and_egid</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int
- ngrp</var>, <var class="Fa" style="white-space: nowrap;">gid_t
- *groups</var>, <var class="Fa" style="white-space: nowrap;">gid_t
- default_egid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">cru2x</code>(<var class="Fa" style="white-space: nowrap;">struct
- ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">struct xucred
- *xcr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">ucred</code> family of functions is used to
- manage user credential structures (<var class="Vt">struct ucred</var>)
- within the kernel.</p>
-<p class="Pp" id="crget">The
- <a class="permalink" href="#crget"><code class="Fn">crget</code></a>()
- function allocates memory for a new structure, sets its reference count to
- 1, and initializes its lock.</p>
-<p class="Pp" id="crhold">The
- <a class="permalink" href="#crhold"><code class="Fn">crhold</code></a>()
- function increases the reference count on the credential.</p>
-<p class="Pp" id="crfree">The
- <a class="permalink" href="#crfree"><code class="Fn">crfree</code></a>()
- function decreases the reference count on the credential. If the count drops
- to 0, the storage for the structure is freed.</p>
-<p class="Pp" id="crcopy">The
- <a class="permalink" href="#crcopy"><code class="Fn">crcopy</code></a>()
- function copies the contents of the source (template) credential into the
- destination template. The <var class="Vt">uidinfo</var> structure within the
- destination is referenced by calling <a class="Xr">uihold(9)</a>.</p>
-<p class="Pp" id="crcopysafe">The
- <a class="permalink" href="#crcopysafe"><code class="Fn">crcopysafe</code></a>()
- function copies the current credential associated with the process
- <var class="Fa">p</var> into the newly allocated credential
- <var class="Fa">cr</var>. The process lock on <var class="Fa">p</var> must
- be held and will be dropped and reacquired as needed to allocate group
- storage space in <var class="Fa">cr</var>.</p>
-<p class="Pp" id="crdup">The
- <a class="permalink" href="#crdup"><code class="Fn">crdup</code></a>()
- function allocates memory for a new structure and copies the contents of
- <var class="Fa">cr</var> into it. The actual copying is performed by
- <code class="Fn">crcopy</code>().</p>
-<p class="Pp" id="crsetgroups">The
- <a class="permalink" href="#crsetgroups"><code class="Fn">crsetgroups</code></a>()
- function sets the <var class="Va">cr_groups</var> and
- <var class="Va">cr_ngroups</var> variables representing the supplementary
- groups, allocating space as needed. It also truncates the group list to the
- current maximum number of groups. The
- <a class="permalink" href="#crsetgroups_and_egid"><code class="Fn" id="crsetgroups_and_egid">crsetgroups_and_egid</code></a>()
- function is similar, but interprets separately the first group of
- <var class="Va">groups</var> as the effective GID to set, only setting the
- subsequent groups as supplementary ones. It will use
- <var class="Va">default_egid</var> as the new effective GID if
- <var class="Va">groups</var> is empty. No other mechanism should be used to
- modify the <var class="Va">cr_groups</var> array.</p>
-<p class="Pp" id="cru2x">The
- <a class="permalink" href="#cru2x"><code class="Fn">cru2x</code></a>()
- function converts a <var class="Vt">ucred</var> structure to an
- <var class="Vt">xucred</var> structure. That is, it copies data from
- <var class="Fa">cr</var> to <var class="Fa">xcr</var>; it ignores fields in
- the former that are not present in the latter (e.g.,
- <var class="Va">cr_uidinfo</var>), and appropriately sets fields in the
- latter that are not present in the former (e.g.,
- <var class="Va">cr_version</var>).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">crget</code>(), <code class="Fn">crhold</code>(),
- <code class="Fn">crdup</code>(), and <code class="Fn">crcopysafe</code>()
- all return a pointer to a <var class="Vt">ucred</var> structure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USAGE_NOTES"><a class="permalink" href="#USAGE_NOTES">USAGE
- NOTES</a></h1>
-<p class="Pp">As of <span class="Ux">FreeBSD 5.0</span>, the
- <var class="Vt">ucred</var> structure contains extensible fields. This means
- that the correct protocol must always be followed to create a fresh and
- writable credential structure: new credentials must always be derived from
- existing credentials using <code class="Fn">crget</code>(),
- <code class="Fn">crcopy</code>(), and
- <code class="Fn">crcopysafe</code>().</p>
-<p class="Pp">In the common case, credentials required for access control
- decisions are used in a read-only manner. In these circumstances, the thread
- credential <var class="Va">td_ucred</var> should be used, as it requires no
- locking to access safely, and remains stable for the duration of the call
- even in the face of a multi-threaded application changing the process
- credentials from another thread.</p>
-<p class="Pp">During a process credential update, the process lock must be held
- across check and update, to prevent race conditions. The process credential,
- <var class="Va">td-&gt;td_proc-&gt;p_ucred</var>, must be used both for
- check and update. If a process credential is updated during a system call
- and checks against the thread credential are to be made later during the
- same system call, the thread credential must also be refreshed from the
- process credential so as to prevent use of a stale value. To avoid this
- scenario, it is recommended that system calls updating the process
- credential be designed to avoid other authorization functions.</p>
-<p class="Pp" id="crget~2">If temporarily elevated privileges are required for a
- thread, the thread credential can be replaced for the duration of an
- activity, or for the remainder of the system call. However, as a thread
- credential is often shared, appropriate care should be taken to make sure
- modifications are made to a writable credential through the use of
- <a class="permalink" href="#crget~2"><code class="Fn">crget</code></a>() and
- <code class="Fn">crcopy</code>().</p>
-<p class="Pp" id="never">Caution should be exercised when checking authorization
- for a thread or process perform an operation on another thread or process.
- As a result of temporary elevation, the target thread credential should
- <a class="permalink" href="#never"><i class="Em">never</i></a> be used as
- the target credential in an access control decision: the process credential
- associated with the thread,
- <var class="Va">td-&gt;td_proc-&gt;p_ucred</var>, should be used instead.
- For example, <a class="Xr">p_candebug(9)</a> accepts a target process, not a
- target thread, for access control purposes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">uihold(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 29, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/uidinfo.9 4.html b/static/freebsd/man9/uidinfo.9 4.html
deleted file mode 100644
index 42f090f9..00000000
--- a/static/freebsd/man9/uidinfo.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">UIDINFO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">UIDINFO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">uidinfo</code>,
- <code class="Nm">uihashinit</code>, <code class="Nm">uifind</code>,
- <code class="Nm">uihold</code>, <code class="Nm">uifree</code> &#x2014;
- <span class="Nd">functions for managing UID information</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">sys/resourcevar.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uihashinit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">struct uidinfo *</var>
- <br/>
- <code class="Fn">uifind</code>(<var class="Fa" style="white-space: nowrap;">uid_t
- uid</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uihold</code>(<var class="Fa" style="white-space: nowrap;">struct
- uidinfo *uip</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uifree</code>(<var class="Fa" style="white-space: nowrap;">struct
- uidinfo *uip</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">uidinfo</code> family of functions is used to
- manage <var class="Vt">uidinfo</var> structures. Each
- <var class="Vt">uidinfo</var> structure maintains per uid resource
- consumption counts, including the process count and socket buffer space
- usage.</p>
-<p class="Pp" id="uihashinit">The
- <a class="permalink" href="#uihashinit"><code class="Fn">uihashinit</code></a>()
- function initializes the <var class="Vt">uidinfo</var> hash table and its
- mutex. This function should only be called during system initialization.</p>
-<p class="Pp" id="uifind">The
- <a class="permalink" href="#uifind"><code class="Fn">uifind</code></a>()
- function looks up and returns the <var class="Vt">uidinfo</var> structure
- for <var class="Fa">uid</var>. If no <var class="Vt">uidinfo</var> structure
- exists for <var class="Fa">uid</var>, a new structure will be allocated and
- initialized. The <code class="Nm">uidinfo</code> hash mutex is acquired and
- released.</p>
-<p class="Pp" id="uihold">The
- <a class="permalink" href="#uihold"><code class="Fn">uihold</code></a>()
- function increases the reference count on <var class="Fa">uip</var>.
- <var class="Fa">uip</var>'s lock is acquired and released.</p>
-<p class="Pp" id="uifree">The
- <a class="permalink" href="#uifree"><code class="Fn">uifree</code></a>()
- function decreases the reference count on <var class="Fa">uip</var>, and if
- the count reaches 0 <var class="Fa">uip</var> is freed.
- <var class="Fa">uip</var>'s lock is acquired and release and the uidinfo
- hash mutex may be acquired and released.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">uifind</code>() returns a pointer to an
- initialized <var class="Vt">uidinfo</var> structure, and should not
- fail.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 10, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/uio.9 3.html b/static/freebsd/man9/uio.9 3.html
deleted file mode 100644
index 8baecde9..00000000
--- a/static/freebsd/man9/uio.9 3.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">UIO(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">UIO(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">uio</code>, <code class="Nm">uiomove</code>,
- <code class="Nm">uiomove_frombuf</code>,
- <code class="Nm">uiomove_nofault</code> &#x2014; <span class="Nd">device
- driver I/O routines</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/types.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/uio.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>struct uio {
- struct iovec *uio_iov; /* scatter/gather list */
- int uio_iovcnt; /* length of scatter/gather list */
- off_t uio_offset; /* offset in target object */
- ssize_t uio_resid; /* remaining bytes to copy */
- enum uio_seg uio_segflg; /* address space */
- enum uio_rw uio_rw; /* operation */
- struct thread *uio_td; /* owner */
-};</pre>
-</div>
-<br/>
-<var class="Ft">int</var>
-<br/>
-<code class="Fn">uiomove</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>,
- <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>);
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uiomove_frombuf</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>,
- <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uiomove_nofault</code>(<var class="Fa" style="white-space: nowrap;">void
- *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>,
- <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The functions
- <a class="permalink" href="#uiomove"><code class="Fn" id="uiomove">uiomove</code></a>(),
- <code class="Fn">uiomove_frombuf</code>(), and
- <code class="Fn">uiomove_nofault</code>() are used to transfer data between
- buffers and I/O vectors that might possibly cross the user/kernel space
- boundary.</p>
-<p class="Pp" id="uiomove~2">As a result of any <a class="Xr">read(2)</a>,
- <a class="Xr">write(2)</a>, <a class="Xr">readv(2)</a>, or
- <a class="Xr">writev(2)</a> system call that is being passed to a
- character-device driver, the appropriate driver <var class="Va">d_read</var>
- or <var class="Va">d_write</var> entry will be called with a pointer to a
- <var class="Vt">struct uio</var> being passed. The transfer request is
- encoded in this structure. The driver itself should use
- <a class="permalink" href="#uiomove~2"><code class="Fn">uiomove</code></a>()
- or <code class="Fn">uiomove_nofault</code>() to get at the data in this
- structure.</p>
-<p class="Pp">The fields in the <var class="Vt">uio</var> structure are:</p>
-<dl class="Bl-tag">
- <dt id="uio_iov"><var class="Va">uio_iov</var></dt>
- <dd>The array of I/O vectors to be processed. In the case of scatter/gather
- I/O, this will be more than one vector.</dd>
- <dt id="uio_iovcnt"><var class="Va">uio_iovcnt</var></dt>
- <dd>The number of I/O vectors present.</dd>
- <dt id="uio_offset"><var class="Va">uio_offset</var></dt>
- <dd>The offset into the device.</dd>
- <dt id="uio_resid"><var class="Va">uio_resid</var></dt>
- <dd>The remaining number of bytes to process, updated after transfer.</dd>
- <dt id="uio_segflg"><var class="Va">uio_segflg</var></dt>
- <dd>One of the following flags:
- <dl class="Bl-tag">
- <dt id="UIO_USERSPACE"><a class="permalink" href="#UIO_USERSPACE"><code class="Dv">UIO_USERSPACE</code></a></dt>
- <dd>The I/O vector points into a process's address space.</dd>
- <dt id="UIO_SYSSPACE"><a class="permalink" href="#UIO_SYSSPACE"><code class="Dv">UIO_SYSSPACE</code></a></dt>
- <dd>The I/O vector points into the kernel address space.</dd>
- <dt id="UIO_NOCOPY"><a class="permalink" href="#UIO_NOCOPY"><code class="Dv">UIO_NOCOPY</code></a></dt>
- <dd>Do not copy, already in object.</dd>
- </dl>
- </dd>
- <dt id="uio_rw"><var class="Va">uio_rw</var></dt>
- <dd>The direction of the desired transfer. The supported flags are:
- <dl class="Bl-tag">
- <dt id="UIO_READ"><a class="permalink" href="#UIO_READ"><code class="Dv">UIO_READ</code></a></dt>
- <dd>Transfer data from the buffers into the I/O vectors.</dd>
- <dt id="UIO_WRITE"><a class="permalink" href="#UIO_WRITE"><code class="Dv">UIO_WRITE</code></a></dt>
- <dd>Transfer data from the I/O vectors into the buffers.</dd>
- </dl>
- </dd>
- <dt id="uio_td"><var class="Va">uio_td</var></dt>
- <dd>The pointer to a <var class="Vt">struct thread</var> for the associated
- thread; used if <var class="Va">uio_segflg</var> indicates that the
- transfer is to be made from/to a process's address space.</dd>
-</dl>
-<p class="Pp" id="uiomove_nofault">The function
- <a class="permalink" href="#uiomove_nofault"><code class="Fn">uiomove_nofault</code></a>()
- requires that the buffer and I/O vectors be accessible without incurring a
- page fault. The source and destination addresses must be physically mapped
- for read and write access, respectively, and neither the source nor
- destination addresses may be pageable. Thus, the function
- <code class="Fn">uiomove_nofault</code>() can be called from contexts where
- acquiring virtual memory system locks or sleeping are prohibited.</p>
-<p class="Pp" id="uiomove_frombuf">The
- <a class="permalink" href="#uiomove_frombuf"><code class="Fn">uiomove_frombuf</code></a>()
- function is a convenience wrapper around <code class="Fn">uiomove</code>()
- for drivers that serve data which is wholly contained within an existing
- buffer in memory. It validates the <var class="Va">uio_offset</var> and
- <var class="Va">uio_resid</var> values against the size of the existing
- buffer, handling short transfers when the request partially overlaps the
- buffer. When <var class="Va">uio_offset</var> is greater than or equal to
- the buffer size, the result is success with no bytes transferred,
- effectively signaling EOF.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">On success <code class="Fn">uiomove</code>(),
- <code class="Fn">uiomove_frombuf</code>(), and
- <code class="Fn">uiomove_nofault</code>() will return 0; on error they will
- return an appropriate error code.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The idea is that the driver maintains a private buffer for its
- data, and processes the request in chunks of maximal the size of this
- buffer. Note that the buffer handling below is very simplified and will not
- work (the buffer pointer is not being advanced in case of a partial read),
- it is just here to demonstrate the <code class="Nm">uio</code> handling.</p>
-<div class="Bd Pp Li">
-<pre>/* MIN() can be found there: */
-#include &lt;sys/param.h&gt;
-
-#define BUFSIZE 512
-static char buffer[BUFSIZE];
-
-static int data_available; /* amount of data that can be read */
-
-static int
-fooread(struct cdev *dev, struct uio *uio, int flag)
-{
- int rv, amnt;
-
- rv = 0;
- while (uio-&gt;uio_resid &gt; 0) {
- if (data_available &gt; 0) {
- amnt = MIN(uio-&gt;uio_resid, data_available);
- rv = uiomove(buffer, amnt, uio);
- if (rv != 0)
- break;
- data_available -= amnt;
- } else
- tsleep(...); /* wait for a better time */
- }
- if (rv != 0) {
- /* do error cleanup here */
- }
- return (rv);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp"><code class="Fn">uiomove</code>() and
- <code class="Fn">uiomove_nofault</code>() will fail and return the following
- error code if:</p>
-<dl class="Bl-tag">
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd>The invoked <a class="Xr">copyin(9)</a> or <a class="Xr">copyout(9)</a>
- returned
- <a class="permalink" href="#EFAULT~2"><code class="Er" id="EFAULT~2">EFAULT</code></a></dd>
-</dl>
-<p class="Pp">In addition, <code class="Fn">uiomove_nofault</code>() will fail
- and return the following error code if:</p>
-<dl class="Bl-tag">
- <dt id="EFAULT~3">[<a class="permalink" href="#EFAULT~3"><code class="Er">EFAULT</code></a>]</dt>
- <dd>A page fault occurs.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">read(2)</a>, <a class="Xr">readv(2)</a>,
- <a class="Xr">write(2)</a>, <a class="Xr">writev(2)</a>,
- <a class="Xr">copyin(9)</a>, <a class="Xr">copyout(9)</a>,
- <a class="Xr">sleep(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">uio</code> mechanism appeared in some early
- version of <span class="Ux">UNIX</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">J&#x00F6;rg
- Wunsch</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 22, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/unr.9 4.html b/static/freebsd/man9/unr.9 4.html
deleted file mode 100644
index 2bb3bf0c..00000000
--- a/static/freebsd/man9/unr.9 4.html
+++ /dev/null
@@ -1,186 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">UNR(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">UNR(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">new_unrhdr</code>,
- <code class="Nm">clean_unrhdr</code>, <code class="Nm">clear_unrhdr</code>,
- <code class="Nm">delete_unrhdr</code>, <code class="Nm">alloc_unr</code>,
- <code class="Nm">alloc_unr_specific</code>,
- <code class="Nm">free_unr</code>, <code class="Nm">create_iter_unr</code>,
- <code class="Nm">next_iter_unr</code>, <code class="Nm">free_iter_unr</code>
- &#x2014; <span class="Nd">kernel unit number allocator</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/systm.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct unrhdr *</var>
- <br/>
- <code class="Fn">new_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">int
- low</var>, <var class="Fa" style="white-space: nowrap;">int high</var>,
- <var class="Fa" style="white-space: nowrap;">struct mtx *mutex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">clean_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">clean_unrhdrl</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">clear_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">delete_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alloc_unr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alloc_unrl</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">alloc_unr_specific</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>, <var class="Fa" style="white-space: nowrap;">u_int
- item</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">free_unr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>, <var class="Fa" style="white-space: nowrap;">u_int
- item</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">create_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">struct
- unrhdr *uh</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">next_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">void
- *handle</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">free_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">void
- *handle</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The kernel unit number allocator is a generic facility, which
- allows to allocate unit numbers within a specified range.</p>
-<dl class="Bl-tag">
- <dt id="new_unrhdr"><a class="permalink" href="#new_unrhdr"><code class="Fn">new_unrhdr</code></a>(<var class="Fa">low</var>,
- <var class="Fa">high</var>, <var class="Fa">mutex</var>)</dt>
- <dd>Initialize a new unit number allocator entity. The
- <var class="Fa">low</var> and <var class="Fa">high</var> arguments specify
- minimum and maximum number of unit numbers. There is no cost associated
- with the range of unit numbers, so unless the resource really is finite,
- <code class="Dv">INT_MAX</code> can be used. If
- <var class="Fa">mutex</var> is not <code class="Dv">NULL</code>, it is
- used for locking when allocating and freeing units. If the passed value is
- the token <var class="Va">UNR_NO_MTX</var>, then no locking is applied
- internally. Otherwise, internal mutex is used.</dd>
- <dt id="clear_unrhdr"><a class="permalink" href="#clear_unrhdr"><code class="Fn">clear_unrhdr</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Clear all units from the specified unit number allocator entity. This
- function resets the entity as if it were just initialized with
- <code class="Fn">new_unrhdr</code>().</dd>
- <dt id="delete_unrhdr"><a class="permalink" href="#delete_unrhdr"><code class="Fn">delete_unrhdr</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Delete specified unit number allocator entity. This function frees the
- memory associated with the entity, it does not free any units. To free all
- units use <code class="Fn">clear_unrhdr</code>().</dd>
- <dt id="clean_unrhdr"><a class="permalink" href="#clean_unrhdr"><code class="Fn">clean_unrhdr</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Freeing unit numbers might result in some internal memory becoming unused.
- There are <code class="Nm">unit</code> allocator consumers that cannot
- tolerate taking <a class="Xr">malloc(9)</a> locks to free the memory,
- while having their unit mutex locked. For this reason, free of the unused
- memory after delete is postponed until the consumer can afford calling
- into the <a class="Xr">malloc(9)</a> subsystem. Call
- <code class="Fn">clean_unrhdr</code>(<var class="Fa">uh</var>) to do the
- cleanup. In particular, this needs to be done before freeing a unr, if a
- deletion of units could have been performed.</dd>
- <dt id="clean_unrhdrl"><a class="permalink" href="#clean_unrhdrl"><code class="Fn">clean_unrhdrl</code></a>()</dt>
- <dd>Same as <code class="Fn">clean_unrhdr</code>(), but assumes that the unr
- mutex is already owned, if any.</dd>
- <dt id="alloc_unr"><a class="permalink" href="#alloc_unr"><code class="Fn">alloc_unr</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Return a new unit number. The lowest free number is always allocated. This
- function does not allocate memory and never sleeps, however it may block
- on a mutex. If no free unit numbers are left, <code class="Li">-1</code>
- is returned.</dd>
- <dt id="alloc_unrl"><a class="permalink" href="#alloc_unrl"><code class="Fn">alloc_unrl</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Same as <code class="Fn">alloc_unr</code>() except that mutex is assumed
- to be already locked and thus is not used.</dd>
- <dt id="alloc_unr_specific"><a class="permalink" href="#alloc_unr_specific"><code class="Fn">alloc_unr_specific</code></a>(<var class="Fa">uh</var>,
- <var class="Fa">item</var>)</dt>
- <dd>Allocate a specific unit number. This function allocates memory and thus
- may sleep. The allocated unit number is returned on success. If the
- specified number is already allocated or out of the range,
- <code class="Li">-1</code> is returned.</dd>
- <dt id="free_unr"><a class="permalink" href="#free_unr"><code class="Fn">free_unr</code></a>(<var class="Fa">uh</var>,
- <var class="Fa">item</var>)</dt>
- <dd>Free a previously allocated unit number. This function may require
- allocating memory, and thus it can sleep. There is no pre-locked
- variant.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ITERATOR_INTERFACE"><a class="permalink" href="#ITERATOR_INTERFACE">ITERATOR
- INTERFACE</a></h1>
-<p class="Pp">The <code class="Nm">unr</code> facility provides an interface to
- iterate over all allocated units for the given
- <code class="Dv">unrhdr</code>. Iterators are identified by an opaque
- handle. More than one iterators can operate simultaneously; the iterator
- position data is recorded only in the iterator handle.</p>
-<p class="Pp" id="next_iter_unr">Consumers must ensure that the unit allocator
- is not modified between calls to the iterator functions. In particular, the
- internal allocator mutex cannot provide consistency, because it is acquired
- and dropped inside the
- <a class="permalink" href="#next_iter_unr"><code class="Fn">next_iter_unr</code></a>()
- function. If the allocator was modified, it is safe to free the iterator
- with
- <a class="permalink" href="#free_iter_unr"><code class="Fn" id="free_iter_unr">free_iter_unr</code></a>()
- method nevertheless.</p>
-<dl class="Bl-tag">
- <dt id="create_iter_unr"><a class="permalink" href="#create_iter_unr"><code class="Fn">create_iter_unr</code></a>(<var class="Fa">uh</var>)</dt>
- <dd>Create an iterator. Return the handle that should be passed to other
- iterator functions.</dd>
- <dt><code class="Fn">next_iter_unr</code>(<var class="Fa">handle</var>)</dt>
- <dd>Return the value of the next unit. Units are returned in ascending order.
- A return value of <code class="Li">-1</code> indicates the end of
- iteration, in which case <code class="Li">-1</code> is returned for all
- future calls.</dd>
- <dt><code class="Fn">free_iter_unr</code>(<var class="Fa">handle</var>)</dt>
- <dd>Free the iterator, handle is no longer valid.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
- REFERENCES</a></h1>
-<p class="Pp">The above functions are implemented in
- <span class="Pa">sys/kern/subr_unit.c</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Kernel unit number allocator first appeared in
- <span class="Ux">FreeBSD 6.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">Kernel unit number allocator was written by
- <span class="An">Poul-Henning Kamp</span>. This manpage was written by
- <span class="An">Gleb Smirnoff</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 21, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/usbdi.9 3.html b/static/freebsd/man9/usbdi.9 3.html
deleted file mode 100644
index c173ca47..00000000
--- a/static/freebsd/man9/usbdi.9 3.html
+++ /dev/null
@@ -1,477 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">USBDI(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">USBDI(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">usb_fifo_alloc_buffer</code>,
- <code class="Nm">usb_fifo_attach</code>,
- <code class="Nm">usb_fifo_detach</code>,
- <code class="Nm">usb_fifo_free_buffer</code>,
- <code class="Nm">usb_fifo_get_data</code>,
- <code class="Nm">usb_fifo_get_data_buffer</code>,
- <code class="Nm">usb_fifo_get_data_error</code>,
- <code class="Nm">usb_fifo_get_data_linear</code>,
- <code class="Nm">usb_fifo_put_bytes_max</code>,
- <code class="Nm">usb_fifo_put_data</code>,
- <code class="Nm">usb_fifo_put_data_buffer</code>,
- <code class="Nm">usb_fifo_put_data_error</code>,
- <code class="Nm">usb_fifo_put_data_linear</code>,
- <code class="Nm">usb_fifo_reset</code>,
- <code class="Nm">usb_fifo_softc</code>,
- <code class="Nm">usb_fifo_wakeup</code>,
- <code class="Nm">usbd_do_request</code>,
- <code class="Nm">usbd_do_request_flags</code>,
- <code class="Nm">usbd_errstr</code>,
- <code class="Nm">usbd_lookup_id_by_info</code>,
- <code class="Nm">usbd_lookup_id_by_uaa</code>,
- <code class="Nm">usbd_transfer_clear_stall</code>,
- <code class="Nm">usbd_transfer_drain</code>,
- <code class="Nm">usbd_transfer_pending</code>,
- <code class="Nm">usbd_transfer_poll</code>,
- <code class="Nm">usbd_transfer_setup</code>,
- <code class="Nm">usbd_transfer_start</code>,
- <code class="Nm">usbd_transfer_stop</code>,
- <code class="Nm">usbd_transfer_submit</code>,
- <code class="Nm">usbd_transfer_unsetup</code>,
- <code class="Nm">usbd_xfer_clr_flag</code>,
- <code class="Nm">usbd_xfer_frame_data</code>,
- <code class="Nm">usbd_xfer_frame_len</code>,
- <code class="Nm">usbd_xfer_get_frame</code>,
- <code class="Nm">usbd_xfer_get_priv</code>,
- <code class="Nm">usbd_xfer_is_stalled</code>,
- <code class="Nm">usbd_xfer_max_framelen</code>,
- <code class="Nm">usbd_xfer_max_frames</code>,
- <code class="Nm">usbd_xfer_max_len</code>,
- <code class="Nm">usbd_xfer_set_flag</code>,
- <code class="Nm">usbd_xfer_set_frame_data</code>,
- <code class="Nm">usbd_xfer_set_frame_len</code>,
- <code class="Nm">usbd_xfer_set_frame_offset</code>,
- <code class="Nm">usbd_xfer_set_frames</code>,
- <code class="Nm">usbd_xfer_set_interval</code>,
- <code class="Nm">usbd_xfer_set_priv</code>,
- <code class="Nm">usbd_xfer_set_stall</code>,
- <code class="Nm">usbd_xfer_set_timeout</code>,
- <code class="Nm">usbd_xfer_softc</code>,
- <code class="Nm">usbd_xfer_state</code>,
- <code class="Nm">usbd_xfer_status</code> &#x2014; <span class="Nd">Universal
- Serial Bus driver programming interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">dev/usb/usb.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">dev/usb/usbdi.h</a>&gt;</code>
- <br/>
- <code class="In">#include
- &lt;<a class="In">dev/usb/usbdi_util.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">usb_error_t</var>
- <br/>
- <code class="Fn">usbd_transfer_setup</code>(<var class="Fa">struct usb_device
- *udev</var>, <var class="Fa">const uint8_t *ifaces</var>,
- <var class="Fa">struct usb_xfer **pxfer</var>, <var class="Fa">const struct
- usb_config *setup_start</var>, <var class="Fa">uint16_t n_setup</var>,
- <var class="Fa">void *priv_sc</var>, <var class="Fa">struct mtx
- *priv_mtx</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">usbd_transfer_unsetup</code>(<var class="Fa">struct usb_xfer
- **pxfer</var>, <var class="Fa">uint16_t n_setup</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">usbd_transfer_start</code>(<var class="Fa">struct usb_xfer
- *xfer</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">usbd_transfer_stop</code>(<var class="Fa">struct usb_xfer
- *xfer</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">usbd_transfer_drain</code>(<var class="Fa">struct usb_xfer
- *xfer</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The Universal Serial Bus (USB) driver programming interface
- provides USB peripheral drivers with a host controller independent API for
- controlling and communicating with USB peripherals. The
- <code class="Nm">usb</code> module supports both USB Host and USB Device
- side mode.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USB_TRANSFER_MANAGEMENT_FUNCTIONS"><a class="permalink" href="#USB_TRANSFER_MANAGEMENT_FUNCTIONS">USB
- TRANSFER MANAGEMENT FUNCTIONS</a></h1>
-<p class="Pp">The USB standard defines four types of USB transfers. Control
- transfers, Bulk transfers, Interrupt transfers and Isochronous transfers.
- All the transfer types are managed using the following five functions:</p>
-<p class="Pp" id="usbd_transfer_setup"><a class="permalink" href="#usbd_transfer_setup"><code class="Fn">usbd_transfer_setup</code></a>()
- This function will allocate memory for and initialise an array of USB
- transfers and all required DMA memory. This function can sleep or block
- waiting for resources to become available. <var class="Fa">udev</var> is a
- pointer to &quot;struct usb_device&quot;. <var class="Fa">ifaces</var> is an
- array of interface index numbers to use. See &quot;if_index&quot;.
- <var class="Fa">pxfer</var> is a pointer to an array of USB transfer
- pointers that are initialized to NULL, and then pointed to allocated USB
- transfers. <var class="Fa">setup_start</var> is a pointer to an array of USB
- config structures. <var class="Fa">n_setup</var> is a number telling the USB
- system how many USB transfers should be setup. <var class="Fa">priv_sc</var>
- is the private softc pointer, which will be used to initialize
- &quot;xfer-&gt;priv_sc&quot;. <var class="Fa">priv_mtx</var> is the private
- mutex protecting the transfer structure and the softc. This pointer is used
- to initialize &quot;xfer-&gt;priv_mtx&quot;. This function returns zero upon
- success. A non-zero return value indicates failure.</p>
-<p class="Pp" id="usbd_transfer_unsetup"><a class="permalink" href="#usbd_transfer_unsetup"><code class="Fn">usbd_transfer_unsetup</code></a>()
- This function will release the given USB transfers and all allocated
- resources associated with these USB transfers. <var class="Fa">pxfer</var>
- is a pointer to an array of USB transfer pointers, that may be NULL, that
- should be freed by the USB system. <var class="Fa">n_setup</var> is a number
- telling the USB system how many USB transfers should be unsetup. This
- function can sleep waiting for USB transfers to complete. This function is
- NULL safe with regard to the USB transfer structure pointer. It is not
- allowed to call this function from the USB transfer callback.</p>
-<p class="Pp" id="usbd_transfer_start"><a class="permalink" href="#usbd_transfer_start"><code class="Fn">usbd_transfer_start</code></a>()
- This function will start the USB transfer pointed to by
- <var class="Fa">xfer</var>, if not already started. This function is always
- non-blocking and must be called with the so-called private USB mutex locked.
- This function is NULL safe with regard to the USB transfer structure
- pointer.</p>
-<p class="Pp" id="usbd_transfer_stop"><a class="permalink" href="#usbd_transfer_stop"><code class="Fn">usbd_transfer_stop</code></a>()
- This function will stop the USB transfer pointed to by
- <var class="Fa">xfer</var>, if not already stopped. This function is always
- non-blocking and must be called with the so-called private USB mutex locked.
- This function can return before the USB callback has been called. This
- function is NULL safe with regard to the USB transfer structure pointer. If
- the transfer was in progress, the callback will called with
- &quot;USB_ST_ERROR&quot; and &quot;error = USB_ERR_CANCELLED&quot;.</p>
-<p class="Pp" id="usbd_transfer_drain"><a class="permalink" href="#usbd_transfer_drain"><code class="Fn">usbd_transfer_drain</code></a>()
- This function will stop an USB transfer, if not already stopped and wait for
- any additional USB hardware operations to complete. Buffers that are loaded
- into DMA using &quot;usbd_xfer_set_frame_data()&quot; can safely be freed
- after that this function has returned. This function can block the caller
- and will not return before the USB callback has been called. This function
- is NULL safe with regard to the USB transfer structure pointer.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USB_TRANSFER_CALLBACK"><a class="permalink" href="#USB_TRANSFER_CALLBACK">USB
- TRANSFER CALLBACK</a></h1>
-<p class="Pp">The USB callback has three states. USB_ST_SETUP,
- USB_ST_TRANSFERRED and USB_ST_ERROR. USB_ST_SETUP is the initial state.
- After the callback has been called with this state it will always be called
- back at a later stage in one of the other two states. The USB callback
- should not restart the USB transfer in case the error cause is
- USB_ERR_CANCELLED. The USB callback is protected from recursion. That means
- one can start and stop whatever transfer from the callback of another
- transfer one desires. Also the transfer that is currently called back.
- Recursion is handled like this that when the callback that wants to recurse
- returns it is called one more time.</p>
-<p class="Pp" id="usbd_transfer_submit"><a class="permalink" href="#usbd_transfer_submit"><code class="Fn">usbd_transfer_submit</code></a>()
- This function should only be called from within the USB callback and is used
- to start the USB hardware. An USB transfer can have multiple frames
- consisting of one or more USB packets making up an I/O vector for all USB
- transfer types.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>void
-usb_default_callback(struct usb_xfer *xfer, usb_error_t error)
-{
- int actlen;
-
- usbd_xfer_status(xfer, &amp;actlen, NULL, NULL, NULL);
-
- switch (USB_GET_STATE(xfer)) {
- case USB_ST_SETUP:
- /*
- * Setup xfer frame lengths/count and data
- */
- usbd_transfer_submit(xfer);
- break;
-
- case USB_ST_TRANSFERRED:
- /*
- * Read usb frame data, if any.
- * &quot;actlen&quot; has the total length for all frames
- * transferred.
- */
- break;
-
- default: /* Error */
- /*
- * Print error message and clear stall
- * for example.
- */
- break;
- }
- /*
- * Here it is safe to do something without the private
- * USB mutex locked.
- */
- return;
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USB_CONTROL_TRANSFERS"><a class="permalink" href="#USB_CONTROL_TRANSFERS">USB
- CONTROL TRANSFERS</a></h1>
-<p class="Pp">An USB control transfer has three parts. First the SETUP packet,
- then DATA packet(s) and then a STATUS packet. The SETUP packet is always
- pointed to by frame 0 and the length is set by
- <a class="permalink" href="#usbd_xfer_frame_len"><code class="Fn" id="usbd_xfer_frame_len">usbd_xfer_frame_len</code></a>()
- also if there should not be sent any SETUP packet! If an USB control
- transfer has no DATA stage, then the number of frames should be set to 1.
- Else the default number of frames is 2.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>
-Example1: SETUP + STATUS
- usbd_xfer_set_frames(xfer, 1);
- usbd_xfer_set_frame_len(xfer, 0, 8);
- usbd_transfer_submit(xfer);
-
-Example2: SETUP + DATA + STATUS
- usbd_xfer_set_frames(xfer, 2);
- usbd_xfer_set_frame_len(xfer, 0, 8);
- usbd_xfer_set_frame_len(xfer, 1, 1);
- usbd_transfer_submit(xfer);
-
-Example3: SETUP + DATA + STATUS - split
-1st callback:
- usbd_xfer_set_frames(xfer, 1);
- usbd_xfer_set_frame_len(xfer, 0, 8);
- usbd_transfer_submit(xfer);
-
-2nd callback:
- /* IMPORTANT: frbuffers[0] must still point at the setup packet! */
- usbd_xfer_set_frames(xfer, 2);
- usbd_xfer_set_frame_len(xfer, 0, 0);
- usbd_xfer_set_frame_len(xfer, 1, 1);
- usbd_transfer_submit(xfer);
-
-Example4: SETUP + STATUS - split
-1st callback:
- usbd_xfer_set_frames(xfer, 1);
- usbd_xfer_set_frame_len(xfer, 0, 8);
- usbd_xfer_set_flag(xfer, USB_MANUAL_STATUS);
- usbd_transfer_submit(xfer);
-
-2nd callback:
- usbd_xfer_set_frames(xfer, 1);
- usbd_xfer_set_frame_len(xfer, 0, 0);
- usbd_xfer_clr_flag(xfer, USB_MANUAL_STATUS);
- usbd_transfer_submit(xfer);
-
-</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USB_TRANSFER_CONFIG"><a class="permalink" href="#USB_TRANSFER_CONFIG">USB
- TRANSFER CONFIG</a></h1>
-<p class="Pp">To simplify the search for endpoints the
- <code class="Nm">usb</code> module defines a USB config structure where it
- is possible to specify the characteristics of the wanted endpoint.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>
-struct usb_config {
- bufsize,
- callback
- direction,
- endpoint,
- frames,
- index flags,
- interval,
- timeout,
- type,
-};
-
-</pre>
-</div>
-<p class="Pp"><var class="Fa">type</var> field selects the USB pipe type. Valid
- values are: UE_INTERRUPT, UE_CONTROL, UE_BULK, UE_ISOCHRONOUS. The special
- value UE_BULK_INTR will select BULK and INTERRUPT pipes. This field is
- mandatory.</p>
-<p class="Pp"><var class="Fa">endpoint</var> field selects the USB endpoint
- number. A value of 0xFF, &quot;-1&quot; or &quot;UE_ADDR_ANY&quot; will
- select the first matching endpoint. This field is mandatory.</p>
-<p class="Pp"><var class="Fa">direction</var> field selects the USB endpoint
- direction. A value of &quot;UE_DIR_ANY&quot; will select the first matching
- endpoint. Else valid values are: &quot;UE_DIR_IN&quot; and
- &quot;UE_DIR_OUT&quot;. &quot;UE_DIR_IN&quot; and &quot;UE_DIR_OUT&quot; can
- be binary OR'ed by &quot;UE_DIR_SID&quot; which means that the direction
- will be swapped in case of USB_MODE_DEVICE. Note that &quot;UE_DIR_IN&quot;
- refers to the data transfer direction of the &quot;IN&quot; tokens and
- &quot;UE_DIR_OUT&quot; refers to the data transfer direction of the
- &quot;OUT&quot; tokens. This field is mandatory.</p>
-<p class="Pp"><var class="Fa">interval</var> field selects the interrupt
- interval. The value of this field is given in milliseconds and is
- independent of device speed. Depending on the endpoint type, this field has
- different meaning:</p>
-<dl class="Bl-tag">
- <dt>UE_INTERRUPT</dt>
- <dd>&quot;0&quot; use the default interrupt interval based on endpoint
- descriptor. &quot;Else&quot; use the given value for polling rate.</dd>
- <dt>UE_ISOCHRONOUS</dt>
- <dd>&quot;0&quot; use default. &quot;Else&quot; the value is ignored.</dd>
- <dt>UE_BULK</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>UE_CONTROL</dt>
- <dd>&quot;0&quot; no transfer pre-delay. &quot;Else&quot; a delay as given by
- this field in milliseconds is inserted before the hardware is started when
- &quot;usbd_transfer_submit()&quot; is called.
- <p class="Pp">NOTE: The transfer timeout, if any, is started after that the
- pre-delay has elapsed!</p>
- </dd>
-</dl>
-<p class="Pp"><var class="Fa">timeout</var> field, if non-zero, will set the
- transfer timeout in milliseconds. If the &quot;timeout&quot; field is zero
- and the transfer type is ISOCHRONOUS a timeout of 250ms will be used.</p>
-<p class="Pp"><var class="Fa">frames</var> field sets the maximum number of
- frames. If zero is specified it will yield the following results:</p>
-<dl class="Bl-tag">
- <dt>UE_BULK</dt>
- <dd>xfer-&gt;nframes = 1;</dd>
- <dt>UE_INTERRUPT</dt>
- <dd>xfer-&gt;nframes = 1;</dd>
- <dt>UE_CONTROL</dt>
- <dd>xfer-&gt;nframes = 2;</dd>
- <dt>UE_ISOCHRONOUS</dt>
- <dd>Not allowed. Will cause an error.</dd>
-</dl>
-<p class="Pp"><var class="Fa">ep_index</var> field allows you to give a number,
- in case more endpoints match the description, that selects which matching
- &quot;ep_index&quot; should be used.</p>
-<p class="Pp"><var class="Fa">if_index</var> field allows you to select which of
- the interface numbers in the &quot;ifaces&quot; array parameter passed to
- &quot;usbd_transfer_setup&quot; that should be used when setting up the
- given USB transfer.</p>
-<p class="Pp"><var class="Fa">flags</var> field has type &quot;struct
- usb_xfer_flags&quot; and allows one to set initial flags an USB transfer.
- Valid flags are:</p>
-<dl class="Bl-tag">
- <dt>force_short_xfer</dt>
- <dd>This flag forces the last transmitted USB packet to be short. A short
- packet has a length of less than &quot;xfer-&gt;max_packet_size&quot;,
- which derives from &quot;wMaxPacketSize&quot;. This flag can be changed
- during operation.</dd>
- <dt>short_xfer_ok</dt>
- <dd>This flag allows the received transfer length, &quot;xfer-&gt;actlen&quot;
- to be less than &quot;xfer-&gt;sumlen&quot; upon completion of a transfer.
- This flag can be changed during operation.</dd>
- <dt>short_frames_ok</dt>
- <dd>This flag allows the reception of multiple short USB frames. This flag
- only has effect for BULK and INTERRUPT endpoints and if the number of
- frames received is greater than 1. This flag can be changed during
- operation.</dd>
- <dt>pipe_bof</dt>
- <dd>This flag causes a failing USB transfer to remain first in the PIPE queue
- except in the case of &quot;xfer-&gt;error&quot; equal to
- &quot;USB_ERR_CANCELLED&quot;. No other USB transfers in the affected PIPE
- queue will be started until either:
- <dl class="Bl-tag">
- <dt>1</dt>
- <dd>The failing USB transfer is stopped using
- &quot;usbd_transfer_stop()&quot;.</dd>
- <dt>2</dt>
- <dd>The failing USB transfer performs a successful transfer.</dd>
- </dl>
- The purpose of this flag is to avoid races when multiple transfers are
- queued for execution on an USB endpoint, and the first executing transfer
- fails leading to the need for clearing of stall for example. In this case
- this flag is used to prevent the following USB transfers from being
- executed at the same time the clear-stall command is executed on the USB
- control endpoint. This flag can be changed during operation.
- <p class="Pp">&quot;BOF&quot; is short for &quot;Block On Failure&quot;.</p>
- <p class="Pp">NOTE: This flag should be set on all BULK and INTERRUPT USB
- transfers which use an endpoint that can be shared between userland and
- kernel.</p>
- </dd>
- <dt>proxy_buffer</dt>
- <dd>Setting this flag will cause that the total buffer size will be rounded up
- to the nearest atomic hardware transfer size. The maximum data length of
- any USB transfer is always stored in the
- &quot;xfer-&gt;max_data_length&quot;. For control transfers the USB kernel
- will allocate additional space for the 8-bytes of SETUP header. These
- 8-bytes are not counted by the &quot;xfer-&gt;max_data_length&quot;
- variable. This flag cannot be changed during operation.</dd>
- <dt>ext_buffer</dt>
- <dd>Setting this flag will cause that no data buffer will be allocated.
- Instead the USB client must supply a data buffer. This flag cannot be
- changed during operation.</dd>
- <dt>manual_status</dt>
- <dd>Setting this flag prevents an USB STATUS stage to be appended to the end
- of the USB control transfer. If no control data is transferred this flag
- must be cleared. Else an error will be returned to the USB callback. This
- flag is mostly useful for the USB device side. This flag can be changed
- during operation.</dd>
- <dt>no_pipe_ok</dt>
- <dd>Setting this flag causes the USB_ERR_NO_PIPE error to be ignored. This
- flag cannot be changed during operation.</dd>
- <dt>stall_pipe</dt>
- <dd>
- <dl class="Bl-tag">
- <dt>Device Side Mode</dt>
- <dd>Setting this flag will cause STALL pids to be sent to the endpoint
- belonging to this transfer before the transfer is started. The
- transfer is started at the moment the host issues a clear-stall
- command on the STALL'ed endpoint. This flag can be changed during
- operation.</dd>
- <dt>Host Side Mode</dt>
- <dd>Setting this flag will cause a clear-stall control request to be
- executed on the endpoint before the USB transfer is started.</dd>
- </dl>
- <p class="Pp">If this flag is changed outside the USB callback function you
- have to use the &quot;usbd_xfer_set_stall()&quot; and
- &quot;usbd_transfer_clear_stall()&quot; functions! This flag is
- automatically cleared after that the stall or clear stall has been
- executed.</p>
- </dd>
- <dt>pre_scale_frames</dt>
- <dd>If this flag is set the number of frames specified is assumed to give the
- buffering time in milliseconds instead of frames. During transfer setup
- the frames field is pre scaled with the corresponding value for the
- endpoint and rounded to the nearest number of frames greater than zero.
- This option only has effect for ISOCHRONOUS transfers.</dd>
-</dl>
-<p class="Pp"><var class="Fa">bufsize</var> field sets the total buffer size in
- bytes. If this field is zero, &quot;wMaxPacketSize&quot; will be used,
- multiplied by the &quot;frames&quot; field if the transfer type is
- ISOCHRONOUS. This is useful for setting up interrupt pipes. This field is
- mandatory.</p>
-<p class="Pp">NOTE: For control transfers &quot;bufsize&quot; includes the
- length of the request structure.</p>
-<p class="Pp"><var class="Fa">callback</var> pointer sets the USB callback. This
- field is mandatory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="USB_LINUX_COMPAT_LAYER"><a class="permalink" href="#USB_LINUX_COMPAT_LAYER">USB
- LINUX COMPAT LAYER</a></h1>
-<p class="Pp">The <code class="Nm">usb</code> module supports the Linux USB
- API.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">libusb(3)</a>, <a class="Xr">usb(4)</a>,
- <a class="Xr">usbconfig(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STANDARDS"><a class="permalink" href="#STANDARDS">STANDARDS</a></h1>
-<p class="Pp">The <code class="Nm">usb</code> module complies with the USB 2.0
- standard.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">usb</code> module has been inspired by the
- NetBSD USB stack initially written by Lennart Augustsson. The
- <code class="Nm">usb</code> module was written by <span class="An">Hans
- Petter Selasky</span>
- &lt;<a class="Mt" href="mailto:hselasky@FreeBSD.org">hselasky@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 14, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vaccess.9 3.html b/static/freebsd/man9/vaccess.9 3.html
deleted file mode 100644
index 80cc8b09..00000000
--- a/static/freebsd/man9/vaccess.9 3.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VACCESS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VACCESS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vaccess</code> &#x2014; <span class="Nd">generate
- an access control decision using vnode parameters</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vaccess</code>(<var class="Fa">enum vtype type</var>,
- <var class="Fa">mode_t file_mode</var>, <var class="Fa">uid_t
- file_uid</var>, <var class="Fa">gid_t file_gid</var>,
- <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred
- *cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This call implements the logic for the
- <span class="Ux">UNIX</span> discretionary file security model common to
- many file systems in <span class="Ux">FreeBSD</span>. It accepts the vnodes
- type <var class="Fa">type</var>, permissions via
- <var class="Fa">file_mode</var>, owning UID <var class="Fa">file_uid</var>,
- owning GID <var class="Fa">file_gid</var>, desired access mode
- <var class="Fa">accmode</var> and requesting credential
- <var class="Fa">cred</var>.</p>
-<p class="Pp" id="vaccess">This call is intended to support implementations of
- <a class="Xr">VOP_ACCESS(9)</a>, which will use their own access methods to
- retrieve the vnode properties, and then invoke
- <a class="permalink" href="#vaccess"><code class="Fn">vaccess</code></a>()
- in order to perform the actual check. Implementations of
- <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security
- mechanisms whose results will be composed with the return value.</p>
-<p class="Pp" id="vaccess~2">The algorithm used by
- <a class="permalink" href="#vaccess~2"><code class="Fn">vaccess</code></a>()
- selects a component of the file permission bits based on comparing the
- passed credential, file owner, and file group. If the credential's effective
- UID matches the file owner, then the owner component of the permission bits
- is selected. If the UID does not match, then the credential's effective GID,
- followed by additional groups, are compared with the file group&#x2014;if
- there is a match, then the group component of the permission bits is
- selected. If neither the credential UID or GIDs match the passed file owner
- and group, then the other component of the permission bits is selected.</p>
-<p class="Pp">Once appropriate protections are selected for the current
- credential, the requested access mode, in combination with the vnode type,
- will be compared with the discretionary rights available for the credential.
- If the rights granted by discretionary protections are insufficient, then
- super-user privilege, if available for the credential, will also be
- considered.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vaccess</code>() will return 0 on success, or a
- non-zero error value on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>Permission denied. An attempt was made to access a file in a way forbidden
- by its file access permissions.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>Operation not permitted. An attempt was made to perform an operation
- limited to processes with appropriate privileges or to the owner of a file
- or other resource.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vaccess_acl_nfs4(9)</a>,
- <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACCESS(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the current implementation of
- <code class="Fn">vaccess</code>() were written by <span class="An">Robert
- Watson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 23, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vaccess_acl_nfs4.9 3.html b/static/freebsd/man9/vaccess_acl_nfs4.9 3.html
deleted file mode 100644
index 809b8c41..00000000
--- a/static/freebsd/man9/vaccess_acl_nfs4.9 3.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VACCESS_ACL_NFS4(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VACCESS_ACL_NFS4(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vaccess_acl_nfs4</code> &#x2014;
- <span class="Nd">generate a NFSv4 ACL access control decision using vnode
- parameters</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vaccess_acl_nfs4</code>(<var class="Fa">enum vtype
- type</var>, <var class="Fa">uid_t file_uid</var>, <var class="Fa">gid_t
- file_gid</var>, <var class="Fa">struct acl *acl</var>,
- <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred
- *cred</var>, <var class="Fa">int *privused</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This call implements the logic for the
- <span class="Ux">UNIX</span> discretionary file security model with NFSv4
- ACL extensions. It accepts the vnodes type <var class="Fa">type</var>,
- owning UID <var class="Fa">file_uid</var>, owning GID
- <var class="Fa">file_gid</var>, access ACL for the file
- <var class="Fa">acl</var>, desired access mode
- <var class="Fa">accmode</var>, requesting credential
- <var class="Fa">cred</var>, and an optional call-by-reference
- <var class="Vt">int</var> pointer returning whether or not privilege was
- required for successful evaluation of the call; the
- <var class="Fa">privused</var> pointer may be set to
- <code class="Dv">NULL</code> by the caller in order not to be informed of
- privilege information, or it may point to an integer that will be set to 1
- if privilege is used, and 0 otherwise.</p>
-<p class="Pp" id="vaccess_acl_nfs4">This call is intended to support
- implementations of <a class="Xr">VOP_ACCESS(9)</a>, which will use their own
- access methods to retrieve the vnode properties, and then invoke
- <a class="permalink" href="#vaccess_acl_nfs4"><code class="Fn">vaccess_acl_nfs4</code></a>()
- in order to perform the actual check. Implementations of
- <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security
- mechanisms whose results will be composed with the return value.</p>
-<p class="Pp" id="vaccess_acl_nfs4~2">The algorithm used by
- <a class="permalink" href="#vaccess_acl_nfs4~2"><code class="Fn">vaccess_acl_nfs4</code></a>()
- is based on the NFSv4 ACL evaluation algorithm, as described in NFSv4 Minor
- Version 1, draft-ietf-nfsv4-minorversion1-21.txt. The algorithm selects a
- <a class="permalink" href="#matching"><i class="Em" id="matching">matching</i></a>
- entry from the access ACL, which may then be composed with an available ACL
- mask entry, providing <span class="Ux">UNIX</span> security
- compatibility.</p>
-<p class="Pp">Once appropriate protections are selected for the current
- credential, the requested access mode, in combination with the vnode type,
- will be compared with the discretionary rights available for the credential.
- If the rights granted by discretionary protections are insufficient, then
- super-user privilege, if available for the credential, will also be
- considered.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vaccess_acl_nfs4</code>() will return 0 on
- success, or a non-zero error value on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>Permission denied. An attempt was made to access a file in a way forbidden
- by its file access permissions.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>Operation not permitted. An attempt was made to perform an operation
- limited to processes with appropriate privileges or to the owner of a file
- or other resource.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vaccess(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACCESS(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">Current implementation of
- <code class="Fn">vaccess_acl_nfs4</code>() was written by
- <span class="An">Edward Tomasz Napierala</span>
- &lt;<a class="Mt" href="mailto:trasz@FreeBSD.org">trasz@FreeBSD.org</a>&gt;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">This manual page should include a full description of the NFSv4
- ACL evaluation algorithm, or cross reference another page that does.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 18, 2009</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vaccess_acl_posix1e.9 3.html b/static/freebsd/man9/vaccess_acl_posix1e.9 3.html
deleted file mode 100644
index d989a75f..00000000
--- a/static/freebsd/man9/vaccess_acl_posix1e.9 3.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VACCESS_ACL_POSIX1E(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VACCESS_ACL_POSIX1E(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vaccess_acl_posix1e</code> &#x2014;
- <span class="Nd">generate a POSIX.1e ACL access control decision using vnode
- parameters</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/acl.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vaccess_acl_posix1e</code>(<var class="Fa">enum vtype
- type</var>, <var class="Fa">uid_t file_uid</var>, <var class="Fa">gid_t
- file_gid</var>, <var class="Fa">struct acl *acl</var>,
- <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred
- *cred</var>, <var class="Fa">int *privused</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This call implements the logic for the
- <span class="Ux">UNIX</span> discretionary file security model with POSIX.1e
- ACL extensions. It accepts the vnodes type <var class="Fa">type</var>,
- owning UID <var class="Fa">file_uid</var>, owning GID
- <var class="Fa">file_gid</var>, access ACL for the file
- <var class="Fa">acl</var>, desired access mode
- <var class="Fa">accmode</var>, requesting credential
- <var class="Fa">cred</var>, and an optional call-by-reference
- <var class="Vt">int</var> pointer returning whether or not privilege was
- required for successful evaluation of the call; the
- <var class="Fa">privused</var> pointer may be set to
- <code class="Dv">NULL</code> by the caller in order not to be informed of
- privilege information, or it may point to an integer that will be set to 1
- if privilege is used, and 0 otherwise.</p>
-<p class="Pp" id="vaccess_acl_posix1e">This call is intended to support
- implementations of <a class="Xr">VOP_ACCESS(9)</a>, which will use their own
- access methods to retrieve the vnode properties, and then invoke
- <a class="permalink" href="#vaccess_acl_posix1e"><code class="Fn">vaccess_acl_posix1e</code></a>()
- in order to perform the actual check. Implementations of
- <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security
- mechanisms whose results will be composed with the return value.</p>
-<p class="Pp" id="vaccess_acl_posix1e~2">The algorithm used by
- <a class="permalink" href="#vaccess_acl_posix1e~2"><code class="Fn">vaccess_acl_posix1e</code></a>()
- is based on the POSIX.1e ACL evaluation algorithm. The algorithm selects a
- <a class="permalink" href="#matching"><i class="Em" id="matching">matching</i></a>
- entry from the access ACL, which may then be composed with an available ACL
- mask entry, providing <span class="Ux">UNIX</span> security
- compatibility.</p>
-<p class="Pp">Once appropriate protections are selected for the current
- credential, the requested access mode, in combination with the vnode type,
- will be compared with the discretionary rights available for the credential.
- If the rights granted by discretionary protections are insufficient, then
- super-user privilege, if available for the credential, will also be
- considered.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vaccess_acl_posix1e</code>() will return 0 on
- success, or a non-zero error value on failure.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>Permission denied. An attempt was made to access a file in a way forbidden
- by its file access permissions.</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>Operation not permitted. An attempt was made to perform an operation
- limited to processes with appropriate privileges or to the owner of a file
- or other resource.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vaccess(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_ACCESS(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page and the current implementation of
- <code class="Fn">vaccess_acl_posix1e</code>() were written by
- <span class="An">Robert Watson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">This manual page should include a full description of the POSIX.1e
- ACL evaluation algorithm, or cross reference another page that does.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 22, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vflush.9 4.html b/static/freebsd/man9/vflush.9 4.html
deleted file mode 100644
index e8531cea..00000000
--- a/static/freebsd/man9/vflush.9 4.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFLUSH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFLUSH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vflush</code> &#x2014; <span class="Nd">flush
- vnodes for a mount point</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vflush</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- rootrefs</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vflush"><code class="Fn" id="vflush">vflush</code></a>()
- function removes any vnodes in the vnode table that belong to the given
- <var class="Vt">mount</var> structure.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point whose vnodes should be removed.</dd>
- <dt><var class="Fa">rootrefs</var></dt>
- <dd>The number of references expected on the root vnode.
- <a class="Xr">vrele(9)</a> will be invoked on the root vnode
- <var class="Fa">rootrefs</var> times.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The flags indicating how vnodes should be handled.
- <dl class="Bl-tag">
- <dt id="FORCECLOSE"><a class="permalink" href="#FORCECLOSE"><code class="Dv">FORCECLOSE</code></a></dt>
- <dd>If set, busy vnodes will be forcibly closed.</dd>
- <dt id="SKIPSYSTEM"><a class="permalink" href="#SKIPSYSTEM"><code class="Dv">SKIPSYSTEM</code></a></dt>
- <dd>If set, vnodes with the <code class="Dv">VV_SYSTEM</code> flag set
- will be skipped.</dd>
- <dt id="WRITECLOSE"><a class="permalink" href="#WRITECLOSE"><code class="Dv">WRITECLOSE</code></a></dt>
- <dd>If set, only regular files currently opened for writing will be
- removed.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">td</var></dt>
- <dd>The calling thread.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A value of 0 is returned if the flush is successful; otherwise,
- <code class="Er">EBUSY</code> will be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vgone(9)</a>, <a class="Xr">vrele(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 21, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_busy.9 4.html b/static/freebsd/man9/vfs_busy.9 4.html
deleted file mode 100644
index 56c7fa2e..00000000
--- a/static/freebsd/man9/vfs_busy.9 4.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_BUSY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_BUSY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_busy</code> &#x2014; <span class="Nd">marks a
- mount point as busy</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_busy</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_busy"><code class="Fn" id="vfs_busy">vfs_busy</code></a>()
- function marks a mount point as busy by incrementing the reference count of
- a mount point. It also delays unmounting by sleeping on
- <var class="Fa">mp</var> if the <code class="Dv">MNTK_UNMOUNT</code> flag is
- set in <var class="Fa">mp-&gt;mnt_kern_flag</var> and the
- <code class="Dv">MBF_NOWAIT</code> flag is
- <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> set.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point to busy.</dd>
- <dt id="vfs_busy~2"><var class="Fa">flags</var></dt>
- <dd>Flags controlling how
- <a class="permalink" href="#vfs_busy~2"><code class="Fn">vfs_busy</code></a>()
- should act.
- <dl class="Bl-tag">
- <dt id="MBF_NOWAIT"><a class="permalink" href="#MBF_NOWAIT"><code class="Dv">MBF_NOWAIT</code></a></dt>
- <dd>do not sleep if <code class="Dv">MNTK_UNMOUNT</code> is set.</dd>
- <dt id="MBF_MNTLSTLOCK"><a class="permalink" href="#MBF_MNTLSTLOCK"><code class="Dv">MBF_MNTLSTLOCK</code></a></dt>
- <dd>drop the mountlist_mtx in the critical path.</dd>
- </dl>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A 0 value is returned on success. If the mount point is being
- unmounted and MBF_NOWAIT flag is specified <code class="Er">ENOENT</code>
- will be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The mount point is being unmounted (<code class="Dv">MNTK_UNMOUNT</code>
- is set).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vfs_unbusy(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 11, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_getnewfsid.9 4.html b/static/freebsd/man9/vfs_getnewfsid.9 4.html
deleted file mode 100644
index 62b4b66b..00000000
--- a/static/freebsd/man9/vfs_getnewfsid.9 4.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_GETNEWFSID(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_GETNEWFSID(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_getnewfsid</code> &#x2014;
- <span class="Nd">allocate a new file system identifier</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vfs_getnewfsid</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_getnewfsid"><code class="Fn" id="vfs_getnewfsid">vfs_getnewfsid</code></a>()
- function allocates a new file system identifier for the mount point given.
- File systems typically call <code class="Fn">vfs_getnewfsid</code>() in
- their mount routine in order to acquire a unique ID within the system which
- can later be used to uniquely identify the file system via calls such as
- <a class="Xr">vfs_getvfs(9)</a>.</p>
-<p class="Pp">The actual <var class="Vt">fsid</var> is made up of two 32 bit
- integers, that are stored in the <var class="Vt">statfs</var> structure of
- <var class="Fa">mp</var>. The first integer is unique in the set of mounted
- file systems, while the second holds the file system type.</p>
-<div class="Bd Pp Li">
-<pre>typedef struct fsid {
- int32_t val[2];
-} fsid_t;</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1>
-<div class="Bd Li">
-<pre>xxx_mount(struct mount *mp, char *path, caddr_t data,
- struct nameidata *ndp, struct thread *td)
-{
- ...
- vfs_getnewfsid(mp);
- ...
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vfs_getvfs(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 21, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_getopt.9 4.html b/static/freebsd/man9/vfs_getopt.9 4.html
deleted file mode 100644
index 442b6a2a..00000000
--- a/static/freebsd/man9/vfs_getopt.9 4.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_GETOPT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_GETOPT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_getopt</code>,
- <code class="Nm">vfs_getopts</code>, <code class="Nm">vfs_flagopt</code>,
- <code class="Nm">vfs_scanopt</code>, <code class="Nm">vfs_copyopt</code>,
- <code class="Nm">vfs_filteropt</code>, <code class="Nm">vfs_setopt</code>,
- <code class="Nm">vfs_setopt_part</code>, <code class="Nm">vfs_setopts</code>
- &#x2014; <span class="Nd">manipulate mount options and their
- values</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_getopt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- **buf</var>, <var class="Fa">int *len</var>);</p>
-<p class="Pp"><var class="Ft">char *</var>
- <br/>
- <code class="Fn">vfs_getopts</code>(<var class="Fa" style="white-space: nowrap;">struct
- vfsoptlist *opts</var>, <var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- *error</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_flagopt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>,
- <var class="Fa">uint64_t *flags</var>, <var class="Fa">uint64_t
- flag</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_scanopt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">const
- char *fmt</var>, <var class="Fa">...</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_copyopt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *dest</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_filteropt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char **legal</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_setopt</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *value</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_setopt_part</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void
- *value</var>, <var class="Fa">int len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_setopts</code>(<var class="Fa">struct vfsoptlist
- *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">const
- char *value</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_getopt"><code class="Fn" id="vfs_getopt">vfs_getopt</code></a>()
- function sets <var class="Fa">buf</var> to point to the value of the named
- mount option, and sets <var class="Fa">len</var> to the length of the value
- if it is not <code class="Dv">NULL</code>. The <var class="Fa">buf</var>
- argument will point to the actual value, and does not need to be freed or
- released (and probably should not be modified).</p>
-<p class="Pp" id="vfs_getopts">The
- <a class="permalink" href="#vfs_getopts"><code class="Fn">vfs_getopts</code></a>()
- function returns the value of the specified option if it is a string (i.e.,
- <code class="Dv">NUL</code> terminated).</p>
-<p class="Pp" id="vfs_flagopt">The
- <a class="permalink" href="#vfs_flagopt"><code class="Fn">vfs_flagopt</code></a>()
- function determines if an option exists. If the option does exist, and
- <var class="Fa">flags</var> is not <code class="Dv">NULL</code>,
- <var class="Fa">flag</var> is added to those already set in
- <var class="Fa">flags</var>. If the option does not exist, and
- <var class="Fa">flags</var> is not <code class="Dv">NULL</code>,
- <var class="Fa">flag</var> is removed from those already set in
- <var class="Fa">flags</var>. An example of typical usage is:</p>
-<div class="Bd Pp Li">
-<pre>if (vfs_flagopt(mp-&gt;mnt_optnew, &quot;wormlike&quot;, NULL, 0))
- vfs_flagopt(mp-&gt;mnt_optnew, &quot;appendok&quot;, &amp;(mp-&gt;flags), F_APPENDOK);</pre>
-</div>
-<p class="Pp" id="vfs_scanopt">The
- <a class="permalink" href="#vfs_scanopt"><code class="Fn">vfs_scanopt</code></a>()
- function performs a <a class="Xr">vsscanf(3)</a> with the option's value,
- using the given format, into the specified variable arguments. The value
- must be a string (i.e., <code class="Dv">NUL</code> terminated).</p>
-<p class="Pp" id="vfs_copyopt">The
- <a class="permalink" href="#vfs_copyopt"><code class="Fn">vfs_copyopt</code></a>()
- function creates a copy of the option's value. The <var class="Fa">len</var>
- argument must match the length of the option's value exactly (i.e., a larger
- buffer will still cause
- <a class="permalink" href="#vfs_copyout"><code class="Fn" id="vfs_copyout">vfs_copyout</code></a>()
- to fail with <code class="Er">EINVAL</code>).</p>
-<p class="Pp" id="vfs_filteropt">The
- <a class="permalink" href="#vfs_filteropt"><code class="Fn">vfs_filteropt</code></a>()
- function ensures that no unknown options were specified. A option is valid
- if its name matches one of the names in the list of legal names. An option
- may be prefixed with 'no', and still be considered valid.</p>
-<p class="Pp" id="vfs_setopt">The
- <a class="permalink" href="#vfs_setopt"><code class="Fn">vfs_setopt</code></a>()
- and
- <a class="permalink" href="#vfs_setopt_part"><code class="Fn" id="vfs_setopt_part">vfs_setopt_part</code></a>()
- functions copy new data into the option's value. In
- <code class="Fn">vfs_setopt</code>(), the <var class="Fa">len</var> argument
- must match the length of the option's value exactly (i.e., a larger buffer
- will still cause <code class="Fn">vfs_copyout</code>() to fail with
- <code class="Er">EINVAL</code>).</p>
-<p class="Pp" id="vfs_setopts">The
- <a class="permalink" href="#vfs_setopts"><code class="Fn">vfs_setopts</code></a>()
- function copies a new string into the option's value. The string, including
- <code class="Dv">NUL</code> byte, must be no longer than the option's
- length.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vfs_getopt</code>() function returns 0 if the
- option was found; otherwise, <code class="Er">ENOENT</code> is returned.</p>
-<p class="Pp">The <code class="Fn">vfs_getopts</code>() function returns the
- specified option if it is found, and is <code class="Dv">NUL</code>
- terminated. If the option was found, but is not <code class="Dv">NUL</code>
- terminated, <var class="Fa">error</var> is set to
- <code class="Er">EINVAL</code> and <code class="Dv">NULL</code> is returned.
- If the option was not found, <var class="Fa">error</var> is set to 0, and
- <code class="Dv">NULL</code> is returned.</p>
-<p class="Pp">The <code class="Fn">vfs_flagopt</code>() function returns 1 if
- the option was found, and 0 if it was not.</p>
-<p class="Pp">The <code class="Fn">vfs_scanopt</code>() function returns 0 if
- the option was not found, or was not <code class="Dv">NUL</code> terminated;
- otherwise, the return value of <a class="Xr">vsscanf(3)</a> is returned. If
- <a class="Xr">vsscanf(3)</a> returns 0, it will be returned unchanged;
- therefore, a return value of 0 does not always mean the option does not
- exist, or is not a valid string.</p>
-<p class="Pp">The <code class="Fn">vfs_copyopt</code>() and
- <code class="Fn">vfs_setopt</code>() functions return 0 if the copy was
- successful, <code class="Er">EINVAL</code> if the option was found but the
- lengths did not match, and <code class="Er">ENOENT</code> if the option was
- not found.</p>
-<p class="Pp">The <code class="Fn">vfs_filteropt</code>() function returns 0 if
- all of the options are legal; otherwise, <code class="Er">EINVAL</code> is
- returned.</p>
-<p class="Pp">The <code class="Fn">vfs_setopts</code>() function returns 0 if
- the copy was successful, <code class="Er">EINVAL</code> if the option was
- found but the string was too long, and <code class="Er">ENOENT</code> if the
- option was not found.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>&gt;
- and <span class="An">Ruslan Ermilov</span>
- &lt;<a class="Mt" href="mailto:ru@FreeBSD.org">ru@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 19, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_getvfs.9 4.html b/static/freebsd/man9/vfs_getvfs.9 4.html
deleted file mode 100644
index 917d858c..00000000
--- a/static/freebsd/man9/vfs_getvfs.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_GETVFS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_GETVFS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_getvfs</code> &#x2014;
- <span class="Nd">returns a mount point given its file system
- identifier</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">struct mount *</var>
- <br/>
- <code class="Fn">vfs_getvfs</code>(<var class="Fa" style="white-space: nowrap;">fsid_t
- *fsid</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_getvfs"><code class="Fn" id="vfs_getvfs">vfs_getvfs</code></a>()
- function returns the mount point structure for a file system given its file
- system identifier. The file system ID should have been allocated by calling
- <a class="Xr">vfs_getnewfsid(9)</a>; otherwise, it will not be found.</p>
-<p class="Pp" id="vfs_getvfs~2">A major user of
- <a class="permalink" href="#vfs_getvfs~2"><code class="Fn">vfs_getvfs</code></a>()
- is NFS, which uses the <var class="Vt">fsid</var> as part of file handles in
- order to determine the file system a given RPC is for. If
- <code class="Fn">vfs_getvfs</code>() fails to find the mount point related
- to <var class="Fa">fsid</var>, the file system is considered stale.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If <var class="Fa">fsid</var> is found, the mount point for the ID
- is returned; otherwise, <code class="Dv">NULL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1>
-<div class="Bd Li">
-<pre>if ((mp = vfs_getvfs(&amp;fhp-&gt;fh_fsid)) == NULL) {
- error = ESTALE;
- goto out;
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vfs_getnewfsid(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 21, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_mountedfrom.9 4.html b/static/freebsd/man9/vfs_mountedfrom.9 4.html
deleted file mode 100644
index a7fefa18..00000000
--- a/static/freebsd/man9/vfs_mountedfrom.9 4.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_MOUNTEDFROM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_MOUNTEDFROM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_mountedfrom</code> &#x2014;
- <span class="Nd">sets the mounted from name for a mount</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vfs_mountedfrom</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">const char
- *from</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_mountedfrom"><code class="Fn" id="vfs_mountedfrom">vfs_mountedfrom</code></a>()
- function sets the mounted from name for a mount. This value is used by
- <a class="permalink" href="#statfs"><code class="Fn" id="statfs">statfs</code></a>(<var class="Fa">2</var>)
- to fill in <var class="Va">f_mntfromname</var>.</p>
-<p class="Pp">In most cases <var class="Va">from</var> is the device that
- contains the file system, but in the case of a pseudo file system it could
- be a descriptive name like &quot;devfs&quot; or &quot;procfs&quot;.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 25, 2008</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_rootmountalloc.9 4.html b/static/freebsd/man9/vfs_rootmountalloc.9 4.html
deleted file mode 100644
index d33a6f01..00000000
--- a/static/freebsd/man9/vfs_rootmountalloc.9 4.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_ROOTMOUNTALLOC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_ROOTMOUNTALLOC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_rootmountalloc</code> &#x2014;
- <span class="Nd">allocate a root <var class="Vt">mount</var>
- structure</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_rootmountalloc</code>(<var class="Fa" style="white-space: nowrap;">char
- *fstypename</var>, <var class="Fa" style="white-space: nowrap;">char
- *devname</var>, <var class="Fa" style="white-space: nowrap;">struct mount
- **mpp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#vfs_rootmountalloc"><code class="Fn" id="vfs_rootmountalloc">vfs_rootmountalloc</code></a>()
- allocates a <var class="Vt">mount</var> structure initialized from the
- <var class="Vt">vfsconf</var> type that matches
- <var class="Fa">fstypename</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If successful, 0 is returned and <var class="Fa">mpp</var> points
- to the newly allocated <var class="Vt">mount</var> structure.
- <code class="Er">ENODEV</code> is returned if
- <var class="Fa">fstypename</var> is <code class="Dv">NULL</code> or
- invalid.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vfsconf(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 21, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_suser.9 4.html b/static/freebsd/man9/vfs_suser.9 4.html
deleted file mode 100644
index ae8790a7..00000000
--- a/static/freebsd/man9/vfs_suser.9 4.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_SUSER(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_SUSER(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_suser</code> &#x2014; <span class="Nd">check
- if credentials have superuser privileges for a mount point</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_suser</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_suser"><code class="Fn" id="vfs_suser">vfs_suser</code></a>()
- function checks if the credentials given include superuser powers for the
- given mount point. It will check to see if the thread passed in has the same
- credentials as the user that mounted the file system. If so, it returns 0,
- otherwise it returns what <a class="Xr">priv_check(9)</a> would have
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vfs_suser</code>() function returns 0 if the
- user has superuser powers and <code class="Er">EPERM</code> otherwise. This
- is the
- <a class="permalink" href="#reverse"><i class="Em" id="reverse">reverse
- logic</i></a> of some other implementations of
- <code class="Fn">suser</code>() in which a TRUE response indicates superuser
- powers.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">chroot(2)</a>, <a class="Xr">jail(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Fn">vfs_suser</code>() function was introduced in
- <span class="Ux">FreeBSD 5.2</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Alfred
- Perlstein</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 2, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_timestamp.9 4.html b/static/freebsd/man9/vfs_timestamp.9 4.html
deleted file mode 100644
index a3073888..00000000
--- a/static/freebsd/man9/vfs_timestamp.9 4.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_TIMESTAMP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_TIMESTAMP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_timestamp</code> &#x2014;
- <span class="Nd">generate current timestamp</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vfs_timestamp</code>(<var class="Fa" style="white-space: nowrap;">struct
- timespec *tsp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_timestamp"><code class="Fn" id="vfs_timestamp">vfs_timestamp</code></a>()
- function fills in <var class="Fa">tsp</var> with the current time.</p>
-<p class="Pp">The precision is based on the value of the
- <var class="Va">vfs.timestamp_precision</var> sysctl variable:</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt>0</dt>
- <dd>seconds only; nanoseconds are zeroed.</dd>
- <dt>1</dt>
- <dd>seconds and nanoseconds, accurate within 1/HZ.</dd>
- <dt>2</dt>
- <dd>seconds and nanoseconds, truncated to microseconds.</dd>
- <dt>&#x2265;3</dt>
- <dd>seconds and nanoseconds, maximum precision.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 21, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_unbusy.9 4.html b/static/freebsd/man9/vfs_unbusy.9 4.html
deleted file mode 100644
index c18fa727..00000000
--- a/static/freebsd/man9/vfs_unbusy.9 4.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_UNBUSY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_UNBUSY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_unbusy</code> &#x2014;
- <span class="Nd">unbusy a mount point</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vfs_unbusy</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vfs_unbusy"><code class="Fn" id="vfs_unbusy">vfs_unbusy</code></a>()
- function un-busies a mount point by decrementing the reference count of a
- mount point. The reference count is typically incremented by calling
- <a class="Xr">vfs_busy(9)</a> prior to this call.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">mp</var></dt>
- <dd>The mount point to unbusy.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vfs_busy(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 14, 2010</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfs_unmountall.9 4.html b/static/freebsd/man9/vfs_unmountall.9 4.html
deleted file mode 100644
index 910d0eb3..00000000
--- a/static/freebsd/man9/vfs_unmountall.9 4.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFS_UNMOUNTALL(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFS_UNMOUNTALL(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfs_unmountall</code> &#x2014;
- <span class="Nd">unmount all file systems</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vfs_unmountall</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">vfs_unmountall</code> function, run only at
- system shutdown, unmounts all mounted file systems from most recent to
- oldest in order to avoid handling dependencies.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">boot(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 26, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vfsconf.9 3.html b/static/freebsd/man9/vfsconf.9 3.html
deleted file mode 100644
index bac8b42c..00000000
--- a/static/freebsd/man9/vfsconf.9 3.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFSCONF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFSCONF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vfsconf</code> &#x2014; <span class="Nd">vfs
- configuration information</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- vfsconf *vfc</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- vfsconf *vfc</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vfs_modevent</code>(<var class="Fa" style="white-space: nowrap;">module_t
- mod</var>, <var class="Fa" style="white-space: nowrap;">int type</var>,
- <var class="Fa" style="white-space: nowrap;">void *data</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Each file system type known to the kernel has a
- <var class="Vt">vfsconf</var> structure that contains the information
- required to create a new mount of that file systems type.</p>
-<div class="Bd Pp Li">
-<pre>struct vfsconf {
- struct vfsops *vfc_vfsops; /* file system operations vector */
- char vfc_name[MFSNAMELEN]; /* file system type name */
- int vfc_typenum; /* historic file system type number */
- int vfc_refcount; /* number mounted of this type */
- int vfc_flags; /* permanent flags */
- struct vfsconf *vfc_next; /* next in list */
-};</pre>
-</div>
-<p class="Pp" id="vfs_register">When a new file system is mounted,
- <a class="Xr">mount(2)</a> does a lookup of the
- <var class="Vt">vfsconf</var> structure by its name, and if it is not
- already registered, attempts to load a kernel module for it. The file system
- operations for the new mount point are taken from
- <var class="Va">vfc_vfsops</var>, and <var class="Va">mnt_vfc</var> in the
- <var class="Vt">mount</var> structure is made to point directly at the
- <var class="Vt">vfsconf</var> structure for the file system type. The file
- system type number is taken from <var class="Va">vfc_typenum</var> which was
- assigned in
- <a class="permalink" href="#vfs_register"><code class="Fn">vfs_register</code></a>(),
- and the mount flags are taken from a mask of
- <var class="Va">vfc_flags</var>. Each time a file system of a given type is
- mounted, <var class="Va">vfc_refcount</var> is incremented.</p>
-<p class="Pp" id="vfs_register~2"><a class="permalink" href="#vfs_register~2"><code class="Fn">vfs_register</code></a>()
- takes a new <var class="Vt">vfsconf</var> structure and adds it to the list
- of existing file systems. If the type has not already been registered, it is
- initialized by calling the
- <a class="permalink" href="#vfs_init"><code class="Fn" id="vfs_init">vfs_init</code></a>()
- function in the file system operations vector.
- <code class="Fn">vfs_register</code>() also updates the oid's of any sysctl
- nodes for this file system type to be the same as the newly assigned type
- number.</p>
-<p class="Pp" id="vfs_unregister"><a class="permalink" href="#vfs_unregister"><code class="Fn">vfs_unregister</code></a>()
- unlinks <var class="Fa">vfc</var> from the list of registered file system
- types if there are currently no mounted instances. If the
- <a class="permalink" href="#vfs_uninit"><code class="Fn" id="vfs_uninit">vfs_uninit</code></a>()
- function in the file systems initialization vector is defined, it is
- called.</p>
-<p class="Pp" id="vfs_modevent"><a class="permalink" href="#vfs_modevent"><code class="Fn">vfs_modevent</code></a>()
- is registered by
- <a class="permalink" href="#VFS_SET"><code class="Fn" id="VFS_SET">VFS_SET</code></a>()
- to handle the loading and unloading of file system kernel modules. In the
- case of <code class="Dv">MOD_LOAD</code>,
- <code class="Fn">vfs_register</code>() is called. In the case of
- <code class="Dv">MOD_UNLOAD</code>, <code class="Fn">vfs_unregister</code>()
- is called.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vfs_register</code>() returns 0 if successful;
- otherwise, <code class="Er">EEXIST</code> is returned indicating that the
- file system type has already been registered.</p>
-<p class="Pp"><code class="Fn">vfs_unregister</code>() returns 0 if successful.
- If no <var class="Vt">vfsconf</var> entry can be found matching the name in
- <var class="Fa">vfc</var>, <code class="Er">EINVAL</code> is returned. If
- the reference count of mounted instances of the file system type is not
- zero, <code class="Er">EBUSY</code> is returned. If
- <code class="Fn">vfs_uninit</code>() is called, any errors it returns will
- be returned by <code class="Fn">vfs_unregister</code>().</p>
-<p class="Pp"><code class="Fn">vfs_modevent</code>() returns the result of the
- call to <code class="Fn">vfs_register</code>() or
- <code class="Fn">vfs_unregister</code>(), whatever the case.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mount(2)</a>,
- <a class="Xr">vfs_rootmountalloc(9)</a>, <a class="Xr">VFS_SET(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 16, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vget.9 4.html b/static/freebsd/man9/vget.9 4.html
deleted file mode 100644
index 5c45def3..00000000
--- a/static/freebsd/man9/vget.9 4.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VGET(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VGET(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vget</code> &#x2014; <span class="Nd">get a vnode
- from the free list</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vget</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- lockflag</var>, <var class="Fa" style="white-space: nowrap;">struct thread
- *td</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Get a vnode from the free list and increment its reference
- count.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to remove from the free list.</dd>
- <dt><var class="Fa">lockflag</var></dt>
- <dd>If non-zero, the vnode will also be locked.</dd>
-</dl>
-<p class="Pp">When not in use, vnodes are kept on a free list. The vnodes still
- reference valid files but may be reused to refer to a new file at any time.
- Often, these vnodes are also held in caches in the system, such as the name
- cache.</p>
-<p class="Pp" id="vget">When a vnode which is on the free list is used again,
- for instance if the vnode was found in the name cache as a result of a call
- to <a class="Xr">VOP_LOOKUP(9)</a> then the new user must call
- <a class="permalink" href="#vget"><code class="Fn">vget</code></a>() to
- increment the reference count and remove it from the free list.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">vput(9)</a>,
- <a class="Xr">vref(9)</a>, <a class="Xr">vrele(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 1996</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vgone.9 4.html b/static/freebsd/man9/vgone.9 4.html
deleted file mode 100644
index a79439d5..00000000
--- a/static/freebsd/man9/vgone.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VGONE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VGONE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vgone</code> &#x2014; <span class="Nd">prepare a
- vnode for reuse</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vgone</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vgone"><code class="Fn" id="vgone">vgone</code></a>()
- function prepares the vnode to be destroyed. The preparation includes the
- cleaning of all file system specific data and the removal from its mount
- point vnode list.</p>
-<p class="Pp">If the vnode has a <var class="Va">v_usecount</var> of zero, and
- its <code class="Dv">VIRF_DOOMED</code> flag is not set, it is moved to the
- head of the free list as in most cases the vnode is about to be reused, or
- its file system is being unmounted.</p>
-<p class="Pp" id="vgone~2">The
- <a class="permalink" href="#vgone~2"><code class="Fn">vgone</code></a>()
- function takes an exclusively locked vnode, and returns with the vnode
- exclusively locked.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 8, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vhold.9 4.html b/static/freebsd/man9/vhold.9 4.html
deleted file mode 100644
index 2cc31278..00000000
--- a/static/freebsd/man9/vhold.9 4.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VHOLD(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VHOLD(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vhold</code>, <code class="Nm">vdrop</code>,
- <code class="Nm">vdropl</code> &#x2014; <span class="Nd">acquire/release a
- hold on a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vhold</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vholdl</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vdrop</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vdropl</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vhold"><code class="Fn" id="vhold">vhold</code></a>()
- and
- <a class="permalink" href="#vholdl"><code class="Fn" id="vholdl">vholdl</code></a>()
- functions increment the <var class="Va">v_holdcnt</var> of the given vnode.
- If the vnode has already been added to the free list and is still
- referenced, it will be removed.</p>
-<p class="Pp" id="vdrop">The
- <a class="permalink" href="#vdrop"><code class="Fn">vdrop</code></a>() and
- <a class="permalink" href="#vdropl"><code class="Fn" id="vdropl">vdropl</code></a>()
- functions decrement the <var class="Va">v_holdcnt</var> of the vnode. If the
- holdcount is less than or equal to zero prior to calling
- <code class="Fn">vdrop</code>() or <code class="Fn">vdropl</code>(), the
- system will panic. If the vnode is no longer referenced, it will be
- freed.</p>
-<p class="Pp" id="vhold~2"><a class="permalink" href="#vhold~2"><code class="Fn">vhold</code></a>()
- and <code class="Fn">vdrop</code>() lock the vnode interlock while
- <code class="Fn">vholdl</code>() and <code class="Fn">vdropl</code>() expect
- the interlock to already be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 1, 2007</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vinvalbuf.9 4.html b/static/freebsd/man9/vinvalbuf.9 4.html
deleted file mode 100644
index 8e16da5b..00000000
--- a/static/freebsd/man9/vinvalbuf.9 4.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VINVALBUF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VINVALBUF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vinvalbuf</code> &#x2014;
- <span class="Nd">flushes and invalidates all buffers associated with a
- vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vinvalbuf</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">struct ucred
- *cred</var>, <var class="Fa" style="white-space: nowrap;">int slpflag</var>,
- <var class="Fa" style="white-space: nowrap;">int slptimeo</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vinvalbuf"><code class="Fn" id="vinvalbuf">vinvalbuf</code></a>()
- function invalidates all of the buffers associated with the given vnode.
- This includes buffers on the clean list and the dirty list. If the
- <code class="Dv">V_SAVE</code> flag is specified then the buffers on the
- dirty list are synced prior to being released. If there is a VM Object
- associated with the vnode, it is removed.</p>
-<p class="Pp">Its arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>A pointer to the vnode whose buffers will be invalidated.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The only supported flag is <code class="Dv">V_SAVE</code> and it indicates
- that dirty buffers should be synced with the disk.</dd>
- <dt><var class="Fa">cred</var></dt>
- <dd>The user credentials that are used to <a class="Xr">VOP_FSYNC(9)</a>
- buffers if <code class="Dv">V_SAVE</code> is set.</dd>
- <dt><var class="Fa">slpflag</var></dt>
- <dd>The slp flag that will be used in the priority of any sleeps in the
- function.</dd>
- <dt><var class="Fa">slptimeo</var></dt>
- <dd>The timeout for any sleeps in the function.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode is assumed to be locked prior to the call and remains
- locked upon return.</p>
-<p class="Pp"><var class="Va">Giant</var> must be held by prior to the call and
- remains locked upon return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A 0 value is returned on success.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1>
-<div class="Bd Bd-indent Li">
-<pre>vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
-error = vinvalbuf(devvp, V_SAVE, cred, 0, 0);
-VOP_UNLOCK(devvp, 0);
-if (error)
- return (error);</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full. (With <code class="Dv">V_SAVE</code>)</dd>
- <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt>
- <dd>Disc quota exceeded. (With <code class="Dv">V_SAVE</code>)</dd>
- <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt>
- <dd>Sleep operation timed out. (See <var class="Fa">slptimeo</var>)</dd>
- <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt>
- <dd>A signal needs to be delivered and the system call should be restarted.
- (With <code class="Dv">PCATCH</code> set in
- <var class="Fa">slpflag</var>)</dd>
- <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt>
- <dd>The system has been interrupted by a signal. (With
- <code class="Dv">PCATCH</code> set in <var class="Fa">slpflag</var>)</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">tsleep(9)</a>, <a class="Xr">VOP_FSYNC(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">October 20, 2008</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_fault_prefault.9 4.html b/static/freebsd/man9/vm_fault_prefault.9 4.html
deleted file mode 100644
index 5f73900c..00000000
--- a/static/freebsd/man9/vm_fault_prefault.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_FAULT_PREFAULT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_FAULT_PREFAULT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_fault_prefault</code> &#x2014;
- <span class="Nd">cluster page faults into a process's address
- space</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/pmap.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_fault_prefault</code>(<var class="Fa" style="white-space: nowrap;">pmap_t
- pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- addra</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t
- entry</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_fault_prefault"><code class="Fn" id="vm_fault_prefault">vm_fault_prefault</code></a>()
- function provides a means of clustering pagefaults into a process's address
- space. It operates upon the physical map <var class="Fa">pmap</var>. The
- <var class="Fa">entry</var> argument specifies the entry to be prefaulted;
- the <var class="Fa">addra</var> argument specifies the beginning of the
- mapping in the process's virtual address space.</p>
-<p class="Pp" id="vm_fault">It is typically called by
- <a class="permalink" href="#vm_fault"><code class="Fn">vm_fault</code></a>()
- after the first page fault. It benefits the <a class="Xr">execve(2)</a>
- system call by eliminating repetitive calls to
- <code class="Fn">vm_fault</code>(), which would otherwise be made to bring
- the process's executable pages into physical memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This is a machine-independent function which calls the
- machine-dependent <a class="Xr">pmap_is_prefaultable(9)</a> helper function
- to determine if a page may be prefaulted into physical memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">execve(2)</a>,
- <a class="Xr">pmap_is_prefaultable(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map.9 4.html b/static/freebsd/man9/vm_map.9 4.html
deleted file mode 100644
index c6cb9812..00000000
--- a/static/freebsd/man9/vm_map.9 4.html
+++ /dev/null
@@ -1,290 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map</code> &#x2014; <span class="Nd">virtual
- address space portion of virtual memory subsystem</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">vm_map</code> subsystem is used to manage
- virtual address spaces. This section describes the main data structures used
- within the code.</p>
-<p class="Pp">The <var class="Vt">struct vm_map</var> is a generic
- representation of an address space. This address space may belong to a user
- process or the kernel. The kernel actually uses several maps, which are
- maintained as subordinate maps, created using the
- <a class="Xr">vm_map_submap(9)</a> function.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct vm_map {
- struct vm_map_entry header;
- union {
- struct sx lock;
- struct mtx system_mtx;
- };
- int nentries;
- vm_size_t size;
- u_int timestamp;
- u_int flags;
- vm_map_entry_t root;
- pmap_t pmap;
- int busy;
-};</pre>
-</div>
-<p class="Pp">The fields of <var class="Vt">struct vm_map</var> are as
- follows:</p>
-<dl class="Bl-tag">
- <dt id="header"><var class="Va">header</var></dt>
- <dd>Head node of a circular, doubly linked list of <var class="Vt">struct
- vm_map_entry</var> objects. Each object defines a particular region within
- this map's address space.</dd>
- <dt id="lock"><var class="Va">lock</var></dt>
- <dd>Used to serialize access to the structure.</dd>
- <dt id="system_mtx"><var class="Va">system_mtx</var></dt>
- <dd>A mutex which is used if the map is a system map.</dd>
- <dt id="nentries"><var class="Va">nentries</var></dt>
- <dd>A count of the members in use within the circular map entry list.</dd>
- <dt id="size"><var class="Va">size</var></dt>
- <dd>Specifies the size of the virtual address space.</dd>
- <dt id="timestamp"><var class="Va">timestamp</var></dt>
- <dd>Used to determine if the map has changed since its last access.</dd>
- <dt id="flags"><var class="Va">flags</var></dt>
- <dd>Map flags, described below.</dd>
- <dt id="root"><var class="Va">root</var></dt>
- <dd>Root node of a binary search tree used for fast lookup of map
- entries.</dd>
- <dt id="pmap"><var class="Va">pmap</var></dt>
- <dd>Pointer to the underlying physical map with which this virtual map is
- associated.</dd>
- <dt id="busy"><var class="Va">busy</var></dt>
- <dd>Map busy counter, prevents forks.</dd>
-</dl>
-<p class="Pp">Possible map flags:</p>
-<dl class="Bl-tag">
- <dt id="MAP_WIREFUTURE"><a class="permalink" href="#MAP_WIREFUTURE"><code class="Dv">MAP_WIREFUTURE</code></a></dt>
- <dd>Wire all future pages in this map.</dd>
- <dt id="MAP_BUSY_WAKEUP"><a class="permalink" href="#MAP_BUSY_WAKEUP"><code class="Dv">MAP_BUSY_WAKEUP</code></a></dt>
- <dd>There are waiters for the map busy status.</dd>
- <dt id="MAP_NEEDS_WAKEUP"><var class="Va">MAP_NEEDS_WAKEUP</var></dt>
- <dd>Indicates if a thread is waiting for an allocation within the map. Used
- only by system maps.</dd>
- <dt id="MAP_SYSTEM_MAP"><var class="Va">MAP_SYSTEM_MAP</var></dt>
- <dd>If set, indicates that the map is the system map; otherwise, it belongs to
- a user process.</dd>
-</dl>
-<p class="Pp">The following flags can be passed to
- <a class="Xr">vm_map_find(9)</a> and <a class="Xr">vm_map_insert(9)</a> to
- specify the copy-on-write properties of regions within the map:</p>
-<dl class="Bl-tag">
- <dt id="MAP_COPY_ON_WRITE"><a class="permalink" href="#MAP_COPY_ON_WRITE"><code class="Dv">MAP_COPY_ON_WRITE</code></a></dt>
- <dd>The mapping is copy-on-write.</dd>
- <dt id="MAP_NOFAULT"><a class="permalink" href="#MAP_NOFAULT"><code class="Dv">MAP_NOFAULT</code></a></dt>
- <dd>The mapping should not generate page faults.</dd>
- <dt id="MAP_PREFAULT"><a class="permalink" href="#MAP_PREFAULT"><code class="Dv">MAP_PREFAULT</code></a></dt>
- <dd>The mapping should be prefaulted into physical memory.</dd>
- <dt id="MAP_PREFAULT_PARTIAL"><a class="permalink" href="#MAP_PREFAULT_PARTIAL"><code class="Dv">MAP_PREFAULT_PARTIAL</code></a></dt>
- <dd>The mapping should be partially prefaulted into physical memory.</dd>
- <dt id="MAP_DISABLE_SYNCER"><a class="permalink" href="#MAP_DISABLE_SYNCER"><code class="Dv">MAP_DISABLE_SYNCER</code></a></dt>
- <dd>Do not periodically flush dirty pages; only flush them when absolutely
- necessary.</dd>
- <dt id="MAP_DISABLE_COREDUMP"><a class="permalink" href="#MAP_DISABLE_COREDUMP"><code class="Dv">MAP_DISABLE_COREDUMP</code></a></dt>
- <dd>Do not include the mapping in a core dump.</dd>
- <dt id="MAP_PREFAULT_MADVISE"><a class="permalink" href="#MAP_PREFAULT_MADVISE"><code class="Dv">MAP_PREFAULT_MADVISE</code></a></dt>
- <dd>Specify that the request is from a user process calling
- <a class="Xr">madvise(2)</a>.</dd>
- <dt id="MAP_ACC_CHARGED"><a class="permalink" href="#MAP_ACC_CHARGED"><code class="Dv">MAP_ACC_CHARGED</code></a></dt>
- <dd>Region is already charged to the requestor by some means.</dd>
- <dt id="MAP_ACC_NO_CHARGE"><a class="permalink" href="#MAP_ACC_NO_CHARGE"><code class="Dv">MAP_ACC_NO_CHARGE</code></a></dt>
- <dd>Do not charge for allocated region.</dd>
-</dl>
-<p class="Pp">The <var class="Vt">struct vm_map_entry</var> is a generic
- representation of a region. The region managed by each entry is associated
- with a <var class="Vt">union vm_map_object</var>, described below.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct vm_map_entry {
- struct vm_map_entry *prev;
- struct vm_map_entry *next;
- struct vm_map_entry *left;
- struct vm_map_entry *right;
- vm_offset_t start;
- vm_offset_t end;
- vm_offset_t avail_ssize;
- vm_size_t adj_free;
- vm_size_t max_free;
- union vm_map_object object;
- vm_ooffset_t offset;
- vm_eflags_t eflags;
- /* Only in task maps: */
- vm_prot_t protection;
- vm_prot_t max_protection;
- vm_inherit_t inheritance;
- int wired_count;
- vm_pindex_t lastr;
-};</pre>
-</div>
-<p class="Pp">The fields of <var class="Vt">struct vm_map_entry</var> are as
- follows:</p>
-<dl class="Bl-tag">
- <dt id="prev"><var class="Va">prev</var></dt>
- <dd>Pointer to the previous node in a doubly-linked, circular list.</dd>
- <dt id="next"><var class="Va">next</var></dt>
- <dd>Pointer to the next node in a doubly-linked, circular list.</dd>
- <dt id="left"><var class="Va">left</var></dt>
- <dd>Pointer to the left node in a binary search tree.</dd>
- <dt id="right"><var class="Va">right</var></dt>
- <dd>Pointer to the right node in a binary search tree.</dd>
- <dt id="start"><var class="Va">start</var></dt>
- <dd>Lower address bound of this entry's region.</dd>
- <dt id="end"><var class="Va">end</var></dt>
- <dd>Upper address bound of this entry's region.</dd>
- <dt id="avail_ssize"><var class="Va">avail_ssize</var></dt>
- <dd>If the entry is for a process stack, specifies how much the entry can
- grow.</dd>
- <dt id="adj_free"><var class="Va">adj_free</var></dt>
- <dd>The amount of free, unmapped address space adjacent to and immediately
- following this map entry.</dd>
- <dt id="max_free"><var class="Va">max_free</var></dt>
- <dd>The maximum amount of contiguous free space in this map entry's
- subtree.</dd>
- <dt id="object"><var class="Va">object</var></dt>
- <dd>Pointer to the <var class="Vt">struct vm_map_object</var> with which this
- entry is associated.</dd>
- <dt id="offset"><var class="Va">offset</var></dt>
- <dd>Offset within the <var class="Va">object</var> which is mapped from
- <var class="Va">start</var> onwards.</dd>
- <dt id="eflags"><var class="Va">eflags</var></dt>
- <dd>Flags applied to this entry, described below.</dd>
-</dl>
-<p class="Pp">The following five members are only valid for entries forming part
- of a user process's address space:</p>
-<dl class="Bl-tag">
- <dt id="protection"><var class="Va">protection</var></dt>
- <dd>Memory protection bits applied to this region.</dd>
- <dt id="max_protection"><var class="Va">max_protection</var></dt>
- <dd>Mask for the memory protection bits which may be actually be applied to
- this region.</dd>
- <dt id="inheritance"><var class="Va">inheritance</var></dt>
- <dd>Contains flags which specify how this entry should be treated during fork
- processing.</dd>
- <dt id="wired_count"><var class="Va">wired_count</var></dt>
- <dd>Count of how many times this entry has been wired into physical
- memory.</dd>
- <dt id="lastr"><var class="Va">lastr</var></dt>
- <dd>Contains the address of the last read which caused a page fault.</dd>
-</dl>
-<p class="Pp">The following flags may be applied to each entry, by specifying
- them as a mask within the <var class="Va">eflags</var> member:</p>
-<dl class="Bl-tag">
- <dt id="MAP_ENTRY_NOSYNC"><a class="permalink" href="#MAP_ENTRY_NOSYNC"><code class="Dv">MAP_ENTRY_NOSYNC</code></a></dt>
- <dd>The system should not flush the data associated with this map
- periodically, but only when it needs to.</dd>
- <dt id="MAP_ENTRY_IS_SUB_MAP"><a class="permalink" href="#MAP_ENTRY_IS_SUB_MAP"><code class="Dv">MAP_ENTRY_IS_SUB_MAP</code></a></dt>
- <dd>If set, then the <var class="Va">object</var> member specifies a
- subordinate map.</dd>
- <dt id="MAP_ENTRY_COW"><a class="permalink" href="#MAP_ENTRY_COW"><code class="Dv">MAP_ENTRY_COW</code></a></dt>
- <dd>Indicate that this is a copy-on-write region.</dd>
- <dt id="MAP_ENTRY_NEEDS_COPY"><a class="permalink" href="#MAP_ENTRY_NEEDS_COPY"><code class="Dv">MAP_ENTRY_NEEDS_COPY</code></a></dt>
- <dd>Indicate that a copy-on-write region needs to be copied.</dd>
- <dt id="MAP_ENTRY_NOFAULT"><a class="permalink" href="#MAP_ENTRY_NOFAULT"><code class="Dv">MAP_ENTRY_NOFAULT</code></a></dt>
- <dd>Specifies that accesses within this region should never cause a page
- fault. If a page fault occurs within this region, the system will
- panic.</dd>
- <dt id="MAP_ENTRY_USER_WIRED"><a class="permalink" href="#MAP_ENTRY_USER_WIRED"><code class="Dv">MAP_ENTRY_USER_WIRED</code></a></dt>
- <dd>Indicate that this region was wired on behalf of a user process.</dd>
- <dt id="MAP_ENTRY_BEHAV_NORMAL"><a class="permalink" href="#MAP_ENTRY_BEHAV_NORMAL"><code class="Dv">MAP_ENTRY_BEHAV_NORMAL</code></a></dt>
- <dd>The system should use the default paging behaviour for this region.</dd>
- <dt id="MAP_ENTRY_BEHAV_SEQUENTIAL"><a class="permalink" href="#MAP_ENTRY_BEHAV_SEQUENTIAL"><code class="Dv">MAP_ENTRY_BEHAV_SEQUENTIAL</code></a></dt>
- <dd>The system should depress the priority of pages immediately preceding each
- page within this region when faulted in.</dd>
- <dt id="MAP_ENTRY_BEHAV_RANDOM"><a class="permalink" href="#MAP_ENTRY_BEHAV_RANDOM"><code class="Dv">MAP_ENTRY_BEHAV_RANDOM</code></a></dt>
- <dd>Is a hint that pages within this region will be accessed randomly, and
- that prefetching is likely not advantageous.</dd>
- <dt id="MAP_ENTRY_IN_TRANSITION"><a class="permalink" href="#MAP_ENTRY_IN_TRANSITION"><code class="Dv">MAP_ENTRY_IN_TRANSITION</code></a></dt>
- <dd>Indicate that wiring or unwiring of an entry is in progress, and that
- other kernel threads should not attempt to modify fields in the
- structure.</dd>
- <dt id="MAP_ENTRY_NEEDS_WAKEUP"><a class="permalink" href="#MAP_ENTRY_NEEDS_WAKEUP"><code class="Dv">MAP_ENTRY_NEEDS_WAKEUP</code></a></dt>
- <dd>Indicate that there are kernel threads waiting for this region to become
- available.</dd>
- <dt id="MAP_ENTRY_NOCOREDUMP"><a class="permalink" href="#MAP_ENTRY_NOCOREDUMP"><code class="Dv">MAP_ENTRY_NOCOREDUMP</code></a></dt>
- <dd>The region should not be included in a core dump.</dd>
-</dl>
-<p class="Pp">The <var class="Va">inheritance</var> member has type
- <var class="Vt">vm_inherit_t</var>. This governs the inheritance behaviour
- for a map entry during fork processing. The following values are defined for
- <var class="Vt">vm_inherit_t</var>:</p>
-<dl class="Bl-tag">
- <dt id="VM_INHERIT_SHARE"><a class="permalink" href="#VM_INHERIT_SHARE"><code class="Dv">VM_INHERIT_SHARE</code></a></dt>
- <dd>The object associated with the entry should be cloned and shared with the
- new map. A new <var class="Vt">struct vm_object</var> will be created if
- necessary.</dd>
- <dt id="VM_INHERIT_COPY"><a class="permalink" href="#VM_INHERIT_COPY"><code class="Dv">VM_INHERIT_COPY</code></a></dt>
- <dd>The object associated with the entry should be copied to the new map.</dd>
- <dt id="VM_INHERIT_NONE"><a class="permalink" href="#VM_INHERIT_NONE"><code class="Dv">VM_INHERIT_NONE</code></a></dt>
- <dd>The entry should not be copied to the new map.</dd>
- <dt id="VM_INHERIT_DEFAULT"><a class="permalink" href="#VM_INHERIT_DEFAULT"><code class="Dv">VM_INHERIT_DEFAULT</code></a></dt>
- <dd>Specifies the default behaviour,
- <code class="Dv">VM_INHERIT_COPY</code>.</dd>
-</dl>
-<p class="Pp">The <var class="Vt">union vm_map_object</var> is used to specify
- the structure which a <var class="Vt">struct vm_map_entry</var> is
- associated with.</p>
-<p class="Pp">The fields of <var class="Vt">union vm_map_object</var> are as
- follows:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>union vm_map_object {
- struct vm_object *vm_object;
- struct vm_map *sub_map;
-};</pre>
-</div>
-<p class="Pp">Normally, the <var class="Va">sub_map</var> member is only used by
- system maps to indicate that a memory range is managed by a subordinate
- system map. Within a user process map, each <var class="Vt">struct
- vm_map_entry</var> is backed by a <var class="Vt">struct
- vm_object</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>,
- <a class="Xr">vm_map_check_protection(9)</a>,
- <a class="Xr">vm_map_delete(9)</a>,
- <a class="Xr">vm_map_entry_resize_free(9)</a>,
- <a class="Xr">vm_map_find(9)</a>, <a class="Xr">vm_map_findspace(9)</a>,
- <a class="Xr">vm_map_inherit(9)</a>, <a class="Xr">vm_map_init(9)</a>,
- <a class="Xr">vm_map_insert(9)</a>, <a class="Xr">vm_map_lock(9)</a>,
- <a class="Xr">vm_map_lookup(9)</a>, <a class="Xr">vm_map_madvise(9)</a>,
- <a class="Xr">vm_map_max(9)</a>, <a class="Xr">vm_map_min(9)</a>,
- <a class="Xr">vm_map_pmap(9)</a>, <a class="Xr">vm_map_protect(9)</a>,
- <a class="Xr">vm_map_remove(9)</a>, <a class="Xr">vm_map_stack(9)</a>,
- <a class="Xr">vm_map_submap(9)</a>, <a class="Xr">vm_map_sync(9)</a>,
- <a class="Xr">vm_map_wire(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 3, 2018</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_check_protection.9 4.html b/static/freebsd/man9/vm_map_check_protection.9 4.html
deleted file mode 100644
index bce222b6..00000000
--- a/static/freebsd/man9/vm_map_check_protection.9 4.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_CHECK_PROTECTION(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_CHECK_PROTECTION(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_check_protection</code> &#x2014;
- <span class="Nd">check memory protection for a vm_map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">boolean_t</var>
- <br/>
- <code class="Fn">vm_map_check_protection</code>(<var class="Fa">vm_map_t
- map</var>, <var class="Fa">vm_offset_t start</var>,
- <var class="Fa">vm_offset_t end</var>, <var class="Fa">vm_prot_t
- protection</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_check_protection"><code class="Fn" id="vm_map_check_protection">vm_map_check_protection</code></a>()
- function asserts that the target <var class="Fa">map</var> allows the
- specified privilege <var class="Fa">protection</var> over the entire address
- range from <var class="Fa">start</var> to <var class="Fa">end</var>. The
- region MUST be contiguous; no holes are allowed.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This code does not and SHOULD not check whether the contents of
- the region are accessible. For example, a small file may be mapped into an
- address space which is significantly larger in size.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_check_protection</code>() function
- returns TRUE if the privilege is allowed; if it is not allowed, or if any
- other error occurred, the value FALSE is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">munmap(2)</a>, <a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_protect(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_delete.9 4.html b/static/freebsd/man9/vm_map_delete.9 4.html
deleted file mode 100644
index c3cd8010..00000000
--- a/static/freebsd/man9/vm_map_delete.9 4.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_DELETE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_DELETE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_delete</code> &#x2014;
- <span class="Nd">deallocate an address range from a map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_delete</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- end</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_delete"><code class="Fn" id="vm_map_delete">vm_map_delete</code></a>()
- function deallocates the address range bounded by
- <var class="Fa">start</var> and <var class="Fa">end</var> from the
- <var class="Fa">map</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function is for <span class="Ux">FreeBSD</span> VM internal
- use only. The <a class="Xr">vm_map_remove(9)</a> function should be called
- by <span class="Ux">FreeBSD</span> VM consumers instead.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_delete</code>() function always
- returns <code class="Dv">KERN_SUCCESS</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_remove(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html b/static/freebsd/man9/vm_map_entry_resize_free.9 3.html
deleted file mode 100644
index 11a88d84..00000000
--- a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_entry_resize_free</code> &#x2014;
- <span class="Nd">vm map free space algorithm</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_entry_resize_free</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t
- entry</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This manual page describes the <var class="Vt">vm_map_entry</var>
- fields used in the VM map free space algorithm, how to maintain consistency
- of these variables, and the
- <a class="permalink" href="#vm_map_entry_resize_free"><code class="Fn" id="vm_map_entry_resize_free">vm_map_entry_resize_free</code></a>()
- function.</p>
-<p class="Pp">VM map entries are organized as both a doubly-linked list
- (<var class="Va">prev</var> and <var class="Va">next</var> pointers) and as
- a binary search tree (<var class="Va">left</var> and
- <var class="Va">right</var> pointers). The search tree is organized as a
- Sleator and Tarjan splay tree, also known as a &#x201C;self-adjusting
- tree&#x201D;.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct vm_map_entry {
- struct vm_map_entry *prev;
- struct vm_map_entry *next;
- struct vm_map_entry *left;
- struct vm_map_entry *right;
- vm_offset_t start;
- vm_offset_t end;
- vm_offset_t avail_ssize;
- vm_size_t adj_free;
- vm_size_t max_free;
- ...
-};</pre>
-</div>
-<p class="Pp">The free space algorithm adds two fields to <var class="Vt">struct
- vm_map_entry</var>: <var class="Va">adj_free</var> and
- <var class="Va">max_free</var>. The <var class="Va">adj_free</var> field is
- the amount of free address space adjacent to and immediately following
- (higher address) the map entry. This field is unused in the map header. Note
- that <var class="Va">adj_free</var> depends on the linked list, not the
- splay tree and that <var class="Va">adj_free</var> can be computed as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;adj_free = (entry-&gt;next == &amp;map-&gt;header ?
- map-&gt;max_offset : entry-&gt;next-&gt;start) - entry-&gt;end;</pre>
-</div>
-<p class="Pp">The <var class="Va">max_free</var> field is the maximum amount of
- contiguous free space in the entry's subtree. Note that
- <var class="Va">max_free</var> depends on the splay tree, not the linked
- list and that <var class="Va">max_free</var> is computed by taking the
- maximum of its own <var class="Va">adj_free</var> and the
- <var class="Va">max_free</var> of its left and right subtrees. Again,
- <var class="Va">max_free</var> is unused in the map header.</p>
-<p class="Pp" id="O">These fields allow for an
- <a class="permalink" href="#O"><code class="Fn">O</code></a>(<var class="Fa">log
- n</var>) implementation of
- <a class="permalink" href="#vm_map_findspace"><code class="Fn" id="vm_map_findspace">vm_map_findspace</code></a>().
- Using <var class="Va">max_free</var>, we can immediately test for a
- sufficiently large free region in an entire subtree. This makes it possible
- to find a first-fit free region of a given size in one pass down the tree,
- so <code class="Fn">O</code>(<var class="Fa">log n</var>) amortized using
- splay trees.</p>
-<p class="Pp" id="vm_map_entry_link">When a free region changes size, we must
- update <var class="Va">adj_free</var> and <var class="Va">max_free</var> in
- the preceding map entry and propagate <var class="Va">max_free</var> up the
- tree. This is handled in
- <a class="permalink" href="#vm_map_entry_link"><code class="Fn">vm_map_entry_link</code></a>()
- and
- <a class="permalink" href="#vm_map_entry_unlink"><code class="Fn" id="vm_map_entry_unlink">vm_map_entry_unlink</code></a>()
- for the cases of inserting and deleting an entry. Note that
- <code class="Fn">vm_map_entry_link</code>() updates both the new entry and
- the previous entry, and that <code class="Fn">vm_map_entry_unlink</code>()
- updates the previous entry. Also note that <var class="Va">max_free</var> is
- not actually propagated up the tree. Instead, that entry is first splayed to
- the root and then the change is made there. This is a common technique in
- splay trees and is also how map entries are linked and unlinked into the
- tree.</p>
-<p class="Pp" id="vm_map_entry_resize_free~2">The
- <a class="permalink" href="#vm_map_entry_resize_free~2"><code class="Fn">vm_map_entry_resize_free</code></a>()
- function updates the free space variables in the given
- <var class="Fa">entry</var> and propagates those values up the tree. This
- function should be called whenever a map entry is resized in-place, that is,
- by modifying its <var class="Va">start</var> or <var class="Va">end</var>
- values. Note that if you change <var class="Va">end</var>, then you should
- resize that entry, but if you change <var class="Va">start</var>, then you
- should resize the previous entry. The map must be locked before calling this
- function, and again, propagating <var class="Va">max_free</var> is performed
- by splaying that entry to the root.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Consider adding a map entry with
- <code class="Fn">vm_map_insert</code>().</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>ret = vm_map_insert(map, object, offset, start, end, prot,
- max_prot, cow);</pre>
-</div>
-<p class="Pp">In this case, no further action is required to maintain
- consistency of the free space variables. The
- <code class="Fn">vm_map_insert</code>() function calls
- <code class="Fn">vm_map_entry_link</code>() which updates both the new entry
- and the previous entry. The same would be true for
- <code class="Fn">vm_map_delete</code>() and for calling
- <code class="Fn">vm_map_entry_link</code>() or
- <code class="Fn">vm_map_entry_unlink</code>() directly.</p>
-<p class="Pp">Now consider resizing an entry in-place without a call to
- <code class="Fn">vm_map_entry_link</code>() or
- <code class="Fn">vm_map_entry_unlink</code>().</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;start = new_start;
-if (entry-&gt;prev != &amp;map-&gt;header)
- vm_map_entry_resize_free(map, entry-&gt;prev);</pre>
-</div>
-<p class="Pp">In this case, resetting <var class="Va">start</var> changes the
- amount of free space following the previous entry, so we use
- <code class="Fn">vm_map_entry_resize_free</code>() to update the previous
- entry.</p>
-<p class="Pp">Finally, suppose we change an entry's <var class="Va">end</var>
- address.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;end = new_end;
-vm_map_entry_resize_free(map, entry);</pre>
-</div>
-<p class="Pp">Here, we call <code class="Fn">vm_map_entry_resize_free</code>()
- on the entry itself.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_findspace(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Daniel D. Sleator</span> and
- <span class="RsA">Robert E. Tarjan</span>, <span class="RsT">Self-Adjusting
- Binary Search Trees</span>, <i class="RsJ">JACM</i>, <span class="RsV">vol.
- 32(3)</span>, <span class="RsP">pp. 652-686</span>, <span class="RsD">July
- 1985</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Splay trees were added to the VM map in <span class="Ux">FreeBSD
- 5.0</span>, and the <code class="Fn">O</code>(<var class="Fa">log n</var>)
- tree-based free space algorithm was added in <span class="Ux">FreeBSD
- 5.3</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The tree-based free space algorithm and this manual page were
- written by <span class="An">Mark W. Krentel</span>
- &lt;<a class="Mt" href="mailto:krentel@dreamscape.com">krentel@dreamscape.com</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 17, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_find.9 3.html b/static/freebsd/man9/vm_map_find.9 3.html
deleted file mode 100644
index 059a93bd..00000000
--- a/static/freebsd/man9/vm_map_find.9 3.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_FIND(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_FIND(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_find</code> &#x2014; <span class="Nd">find
- a free region within a map, and optionally map a vm_object</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_find</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_object_t object</var>, <var class="Fa">vm_ooffset_t
- offset</var>, <var class="Fa">vm_offset_t *addr</var>,
- <var class="Fa">vm_size_t length</var>, <var class="Fa">vm_offset_t
- max_addr</var>, <var class="Fa">int find_space</var>,
- <var class="Fa">vm_prot_t prot</var>, <var class="Fa">vm_prot_t max</var>,
- <var class="Fa">int cow</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_find"><code class="Fn" id="vm_map_find">vm_map_find</code></a>()
- function attempts to find a free region in the target
- <var class="Fa">map</var>, with the given <var class="Fa">length.</var> If a
- free region is found, <code class="Fn">vm_map_find</code>() creates a
- mapping of <var class="Fa">object</var> via a call to
- <a class="Xr">vm_map_insert(9)</a>.</p>
-<p class="Pp">The arguments <var class="Fa">offset</var>,
- <var class="Fa">prot</var>, <var class="Fa">max</var>, and
- <var class="Fa">cow</var> are passed unchanged to
- <a class="Xr">vm_map_insert(9)</a> when creating the mapping, if and only if
- a free region is found.</p>
-<p class="Pp">If <var class="Fa">object</var> is
- non-<code class="Dv">NULL</code>, the reference count on the object must be
- incremented by the caller before calling this function to account for the
- new entry.</p>
-<p class="Pp">If <var class="Fa">max_addr</var> is non-zero, it specifies an
- upper bound on the mapping. The mapping will only succeed if a free region
- can be found that resides entirely below <var class="Fa">max_addr</var>.</p>
-<p class="Pp">The <var class="Fa">find_space</var> argument specifies the
- strategy to use when searching for a free region of the requested length.
- For all values other than <code class="Dv">VMFS_NO_SPACE</code>,
- <a class="Xr">vm_map_findspace(9)</a> is called to locate a free region of
- the requested length with a starting address at or above
- <var class="Fa">*addr</var>. The following strategies are supported:</p>
-<dl class="Bl-tag">
- <dt id="VMFS_NO_SPACE"><a class="permalink" href="#VMFS_NO_SPACE"><code class="Dv">VMFS_NO_SPACE</code></a></dt>
- <dd>The mapping will only succeed if there is a free region of the requested
- length at the given address <var class="Fa">*addr</var>.</dd>
- <dt id="VMFS_ANY_SPACE"><a class="permalink" href="#VMFS_ANY_SPACE"><code class="Dv">VMFS_ANY_SPACE</code></a></dt>
- <dd>The mapping will succeed as long as there is a free region.</dd>
- <dt id="VMFS_SUPER_SPACE"><a class="permalink" href="#VMFS_SUPER_SPACE"><code class="Dv">VMFS_SUPER_SPACE</code></a></dt>
- <dd>The mapping will succeed as long as there is a free region that begins on
- a superpage boundary. If <var class="Fa">object</var> is
- non-<code class="Dv">NULL</code> and is already backed by superpages, then
- the mapping will require a free region that aligns relative to the
- existing superpages rather than one beginning on a superpage
- boundary.</dd>
- <dt id="VMFS_OPTIMAL_SPACE"><a class="permalink" href="#VMFS_OPTIMAL_SPACE"><code class="Dv">VMFS_OPTIMAL_SPACE</code></a></dt>
- <dd>The mapping will succeed as long as there is a free region. However, if
- <var class="Fa">object</var> is non-<code class="Dv">NULL</code> and is
- already backed by superpages, this strategy will attempt to find a free
- region aligned relative to the existing superpages.</dd>
- <dt id="VMFS_ALIGNED_SPACE"><a class="permalink" href="#VMFS_ALIGNED_SPACE"><code class="Dv">VMFS_ALIGNED_SPACE</code></a>(<var class="Fa">n</var>)</dt>
- <dd>The mapping will succeed as long as there is a free region that aligns on
- a 2^<var class="Fa">n</var> boundary.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function acquires a lock on <var class="Fa">map</var> by
- calling <a class="Xr">vm_map_lock(9)</a>, and holds it until the function
- returns.</p>
-<p class="Pp">The search for a free region is defined to be first-fit, from the
- address <var class="Fa">addr</var> onwards.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_find</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if the mapping was successfully
- created. If space could not be found or <var class="Fa">find_space</var> was
- <code class="Dv">VMFS_NO_SPACE</code> and the given address,
- <var class="Fa">addr</var>, was already mapped,
- <code class="Dv">KERN_NO_SPACE</code> will be returned. If the discovered
- range turned out to be bogus, <code class="Dv">KERN_INVALID_ADDRESS</code>
- will be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_findspace(9)</a>, <a class="Xr">vm_map_insert(9)</a>,
- <a class="Xr">vm_map_lock(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 12, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_findspace.9 4.html b/static/freebsd/man9/vm_map_findspace.9 4.html
deleted file mode 100644
index a9452ff0..00000000
--- a/static/freebsd/man9/vm_map_findspace.9 4.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_FINDSPACE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_FINDSPACE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_findspace</code> &#x2014;
- <span class="Nd">find a free region within a map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_findspace</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_size_t
- length</var>, <var class="Fa">vm_offset_t *addr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_findspace"><code class="Fn" id="vm_map_findspace">vm_map_findspace</code></a>()
- function attempts to find a region with sufficient space in the
- <var class="Fa">map</var> for an object of size <var class="Fa">length</var>
- at the address <var class="Fa">addr</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">It is the caller's responsibility to obtain a lock on the
- <var class="Fa">map</var> using <a class="Xr">vm_map_lock(9)</a> before
- calling this function.</p>
-<p class="Pp">This routine may call <a class="Xr">pmap_growkernel(9)</a> to grow
- the kernel's address space, if and only if the mapping is being made within
- the kernel address space, and if insufficient space remains in the
- <var class="Va">kernel_map</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_findspace</code>() function returns
- the value 0 if successful, and <var class="Fa">*addr</var> will contain the
- first virtual address in the found region; otherwise, the value 1 is
- returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap_growkernel(9)</a>, <a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_entry_resize_free(9)</a>,
- <a class="Xr">vm_map_lock(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_inherit.9 4.html b/static/freebsd/man9/vm_map_inherit.9 4.html
deleted file mode 100644
index c4c9b447..00000000
--- a/static/freebsd/man9/vm_map_inherit.9 4.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_INHERIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_INHERIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_inherit</code> &#x2014;
- <span class="Nd">set fork inheritance flags for a range within a
- map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_inherit</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">vm_inherit_t new_inheritance</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_inherit"><code class="Fn" id="vm_map_inherit">vm_map_inherit</code></a>()
- function sets the inheritance flags for the range
- <var class="Fa">start</var> to <var class="Fa">end</var> within the target
- <var class="Fa">map</var> to the value
- <var class="Fa">new_inheritance</var>.</p>
-<p class="Pp">The <var class="Fa">new_inheritance</var> flag must have one of
- the values <code class="Dv">VM_INHERIT_NONE</code>,
- <code class="Dv">VM_INHERIT_COPY</code>, or
- <code class="Dv">VM_INHERIT_SHARE</code>. This affects how the map will be
- shared with child maps when the associated process forks.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_inherit</code>() function obtains a
- lock on the <var class="Fa">map</var> using <a class="Xr">vm_map_lock(9)</a>
- for the duration of the function.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_inherit</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if the inheritance flags could be set.
- Otherwise, if the provided flags were invalid,
- <code class="Dv">KERN_INVALID_ARGUMENT</code> will be returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">fork(2)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_init.9 4.html b/static/freebsd/man9/vm_map_init.9 4.html
deleted file mode 100644
index 146ddb0d..00000000
--- a/static/freebsd/man9/vm_map_init.9 4.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_INIT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_INIT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_init</code> &#x2014;
- <span class="Nd">initialize a vm_map structure for process zero</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_init</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- min</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- max</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_init"><code class="Fn" id="vm_map_init">vm_map_init</code></a>()
- function initializes the system map <var class="Fa">map</var> by setting its
- upper and lower address bounds to <var class="Fa">max</var> and
- <var class="Fa">min</var> respectively.</p>
-<p class="Pp">It also initializes the system map mutex.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This routine is for internal use only. It is called during early
- system initialization.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_insert.9 4.html b/static/freebsd/man9/vm_map_insert.9 4.html
deleted file mode 100644
index b4de9344..00000000
--- a/static/freebsd/man9/vm_map_insert.9 4.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_INSERT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_INSERT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_insert</code> &#x2014;
- <span class="Nd">insert an object into a map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_insert</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_object_t object</var>, <var class="Fa">vm_ooffset_t
- offset</var>, <var class="Fa">vm_offset_t start</var>,
- <var class="Fa">vm_offset_t end</var>, <var class="Fa">vm_prot_t prot</var>,
- <var class="Fa">vm_prot_t max</var>, <var class="Fa">int cow</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_insert"><code class="Fn" id="vm_map_insert">vm_map_insert</code></a>()
- function inserts a mapping for the entire vm_object
- <var class="Fa">object</var> into the target map
- <var class="Fa">map</var>.</p>
-<p class="Pp">The <var class="Fa">offset</var> argument specifies the offset
- into the <var class="Fa">object</var> at which to begin mapping. The
- object's size should match that of the specified address range.</p>
-<p class="Pp">The <var class="Fa">start</var> and <var class="Fa">end</var>
- arguments specify the bounds of the mapped object's window in the address
- space of <var class="Fa">map</var>.</p>
-<p class="Pp">The <var class="Fa">cow</var> argument specifies the flags which
- should be propagated to the new entry, for example, to indicate that this is
- a copy-on-write mapping.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function implicitly creates a new
- <var class="Vt">vm_map_entry</var> by calling the internal function
- <code class="Fn">vm_map_entry_create</code>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_insert</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if the mapping could be made
- successfully.</p>
-<p class="Pp">Otherwise, <code class="Dv">KERN_INVALID_ADDRESS</code> will be
- returned if the start of the range could not be found, or
- <code class="Dv">KERN_NO_SPACE</code> if the range was found to be part of
- an existing entry or if it overlaps the end of the map.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 11, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_lock.9 4.html b/static/freebsd/man9/vm_map_lock.9 4.html
deleted file mode 100644
index b6c4bd95..00000000
--- a/static/freebsd/man9/vm_map_lock.9 4.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_LOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_LOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_lock</code>,
- <code class="Nm">vm_map_unlock</code>,
- <code class="Nm">vm_map_lock_read</code>,
- <code class="Nm">vm_map_unlock_read</code>,
- <code class="Nm">vm_map_trylock</code>,
- <code class="Nm">vm_map_trylock_read</code>,
- <code class="Nm">vm_map_lock_upgrade</code>,
- <code class="Nm">vm_map_lock_downgrade</code> &#x2014;
- <span class="Nd">vm_map locking macros</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_lock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_unlock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_lock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_unlock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_trylock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_trylock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_lock_upgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_lock_downgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_lock"><code class="Fn" id="vm_map_lock">vm_map_lock</code></a>()
- macro obtains an exclusive lock on <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_unlock">The
- <a class="permalink" href="#vm_map_unlock"><code class="Fn">vm_map_unlock</code></a>()
- macro releases an exclusive lock on <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_lock_read">The
- <a class="permalink" href="#vm_map_lock_read"><code class="Fn">vm_map_lock_read</code></a>()
- macro obtains a read-lock on <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_unlock_read">The
- <a class="permalink" href="#vm_map_unlock_read"><code class="Fn">vm_map_unlock_read</code></a>()
- macro releases a read-lock on <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_trylock">The
- <a class="permalink" href="#vm_map_trylock"><code class="Fn">vm_map_trylock</code></a>()
- macro attempts to obtain an exclusive lock on <var class="Fa">map</var>. It
- returns FALSE if the lock cannot be immediately acquired; otherwise return
- TRUE with the lock acquired.</p>
-<p class="Pp" id="vm_map_trylock_read">The
- <a class="permalink" href="#vm_map_trylock_read"><code class="Fn">vm_map_trylock_read</code></a>()
- macro attempts to obtain a read-lock on <var class="Fa">map</var>. It
- returns FALSE if the lock cannot be immediately acquired; otherwise return
- TRUE with the lock acquired.</p>
-<p class="Pp" id="vm_map_lock_upgrade">The
- <a class="permalink" href="#vm_map_lock_upgrade"><code class="Fn">vm_map_lock_upgrade</code></a>()
- macro attempts to atomically upgrade a read-lock on
- <var class="Fa">map</var> to an exclusive lock.</p>
-<p class="Pp" id="vm_map_lock_downgrade">The
- <a class="permalink" href="#vm_map_lock_downgrade"><code class="Fn">vm_map_lock_downgrade</code></a>()
- macro attempts to downgrade an exclusive lock on <var class="Fa">map</var>
- to a read-lock.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Currently, all of the locking macros implement their locks as
- sleep locks.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_lookup.9 3.html b/static/freebsd/man9/vm_map_lookup.9 3.html
deleted file mode 100644
index dcb4ee1e..00000000
--- a/static/freebsd/man9/vm_map_lookup.9 3.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_LOOKUP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_LOOKUP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_lookup</code>,
- <code class="Nm">vm_map_lookup_done</code> &#x2014; <span class="Nd">lookup
- the vm_object backing a given virtual region</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_lookup</code>(<var class="Fa">vm_map_t *var_map</var>,
- <var class="Fa">vm_offset_t vaddr</var>, <var class="Fa">vm_prot_t
- fault_type</var>, <var class="Fa">vm_map_entry_t *out_entry</var>,
- <var class="Fa">vm_object_t *object</var>, <var class="Fa">vm_pindex_t
- *pindex</var>, <var class="Fa">vm_prot_t *out_prot</var>,
- <var class="Fa">boolean_t *wired</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_lookup_done</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t
- entry</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_lookup"><code class="Fn" id="vm_map_lookup">vm_map_lookup</code></a>()
- function attempts to find the <var class="Vt">vm_object</var>, page index
- and protection, for the given virtual address <var class="Fa">vaddr</var>,
- in the map <var class="Fa">var_map</var>, assuming a page fault of the type
- <var class="Fa">fault_type</var> had occurred.</p>
-<p class="Pp" id="vm_map_lookup_done">Return values are guaranteed until
- <a class="permalink" href="#vm_map_lookup_done"><code class="Fn">vm_map_lookup_done</code></a>()
- is called to release the lock.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The function <code class="Fn">vm_map_lookup</code>() acquires a
- read-lock on the map <var class="Fa">*var_map</var>, but does not release
- it. The caller should invoke <code class="Fn">vm_map_lookup_done</code>() in
- order to release this lock.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_lookup</code>() function returns
- <code class="Dv">KERN_SUCCESS</code>, and sets the
- <var class="Fa">*object</var>, <var class="Fa">*pindex</var>,
- <var class="Fa">*out_prot</var>, and <var class="Fa">*out_entry</var>
- arguments appropriately for the hypothetical page fault.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_madvise.9 4.html b/static/freebsd/man9/vm_map_madvise.9 4.html
deleted file mode 100644
index 5484c761..00000000
--- a/static/freebsd/man9/vm_map_madvise.9 4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_MADVISE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_MADVISE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_madvise</code> &#x2014;
- <span class="Nd">apply advice about use of memory to map entries</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_madvise</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">int behav</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_madvise"><code class="Fn" id="vm_map_madvise">vm_map_madvise</code></a>()
- function applies the flags <var class="Fa">behav</var> to the entries within
- <var class="Fa">map</var> between <var class="Fa">start</var> and
- <var class="Fa">end</var>.</p>
-<p class="Pp">Advisories are classified as either those affecting the
- <var class="Vt">vm_map_entry</var> structure, or those affecting the
- underlying objects.</p>
-<p class="Pp" id="vm_map_madvise~2">The
- <a class="permalink" href="#vm_map_madvise~2"><code class="Fn">vm_map_madvise</code></a>()
- function is used by the <a class="Xr">madvise(2)</a> system call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_madvise</code>() function returns 0 if
- successful. If the <var class="Fa">behav</var> argument was not recognised,
- <code class="Dv">KERN_INVALID_ARGUMENT</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">madvise(2)</a>, <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_max.9 4.html b/static/freebsd/man9/vm_map_max.9 4.html
deleted file mode 100644
index 62f9bc47..00000000
--- a/static/freebsd/man9/vm_map_max.9 4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_MAX(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_MAX(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_max</code>,
- <code class="Nm">vm_map_min</code>, <code class="Nm">vm_map_pmap</code>
- &#x2014; <span class="Nd">return map properties</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_offset_t</var>
- <br/>
- <code class="Fn">vm_map_max</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">vm_offset_t</var>
- <br/>
- <code class="Fn">vm_map_min</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-<p class="Pp"><var class="Ft">pmap_t</var>
- <br/>
- <code class="Fn">vm_map_pmap</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The function
- <a class="permalink" href="#vm_map_max"><code class="Fn" id="vm_map_max">vm_map_max</code></a>()
- returns the upper address bound of the map <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_min">The function
- <a class="permalink" href="#vm_map_min"><code class="Fn">vm_map_min</code></a>()
- returns the lower address bound of the map <var class="Fa">map</var>.</p>
-<p class="Pp" id="vm_map_pmap">The function
- <a class="permalink" href="#vm_map_pmap"><code class="Fn">vm_map_pmap</code></a>()
- returns a pointer to the physical map associated with the virtual map
- <var class="Fa">map</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_protect.9 3.html b/static/freebsd/man9/vm_map_protect.9 3.html
deleted file mode 100644
index 843a69ed..00000000
--- a/static/freebsd/man9/vm_map_protect.9 3.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_PROTECT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_PROTECT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_protect</code> &#x2014;
- <span class="Nd">apply protection bits to a virtual memory region</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_protect</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">vm_prot_t new_prot</var>,
- <var class="Fa">vm_prot_t new_maxprot</var>, <var class="Fa">int
- flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_protect"><code class="Fn" id="vm_map_protect">vm_map_protect</code></a>()
- function sets the protection bits and maximum protection bits of the address
- region bounded by <var class="Fa">start</var> and <var class="Fa">end</var>
- within the map <var class="Fa">map</var>.</p>
-<p class="Pp">If the <var class="Fa">flags</var> argument has the
- <code class="Dv">VM_MAP_PROTECT_SET_PROT</code> bit set, then the effective
- protection is set to <var class="Fa">new_prot</var>.</p>
-<p class="Pp">If the <var class="Fa">flags</var> argument has the
- <code class="Dv">VM_MAP_PROTECT_SET_MAXPROT</code> bit set, then the maximum
- protection is set to <var class="Fa">new_maxprot</var>. Protection bits not
- included into <var class="Fa">new_maxprot</var> will be cleared from
- existing entries.</p>
-<p class="Pp">The values specified by <var class="Fa">new_prot</var> and
- <var class="Fa">new_maxprot</var> are not allowed to include any protection
- bits that are not set in existing <var class="Va">max_protection</var> on
- every entry within the range. The operation will fail if this condition is
- violated. For instance, this prevents upgrading a shared mapping of a
- read-only file from read-only to read-write.</p>
-<p class="Pp">The specified range must not contain sub-maps.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The function acquires a lock on the <var class="Fa">map</var> for
- the duration, by calling <a class="Xr">vm_map_lock(9)</a>. Also, any
- in-progress wiring operation on the map affecting the specified range will
- cause <code class="Nm">vm_map_protect</code> to sleep, waiting for
- completion.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<dl class="Bl-tag">
- <dt id="KERN_SUCCESS"><a class="permalink" href="#KERN_SUCCESS"><code class="Dv">KERN_SUCCESS</code></a></dt>
- <dd>The specified protection bits were set successfully.</dd>
- <dt id="KERN_INVALID_ARGUMENT"><a class="permalink" href="#KERN_INVALID_ARGUMENT"><code class="Dv">KERN_INVALID_ARGUMENT</code></a></dt>
- <dd>A sub-map entry was encountered in the range,</dd>
- <dt id="KERN_PROTECTION_FAILURE"><a class="permalink" href="#KERN_PROTECTION_FAILURE"><code class="Dv">KERN_PROTECTION_FAILURE</code></a></dt>
- <dd>The value of <var class="Fa">new_prot</var> or
- <var class="Fa">new_maxprot</var> exceed
- <var class="Va">max_protection</var> for an entry within the range.</dd>
- <dt id="KERN_PROTECTION_FAILURE~2"><a class="permalink" href="#KERN_PROTECTION_FAILURE~2"><code class="Dv">KERN_PROTECTION_FAILURE</code></a></dt>
- <dd>The map does not allow simultaneous setting of write and execute
- permissions, but <var class="Fa">new_prot</var> has both
- <code class="Dv">VM_PROT_WRITE</code> and
- <code class="Dv">VM_PROT_EXECUTE</code> set.</dd>
- <dt id="KERN_RESOURCE_SHORTAGE"><a class="permalink" href="#KERN_RESOURCE_SHORTAGE"><code class="Dv">KERN_RESOURCE_SHORTAGE</code></a></dt>
- <dd>A copy-on-write mapping is transitioned from read-only to read-write, and
- not enough swap space is available to back the copied pages.</dd>
- <dt id="KERN_OUT_OF_BOUNDS"><a class="permalink" href="#KERN_OUT_OF_BOUNDS"><code class="Dv">KERN_OUT_OF_BOUNDS</code></a></dt>
- <dd>Both new protection and new maximum protection updates were requested, but
- the specified <var class="Fa">new_prot</var> is not a subset of
- <var class="Fa">new_maxprot</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 23, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_remove.9 4.html b/static/freebsd/man9/vm_map_remove.9 4.html
deleted file mode 100644
index 16adbad1..00000000
--- a/static/freebsd/man9/vm_map_remove.9 4.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_REMOVE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_REMOVE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_remove</code> &#x2014;
- <span class="Nd">remove a virtual address range from a map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_remove</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- end</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_remove"><code class="Fn" id="vm_map_remove">vm_map_remove</code></a>()
- function removes the given address range bounded by
- <var class="Fa">start</var> and <var class="Fa">end</var> from the target
- <var class="Fa">map</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This is the exported form of <a class="Xr">vm_map_delete(9)</a>
- which may be called by consumers of the VM subsystem.</p>
-<p class="Pp">The function calls <a class="Xr">vm_map_lock(9)</a> to hold a lock
- on <var class="Fa">map</var> for the duration of the function call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_remove</code>() always returns
- <code class="Dv">KERN_SUCCESS</code>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_delete(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_stack.9 3.html b/static/freebsd/man9/vm_map_stack.9 3.html
deleted file mode 100644
index d13eae52..00000000
--- a/static/freebsd/man9/vm_map_stack.9 3.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_STACK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_STACK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_stack</code>,
- <code class="Nm">vm_map_growstack</code> &#x2014; <span class="Nd">manage
- process stacks</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_stack</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t addrbos</var>, <var class="Fa">vm_size_t
- max_ssize</var>, <var class="Fa">vm_prot_t prot</var>,
- <var class="Fa">vm_prot_t max</var>, <var class="Fa">int cow</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_growstack</code>(<var class="Fa" style="white-space: nowrap;">struct
- proc *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- addr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_stack"><code class="Fn" id="vm_map_stack">vm_map_stack</code></a>()
- function maps a process stack for a new process image. The stack is mapped
- <var class="Fa">addrbos</var> in <var class="Fa">map</var>, with a maximum
- size of <var class="Fa">max_ssize</var>. Copy-on-write flags passed in
- <var class="Fa">cow</var> are also applied to the new mapping. Protection
- bits are supplied by <var class="Fa">prot</var> and
- <var class="Fa">max</var>.</p>
-<p class="Pp">It is typically called by <a class="Xr">execve(2)</a>.</p>
-<p class="Pp" id="vm_map_growstack">The
- <a class="permalink" href="#vm_map_growstack"><code class="Fn">vm_map_growstack</code></a>()
- function is responsible for growing a stack for the process
- <var class="Fa">p</var> to the desired address <var class="Fa">addr</var>,
- similar to the legacy <a class="Xr">sbrk(2)</a> call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_stack</code>() function calls
- <a class="Xr">vm_map_insert(9)</a> to create its mappings.</p>
-<p class="Pp">The <code class="Fn">vm_map_stack</code>() and
- <code class="Fn">vm_map_growstack</code>() functions acquire the process
- lock on <var class="Fa">p</var> for the duration of the call.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_stack</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if the mapping was allocated
- successfully.</p>
-<p class="Pp">Otherwise, if mapping the stack would exceed the process's VMEM
- resource limit, or if the specified bottom-of-stack address is out of range
- for the map, or if there is already a mapping at the address which would
- result, or if <var class="Fa">max_ssize</var> could not be accommodated
- within the current mapping, <code class="Dv">KERN_NO_SPACE</code> is
- returned.</p>
-<p class="Pp">Other possible return values for this function are documented in
- <a class="Xr">vm_map_insert(9)</a>.</p>
-<p class="Pp">The <code class="Fn">vm_map_growstack</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if <var class="Fa">addr</var> is
- already mapped, or if the stack was grown successfully.</p>
-<p class="Pp">It also returns <code class="Dv">KERN_SUCCESS</code> if
- <var class="Fa">addr</var> is outside the stack range; this is done in order
- to preserve compatibility with the deprecated <code class="Fn">grow</code>()
- function previously located in the file
- <span class="Pa">vm_machdep.c</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_insert(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 11, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_submap.9 3.html b/static/freebsd/man9/vm_map_submap.9 3.html
deleted file mode 100644
index 96a0aa55..00000000
--- a/static/freebsd/man9/vm_map_submap.9 3.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_SUBMAP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_SUBMAP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_submap</code> &#x2014;
- <span class="Nd">create a subordinate map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_submap</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">vm_map_t submap</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_submap"><code class="Fn" id="vm_map_submap">vm_map_submap</code></a>()
- function marks the range bounded by <var class="Fa">start</var> and
- <var class="Fa">end</var> within the map <var class="Fa">map</var> as being
- handled by a subordinate map <var class="Fa">sub_map</var>.</p>
-<p class="Pp">It is generally called by the kernel memory allocator.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">This function is for internal use only.</p>
-<p class="Pp">Both maps must exist. The range must have been created with
- <a class="Xr">vm_map_find(9)</a> previously.</p>
-<p class="Pp">No other operations may have been performed on this range before
- calling this function. Only the <code class="Fn">vm_fault</code>() operation
- may be performed within this range after calling this function.</p>
-<p class="Pp">To remove a submapping, one must first remove the range from the
- parent <var class="Fa">map</var>, and then destroy the
- <var class="Fa">sub_map</var>. This procedure is not recommended.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_submap</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if successful.</p>
-<p class="Pp">Otherwise, it returns
- <code class="Dv">KERN_INVALID_ARGUMENT</code> if the caller requested
- copy-on-write flags, or if the range specified for the sub-map was out of
- range for the parent map, or if a <code class="Dv">NULL</code> backing
- object was specified.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>, <a class="Xr">vm_map_find(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_sync.9 4.html b/static/freebsd/man9/vm_map_sync.9 4.html
deleted file mode 100644
index 626ccf83..00000000
--- a/static/freebsd/man9/vm_map_sync.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_SYNC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_SYNC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_sync</code> &#x2014; <span class="Nd">push
- dirty pages to their pager</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_sync</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">boolean_t syncio</var>, <var class="Fa">boolean_t
- invalidate</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_sync"><code class="Fn" id="vm_map_sync">vm_map_sync</code></a>()
- function forces any dirty cached pages in the range
- <var class="Fa">start</var> to <var class="Fa">end</var> within the
- <var class="Fa">map</var> to be pushed to their underlying pager.</p>
-<p class="Pp">If <var class="Fa">syncio</var> is TRUE, dirty pages are written
- synchronously.</p>
-<p class="Pp">If <var class="Fa">invalidate</var> is TRUE, any cached pages are
- also freed.</p>
-<p class="Pp">The range provided must be contiguous, it MUST NOT contain holes.
- The range provided MUST NOT contain any sub-map entries.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_sync</code>() function returns
- <code class="Dv">KERN_SUCCESS</code> if successful.</p>
-<p class="Pp">Otherwise, <code class="Dv">KERN_INVALID_ADDRESS</code> will be
- returned if the function encountered a sub-map entry;
- <code class="Dv">KERN_INVALID_ARGUMENT</code> will be returned if the
- function encountered a hole in the region provided, or if an entry could not
- be found for the given start address.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 9, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_map_wire.9 3.html b/static/freebsd/man9/vm_map_wire.9 3.html
deleted file mode 100644
index b98e282f..00000000
--- a/static/freebsd/man9/vm_map_wire.9 3.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_WIRE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_WIRE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_wire</code>,
- <code class="Nm">vm_map_unwire</code> &#x2014; <span class="Nd">manage page
- wiring within a virtual memory map</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_wire</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t
- end</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_map_unwire</code>(<var class="Fa">vm_map_t map</var>,
- <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t
- end</var>, <var class="Fa">int flags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_map_wire"><code class="Fn" id="vm_map_wire">vm_map_wire</code></a>()
- function is responsible for wiring pages in the range between
- <var class="Fa">start</var> and <var class="Fa">end</var> within the map
- <var class="Fa">map</var>. Wired pages are locked into physical memory, and
- may not be paged out as long as their wire count remains above zero.</p>
-<p class="Pp" id="vm_map_unwire">The
- <a class="permalink" href="#vm_map_unwire"><code class="Fn">vm_map_unwire</code></a>()
- function performs the corresponding unwire operation.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument is a bit mask, consisting
- of the following flags:</p>
-<p class="Pp">If the <code class="Dv">VM_MAP_WIRE_USER</code> flag is set, the
- function operates within user address space.</p>
-<p class="Pp">If the <code class="Dv">VM_MAP_WIRE_HOLESOK</code> flag is set, it
- may operate upon an arbitrary range within the address space of
- <var class="Fa">map</var>.</p>
-<p class="Pp">If a contiguous range is desired, callers should explicitly
- express their intent by specifying the
- <code class="Dv">VM_MAP_WIRE_NOHOLES</code> flag.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">Both functions will attempt to acquire a lock on the map using
- <a class="Xr">vm_map_lock(9)</a> and hold it for the duration of the call.
- If they detect <code class="Dv">MAP_ENTRY_IN_TRANSITION</code>, they will
- call <a class="Xr">vm_map_unlock_and_wait(9)</a> until the map becomes
- available again.</p>
-<p class="Pp">The map could have changed during this window as it was held by
- another consumer, therefore consumers of this interface should check for
- this condition using the return values below.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_map_wire</code>() and
- <code class="Fn">vm_map_unwire</code>() functions have identical return
- values. The functions return <code class="Dv">KERN_SUCCESS</code> if all
- pages within the range were [un]wired successfully.</p>
-<p class="Pp">Otherwise, if the specified range was not valid, or if the map
- changed while the <code class="Dv">MAP_ENTRY_IN_TRANSITION</code> flag was
- set, <code class="Dv">KERN_INVALID_ADDRESS</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mlockall(2)</a>, <a class="Xr">munlockall(2)</a>,
- <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Bruce M
- Simpson</span>
- &lt;<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 19, 2003</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_aflag.9 4.html b/static/freebsd/man9/vm_page_aflag.9 4.html
deleted file mode 100644
index 5a1e29a4..00000000
--- a/static/freebsd/man9/vm_page_aflag.9 4.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_AFLAG(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_AFLAG(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_aflag_clear</code>,
- <code class="Nm">vm_page_aflag_set</code>,
- <code class="Nm">vm_page_reference</code> &#x2014; <span class="Nd">change
- page atomic flags</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_aflag_clear</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- bits</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_aflag_set</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">uint8_t
- bits</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_reference</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_aflag_clear"><code class="Fn" id="vm_page_aflag_clear">vm_page_aflag_clear</code></a>()
- atomically clears the specified bits on the page's
- <var class="Va">aflags</var>.</p>
-<p class="Pp" id="vm_page_aflag_set">The
- <a class="permalink" href="#vm_page_aflag_set"><code class="Fn">vm_page_aflag_set</code></a>()
- atomically sets the specified bits on the page's
- <var class="Va">aflags</var>.</p>
-<p class="Pp" id="vm_page_reference">The
- <a class="permalink" href="#vm_page_reference"><code class="Fn">vm_page_reference</code></a>(<var class="Fa">m</var>)
- call is the same as</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>vm_page_aflag_set(m, PGA_REFERENCED);</pre>
-</div>
-<p class="Pp">and is the recommended way to mark the page as referenced from
- third-party kernel modules.</p>
-<p class="Pp">These functions neither block nor require any locks to be held
- around the calls for correctness.</p>
-<p class="Pp">The functions arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">m</var></dt>
- <dd>The page whose <var class="Va">aflags</var> are updated.</dd>
- <dt><var class="Fa">bits</var></dt>
- <dd>The bits that are set or cleared on the page's flags.</dd>
-</dl>
-<p class="Pp">The following <var class="Va">aflags</var> can be set or
- cleared:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">PGA_REFERENCED</var></dt>
- <dd>The bit may be set to indicate that the page has been recently accessed.
- For instance, <a class="Xr">pmap(9)</a> sets this bit to reflect the
- accessed attribute of the page mapping typically updated by processor's
- memory management unit on the page access.</dd>
- <dt><var class="Fa">PGA_WRITEABLE</var></dt>
- <dd>A writeable mapping for the page may exist.</dd>
-</dl>
-<p class="Pp">Both <code class="Dv">PGA_REFERENCED</code> and
- <code class="Dv">PGA_WRITEABLE</code> bits are only valid for the managed
- pages.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 31, 2011</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_alloc.9 4.html b/static/freebsd/man9/vm_page_alloc.9 4.html
deleted file mode 100644
index b9f43502..00000000
--- a/static/freebsd/man9/vm_page_alloc.9 4.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_ALLOC(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_ALLOC(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_alloc</code> &#x2014;
- <span class="Nd">allocate a page of memory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t
- object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t
- pindex</var>, <var class="Fa" style="white-space: nowrap;">int
- req</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_after</code>(<var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int
- req</var>, <var class="Fa">vm_page_t mpred</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_contig</code>(<var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int
- req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t
- low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long
- alignment</var>, <var class="Fa">vm_paddr_t boundary</var>,
- <var class="Fa">vm_memattr_t memattr</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_contig_domain</code>(<var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int
- req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t
- low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long
- alignment</var>, <var class="Fa">vm_paddr_t boundary</var>,
- <var class="Fa">vm_memattr_t memattr</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_domain</code>(<var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int
- domain</var>, <var class="Fa">int req</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_domain_after</code>(<var class="Fa">vm_object_t
- object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int
- domain</var>, <var class="Fa">int req</var>, <var class="Fa">vm_page_t
- mpred</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_noobj</code>(<var class="Fa">int
- req</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_noobj_contig</code>(<var class="Fa">int
- req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t
- low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long
- alignment</var>, <var class="Fa">vm_paddr_t boundary</var>,
- <var class="Fa">vm_memattr_t memattr</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_noobj_contig_domain</code>(<var class="Fa">int
- domain</var>, <var class="Fa">int req</var>, <var class="Fa">u_long
- npages</var>, <var class="Fa">vm_paddr_t low</var>,
- <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long
- alignment</var>, <var class="Fa">vm_paddr_t boundary</var>,
- <var class="Fa">vm_memattr_t memattr</var>);</p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_alloc_noobj_domain</code>(<var class="Fa">int
- domain</var>, <var class="Fa">int req</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_alloc"><code class="Fn" id="vm_page_alloc">vm_page_alloc</code></a>()
- family of functions allocate one or more pages of physical memory. Most
- kernel code should not call these functions directly but should instead use
- a kernel memory allocator such as <a class="Xr">malloc(9)</a> or
- <a class="Xr">uma(9)</a>, or should use a higher-level interface to the page
- cache, such as <a class="Xr">vm_page_grab(9)</a>.</p>
-<p class="Pp">All of the functions take a <var class="Fa">req</var> parameter
- which encodes the allocation priority and optional modifier flags, described
- below. The functions whose names do not include &#x201C;noobj&#x201D;
- additionally insert the pages starting at index <var class="Fa">pindex</var>
- in the VM object <var class="Fa">object</var>. The object must be
- write-locked and not have a page already resident at the specified index.
- The functions whose names include &#x201C;domain&#x201D; support NUMA-aware
- allocation by returning pages from the <a class="Xr">numa(4)</a> domain
- specified by <var class="Fa">domain</var>.</p>
-<p class="Pp" id="vm_page_alloc_after">The
- <a class="permalink" href="#vm_page_alloc_after"><code class="Fn">vm_page_alloc_after</code></a>()
- and
- <a class="permalink" href="#vm_page_alloc_domain_after"><code class="Fn" id="vm_page_alloc_domain_after">vm_page_alloc_domain_after</code></a>()
- functions behave identically to <code class="Fn">vm_page_alloc</code>() and
- <a class="permalink" href="#vm_page_alloc_domain"><code class="Fn" id="vm_page_alloc_domain">vm_page_alloc_domain</code></a>(),
- respectively, except that they take an additional parameter
- <var class="Fa">mpred</var> which must be the page resident in
- <var class="Fa">object</var> with largest index smaller than
- <var class="Fa">pindex</var>, or <code class="Dv">NULL</code> if no such
- page exists. These functions exist to optimize the common case of loops that
- allocate multiple pages at successive indices within an object.</p>
-<p class="Pp" id="vm_page_alloc_contig">The
- <a class="permalink" href="#vm_page_alloc_contig"><code class="Fn">vm_page_alloc_contig</code></a>()
- and
- <a class="permalink" href="#vm_page_alloc_noobj_contig"><code class="Fn" id="vm_page_alloc_noobj_contig">vm_page_alloc_noobj_contig</code></a>()
- functions and their NUMA-aware variants allocate a physically contiguous run
- of <var class="Fa">npages</var> pages which satisfies the specified
- constraints. The <var class="Fa">low</var> and <var class="Fa">high</var>
- parameters specify a physical address range from which the run is to be
- allocated. The <var class="Fa">alignment</var> parameter specifies the
- requested alignment of the first page in the run and must be a power of two.
- If the <var class="Fa">boundary</var> parameter is non-zero, the pages
- constituting the run will not cross a physical address that is a multiple of
- the parameter value, which must be a power of two. If
- <var class="Fa">memattr</var> is not equal to
- <code class="Dv">VM_MEMATTR_DEFAULT</code>, then mappings of the returned
- pages created by, e.g., <a class="Xr">pmap_enter(9)</a> or
- <a class="Xr">pmap_qenter(9)</a>, will carry the machine-dependent encoding
- of the memory attribute. Additionally, the direct mapping of the page, if
- any, will be updated to reflect the requested memory attribute.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="REQUEST_FLAGS"><a class="permalink" href="#REQUEST_FLAGS">REQUEST
- FLAGS</a></h1>
-<p class="Pp">All page allocator functions accept a <var class="Fa">req</var>
- parameter that governs certain aspects of the function's behavior.</p>
-<p class="Pp">The <code class="Dv">VM_ALLOC_WAITOK</code>,
- <code class="Dv">VM_ALLOC_WAITFAIL</code>, and
- <code class="Dv">VM_ALLOC_NOWAIT</code> flags specify the behavior of the
- allocator if free pages could not be immediately allocated. The
- <code class="Dv">VM_ALLOC_WAITOK</code> flag can only be used with the
- &#x201C;noobj&#x201D; variants. If <code class="Dv">VM_ALLOC_NOWAIT</code>
- is specified, then the allocator gives up and returns
- <code class="Dv">NULL</code>. <code class="Dv">VM_ALLOC_NOWAIT</code> is
- specified implicitly if none of the flags are present in the request. If
- either <code class="Dv">VM_ALLOC_WAITOK</code> or
- <code class="Dv">VM_ALLOC_WAITFAIL</code> is specified, the allocator will
- put the calling thread to sleep until sufficient free pages become
- available. At this point, if <code class="Dv">VM_ALLOC_WAITFAIL</code> is
- specified the allocator will return <code class="Dv">NULL</code>, and if
- <code class="Dv">VM_ALLOC_WAITOK</code> is specified the allocator will
- retry the allocation. After a failed
- <code class="Dv">VM_ALLOC_WAITFAIL</code> allocation returns, the VM object,
- if any, will have been unlocked while the thread was sleeping. In this case
- the VM object write lock will be re-acquired before the function call
- returns.</p>
-<p class="Pp"><var class="Fa">req</var> also encodes the allocation request
- priority. By default the page(s) are allocated with no special treatment. If
- the number of available free pages is below a certain watermark, the
- allocation will fail or the allocating thread will sleep, depending on the
- specified wait flag. The watermark is computed at boot time and corresponds
- to a small (less than one percent) fraction of the system's total physical
- memory. To allocate memory more aggressively, one of following flags may be
- specified.</p>
-<dl class="Bl-tag">
- <dt id="VM_ALLOC_SYSTEM"><a class="permalink" href="#VM_ALLOC_SYSTEM"><code class="Dv">VM_ALLOC_SYSTEM</code></a></dt>
- <dd>The page can be allocated if the free page count is above the interrupt
- reserved water mark. This flag should be used only when the system really
- needs the page.</dd>
- <dt id="VM_ALLOC_INTERRUPT"><a class="permalink" href="#VM_ALLOC_INTERRUPT"><code class="Dv">VM_ALLOC_INTERRUPT</code></a></dt>
- <dd>The allocation will fail only if zero free pages are available. This flag
- should be used only if the consequences of an allocation failure are worse
- than leaving the system without free memory. For example, this flag is
- used when allocating kernel page table pages, where allocation failures
- trigger a kernel panic.</dd>
-</dl>
-<p class="Pp">The following optional flags can further modify allocator
- behavior:</p>
-<dl class="Bl-tag">
- <dt id="VM_ALLOC_SBUSY"><a class="permalink" href="#VM_ALLOC_SBUSY"><code class="Dv">VM_ALLOC_SBUSY</code></a></dt>
- <dd>The returned page will be shared-busy. This flag may only be specified
- when allocating pages in a VM object.</dd>
- <dt id="VM_ALLOC_NOBUSY"><a class="permalink" href="#VM_ALLOC_NOBUSY"><code class="Dv">VM_ALLOC_NOBUSY</code></a></dt>
- <dd>The returned page will not be busy. This flag is implicit when allocating
- pages without a VM object. When allocating pages in a VM object, and
- neither <code class="Dv">VM_ALLOC_SBUSY</code> nor
- <code class="Dv">VM_ALLOC_NOBUSY</code> are specified, the returned pages
- will be exclusively busied.</dd>
- <dt id="VM_ALLOC_NODUMP"><a class="permalink" href="#VM_ALLOC_NODUMP"><code class="Dv">VM_ALLOC_NODUMP</code></a></dt>
- <dd>The returned page will not be included in any kernel core dumps regardless
- of whether or not it is mapped in to KVA.</dd>
- <dt id="VM_ALLOC_WIRED"><a class="permalink" href="#VM_ALLOC_WIRED"><code class="Dv">VM_ALLOC_WIRED</code></a></dt>
- <dd>The returned page will be wired.</dd>
- <dt id="VM_ALLOC_ZERO"><a class="permalink" href="#VM_ALLOC_ZERO"><code class="Dv">VM_ALLOC_ZERO</code></a></dt>
- <dd>If this flag is specified, the &#x201C;noobj&#x201D; variants will return
- zeroed pages. The other allocator interfaces ignore this flag.</dd>
- <dt id="VM_ALLOC_NORECLAIM"><a class="permalink" href="#VM_ALLOC_NORECLAIM"><code class="Dv">VM_ALLOC_NORECLAIM</code></a></dt>
- <dd>If this flag is specified and the request can not be immediately
- satisfied, the allocator will not attempt to break superpage reservations
- to satisfy the allocation. This may be useful when the overhead of
- scanning the reservation queue outweighs the cost of a failed allocation.
- This flag may be used only with the &#x201C;contig&#x201D; variants, and
- must not be specified in combination with
- <code class="Dv">VM_ALLOC_WAITOK</code>.</dd>
- <dt id="VM_ALLOC_COUNT(n)"><a class="permalink" href="#VM_ALLOC_COUNT(n)"><code class="Dv">VM_ALLOC_COUNT(n)</code></a></dt>
- <dd>Hint that at least <var class="Fa">n</var> pages will be allocated by the
- caller in the near future. <var class="Fa">n</var> must be no larger than
- 65535. If the system is short of free pages, this hint may cause the
- kernel to reclaim memory more aggressively than it would otherwise.</dd>
- <dt id="VM_ALLOC_NOFREE"><a class="permalink" href="#VM_ALLOC_NOFREE"><code class="Dv">VM_ALLOC_NOFREE</code></a></dt>
- <dd>The caller asserts that the returned page will never be released. If this
- flag is specified, the allocator will try to fetch a page from a special
- per-domain arena in order to curb long-term physical memory
- fragmentation.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the allocation was successful, a pointer to the
- <var class="Vt">struct vm_page</var> corresponding to the allocated page is
- returned. If the allocation request specified multiple pages, the returned
- pointer points to an array of <var class="Vt">struct vm_page</var>
- constituting the run. Upon failure, <code class="Dv">NULL</code> is
- returned. Regardless of whether the allocation succeeds or fails, the VM
- object <var class="Fa">object</var> will be write-locked upon return.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">malloc(9)</a>,
- <a class="Xr">uma(9)</a>, <a class="Xr">vm_page_grab(9)</a>,
- <a class="Xr">vm_page_sbusy(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 4, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_bits.9 4.html b/static/freebsd/man9/vm_page_bits.9 4.html
deleted file mode 100644
index 9952bb8c..00000000
--- a/static/freebsd/man9/vm_page_bits.9 4.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_BITS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_BITS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_bits</code>,
- <code class="Nm">vm_page_set_validclean</code>,
- <code class="Nm">vm_page_clear_dirty</code>,
- <code class="Nm">vm_page_set_invalid</code>,
- <code class="Nm">vm_page_zero_invalid</code>,
- <code class="Nm">vm_page_is_valid</code>,
- <code class="Nm">vm_page_test_dirty</code>,
- <code class="Nm">vm_page_dirty</code>,
- <code class="Nm">vm_page_undirty</code> &#x2014; <span class="Nd">manage
- page clean and dirty bits</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_bits</code>(<var class="Fa" style="white-space: nowrap;">int
- base</var>, <var class="Fa" style="white-space: nowrap;">int
- size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_set_validclean</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_clear_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_set_invalid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_zero_invalid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">boolean_t
- setvalid</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_is_valid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>,
- <var class="Fa" style="white-space: nowrap;">int size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_test_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_undirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><a class="permalink" href="#vm_page_bits"><code class="Fn" id="vm_page_bits">vm_page_bits</code></a>()
- calculates the bits representing the <code class="Dv">DEV_BSIZE</code> range
- of bytes between <var class="Fa">base</var> and <var class="Fa">size</var>.
- The byte range is expected to be within a single page, and if
- <var class="Fa">size</var> is zero, no bits will be set.</p>
-<p class="Pp" id="vm_page_set_validclean"><a class="permalink" href="#vm_page_set_validclean"><code class="Fn">vm_page_set_validclean</code></a>()
- flags the byte range between <var class="Fa">base</var> and
- <var class="Fa">size</var> as valid and clean. The range is expected to be
- <code class="Dv">DEV_BSIZE</code> aligned and no larger than
- <code class="Dv">PAGE_SIZE</code>. If it is not properly aligned, any
- unaligned chunks of the <code class="Dv">DEV_BSIZE</code> blocks at the
- beginning and end of the range will be zeroed.</p>
-<p class="Pp">If <var class="Fa">base</var> is zero and
- <var class="Fa">size</var> is one page, the modified bit in the page map is
- cleared; as well, the <code class="Dv">VPO_NOSYNC</code> flag is
- cleared.</p>
-<p class="Pp" id="vm_page_clear_dirty"><a class="permalink" href="#vm_page_clear_dirty"><code class="Fn">vm_page_clear_dirty</code></a>()
- clears the dirty bits within a page in the range between
- <var class="Fa">base</var> and <var class="Fa">size</var>. The bits
- representing the range are calculated by calling
- <code class="Fn">vm_page_bits</code>().</p>
-<p class="Pp" id="vm_page_set_invalid"><a class="permalink" href="#vm_page_set_invalid"><code class="Fn">vm_page_set_invalid</code></a>()
- clears the bits in both the valid and dirty flags representing the
- <code class="Dv">DEV_BSIZE</code> blocks between <var class="Fa">base</var>
- and <var class="Fa">size</var> in the page. The bits are calculated by
- calling <code class="Fn">vm_page_bits</code>(). As well as clearing the bits
- within the page, the generation number within the object holding the page is
- incremented.</p>
-<p class="Pp" id="vm_page_zero_invalid"><a class="permalink" href="#vm_page_zero_invalid"><code class="Fn">vm_page_zero_invalid</code></a>()
- zeroes all of the blocks within the page that are currently flagged as
- invalid. If <var class="Fa">setvalid</var> is <code class="Dv">TRUE</code>,
- all of the valid bits within the page are set.</p>
-<p class="Pp">In some cases, such as NFS, the valid bits cannot be set in order
- to maintain cache consistency.</p>
-<p class="Pp" id="vm_page_is_valid"><a class="permalink" href="#vm_page_is_valid"><code class="Fn">vm_page_is_valid</code></a>()
- checks to determine if the all of the <code class="Dv">DEV_BSIZE</code>
- blocks between <var class="Fa">base</var> and <var class="Fa">size</var> of
- the page are valid. If <var class="Fa">size</var> is zero and the page is
- entirely invalid <code class="Fn">vm_page_is_valid</code>() will return
- <code class="Dv">TRUE</code>, in all other cases a size of zero will return
- <code class="Dv">FALSE</code>.</p>
-<p class="Pp" id="vm_page_test_dirty"><a class="permalink" href="#vm_page_test_dirty"><code class="Fn">vm_page_test_dirty</code></a>()
- checks if a page has been modified via any of its physical maps, and if so,
- flags the entire page as dirty. <code class="Fn">vm_page_dirty</code>() is
- called to modify the dirty bits.</p>
-<p class="Pp" id="vm_page_dirty"><a class="permalink" href="#vm_page_dirty"><code class="Fn">vm_page_dirty</code></a>()
- flags the entire page as dirty. It is expected that the page is not
- currently on the cache queue.</p>
-<p class="Pp" id="vm_page_undirty"><a class="permalink" href="#vm_page_undirty"><code class="Fn">vm_page_undirty</code></a>()
- clears all of the dirty bits in a page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1>
-<p class="Pp">None of these functions are allowed to block.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">December 1, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_busy.9 4.html b/static/freebsd/man9/vm_page_busy.9 4.html
deleted file mode 100644
index cd48c618..00000000
--- a/static/freebsd/man9/vm_page_busy.9 4.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_BUSY(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_BUSY(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_busied</code>,
- <code class="Nm">vm_page_busy_downgrade</code>,
- <code class="Nm">vm_page_busy_sleep</code>,
- <code class="Nm">vm_page_sbusied</code>,
- <code class="Nm">vm_page_sunbusy</code>,
- <code class="Nm">vm_page_trysbusy</code>,
- <code class="Nm">vm_page_tryxbusy</code>,
- <code class="Nm">vm_page_xbusied</code>,
- <code class="Nm">vm_page_xunbusy</code>,
- <code class="Nm">vm_page_assert_sbusied</code>,
- <code class="Nm">vm_page_assert_unbusied</code>,
- <code class="Nm">vm_page_assert_xbusied</code> &#x2014;
- <span class="Nd">protect page identity changes and page content
- references</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_busied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_busy_downgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">vm_page_busy_sleep</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">const char *msg</var>,
- <var class="Fa" style="white-space: nowrap;">int allocflags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_sbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_sunbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_trysbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_tryxbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_xbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_xunbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp">
- <br/>
- <code class="Cd">options INVARIANTS</code>
- <br/>
- <code class="Cd">options INVARIANT_SUPPORT</code>
- <br/>
- <var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_assert_sbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_assert_unbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_assert_xbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Page identity is usually protected by higher level locks like
- vm_object locks and vm page locks. However, sometimes it is not possible to
- hold such locks for the time necessary to complete the identity change. In
- such case the page can be exclusively busied by a thread which needs to own
- the identity for a certain amount of time.</p>
-<p class="Pp">In other situations, threads do not need to change the identity of
- the page but they want to prevent other threads from changing the identity
- themselves. For example, when a thread wants to access or update page
- contents without a lock held the page is shared busied.</p>
-<p class="Pp">Before busying a page the vm_object lock must be held. The same
- rule applies when a page is unbusied. This makes the vm_object lock a real
- busy interlock.</p>
-<p class="Pp" id="vm_page_busied">The
- <a class="permalink" href="#vm_page_busied"><code class="Fn">vm_page_busied</code></a>()
- function returns non-zero if the current thread busied
- <var class="Fa">m</var> in either exclusive or shared mode. Returns zero
- otherwise.</p>
-<p class="Pp" id="vm_page_busy_downgrade">The
- <a class="permalink" href="#vm_page_busy_downgrade"><code class="Fn">vm_page_busy_downgrade</code></a>()
- function must be used to downgrade <var class="Fa">m</var> from an exclusive
- busy state to a shared busy state.</p>
-<p class="Pp" id="vm_page_busy_sleep">The
- <a class="permalink" href="#vm_page_busy_sleep"><code class="Fn">vm_page_busy_sleep</code></a>()
- checks the busy state of the page <var class="Fa">m</var> and puts the
- invoking thread to sleep if the page is busy. The VM object for the page
- must be locked. The <var class="Fa">allocflags</var> parameter must be
- either <code class="Dv">0</code>, in which case the function will sleep if
- the page is busied, or <code class="Dv">VM_ALLOC_IGN_SBUSY</code>, in which
- case the function will sleep only if the page is exclusively busied. A
- return value of true indicates that the invoking thread was put to sleep and
- that the object was unlocked. A return value of false indicates that the
- invoking thread did not sleep and the object remains locked. The parameter
- <var class="Fa">msg</var> is a string describing the sleep condition for
- userland tools.</p>
-<p class="Pp" id="vm_page_busied~2">The
- <a class="permalink" href="#vm_page_busied~2"><code class="Fn">vm_page_busied</code></a>()
- function returns non-zero if the current thread busied
- <var class="Fa">m</var> in shared mode. Returns zero otherwise.</p>
-<p class="Pp" id="vm_page_sunbusy">The
- <a class="permalink" href="#vm_page_sunbusy"><code class="Fn">vm_page_sunbusy</code></a>()
- function shared unbusies <var class="Fa">m</var>.</p>
-<p class="Pp" id="vm_page_trysbusy">The
- <a class="permalink" href="#vm_page_trysbusy"><code class="Fn">vm_page_trysbusy</code></a>()
- attempts to shared busy <var class="Fa">m</var>. If the operation cannot
- immediately succeed <code class="Fn">vm_page_trysbusy</code>() returns 0,
- otherwise a non-zero value is returned.</p>
-<p class="Pp" id="vm_page_tryxbusy">The
- <a class="permalink" href="#vm_page_tryxbusy"><code class="Fn">vm_page_tryxbusy</code></a>()
- attempts to exclusive busy <var class="Fa">m</var>. If the operation cannot
- immediately succeed <code class="Fn">vm_page_tryxbusy</code>() returns 0,
- otherwise a non-zero value is returned.</p>
-<p class="Pp" id="vm_page_xbusied">The
- <a class="permalink" href="#vm_page_xbusied"><code class="Fn">vm_page_xbusied</code></a>()
- function returns non-zero if the current thread busied
- <var class="Fa">m</var> in exclusive mode. Returns zero otherwise.</p>
-<p class="Pp" id="vm_page_xunbusy">The
- <a class="permalink" href="#vm_page_xunbusy"><code class="Fn">vm_page_xunbusy</code></a>()
- function exclusive unbusies <var class="Fa">m</var>. Assertions on the busy
- state allow kernels compiled with <code class="Cd">options INVARIANTS</code>
- and <code class="Cd">options INVARIANT_SUPPORT</code> to panic if they are
- not respected.</p>
-<p class="Pp" id="vm_page_assert_sbusied">The
- <a class="permalink" href="#vm_page_assert_sbusied"><code class="Fn">vm_page_assert_sbusied</code></a>()
- function panics if <var class="Fa">m</var> is not shared busied.</p>
-<p class="Pp" id="vm_page_assert_unbusied">The
- <a class="permalink" href="#vm_page_assert_unbusied"><code class="Fn">vm_page_assert_unbusied</code></a>()
- function panics if <var class="Fa">m</var> is not unbusied.</p>
-<p class="Pp" id="vm_page_assert_xbusied">The
- <a class="permalink" href="#vm_page_assert_xbusied"><code class="Fn">vm_page_assert_xbusied</code></a>()
- function panics if <var class="Fa">m</var> is not exclusive busied.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_page_aflag(9)</a>,
- <a class="Xr">vm_page_alloc(9)</a>, <a class="Xr">vm_page_deactivate(9)</a>,
- <a class="Xr">vm_page_free(9)</a>, <a class="Xr">vm_page_grab(9)</a>,
- <a class="Xr">vm_page_insert(9)</a>, <a class="Xr">vm_page_lookup(9)</a>,
- <a class="Xr">vm_page_rename(9)</a>, <a class="Xr">VOP_GETPAGES(9)</a></p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">November 11, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_deactivate.9 4.html b/static/freebsd/man9/vm_page_deactivate.9 4.html
deleted file mode 100644
index bc9777b4..00000000
--- a/static/freebsd/man9/vm_page_deactivate.9 4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_DEACTIVATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_DEACTIVATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_deactivate</code> &#x2014;
- <span class="Nd">deactivate a page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_deactivate</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_deactivate"><code class="Fn" id="vm_page_deactivate">vm_page_deactivate</code></a>()
- function moves the given page to the inactive queue as long as it is
- unmanaged and is not wired.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_page_wire(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_dontneed.9 4.html b/static/freebsd/man9/vm_page_dontneed.9 4.html
deleted file mode 100644
index 8808a94b..00000000
--- a/static/freebsd/man9/vm_page_dontneed.9 4.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_DONTNEED(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_DONTNEED(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_dontneed</code> &#x2014;
- <span class="Nd">indicate that a page is not needed anymore</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_dontneed</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_dontneed"><code class="Fn" id="vm_page_dontneed">vm_page_dontneed</code></a>()
- function advises the VM system that the given page is no longer required. If
- the page is already in the inactive queue or in the cache queue, this
- function does nothing; otherwise the page is deactivated.</p>
-<p class="Pp" id="vm_page_dontneed~2">Note that
- <a class="permalink" href="#vm_page_dontneed~2"><code class="Fn">vm_page_dontneed</code></a>()
- does not necessarily deactivate a page, but instead implements an algorithm
- that attempts to prevent small objects from having their pages reused too
- quickly, and large objects from flushing smaller ones from the queues as
- their pages are released.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_page_deactivate(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 30, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_free.9 3.html b/static/freebsd/man9/vm_page_free.9 3.html
deleted file mode 100644
index 08a8c68d..00000000
--- a/static/freebsd/man9/vm_page_free.9 3.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_FREE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_FREE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_free</code>,
- <code class="Nm">vm_page_free_toq</code>,
- <code class="Nm">vm_page_free_zero</code>,
- <code class="Nm">vm_page_try_to_free</code> &#x2014; <span class="Nd">free a
- page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_free</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_free_toq</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_free_zero</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vm_page_try_to_free</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_free_toq"><code class="Fn" id="vm_page_free_toq">vm_page_free_toq</code></a>()
- function moves a page into the free queue, and disassociates it from its
- object. If the page is held, wired, already free, or its busy count is not
- zero, the system will panic. If the <code class="Dv">PG_ZERO</code> flag is
- set on the page, it is placed at the end of the free queue; otherwise, it is
- placed at the front.</p>
-<p class="Pp">If the page's object is of type <code class="Dv">OBJT_VNODE</code>
- and it is the last page associated with the object, the underlying vnode may
- be freed.</p>
-<p class="Pp" id="vm_page_free">The
- <a class="permalink" href="#vm_page_free"><code class="Fn">vm_page_free</code></a>()
- and
- <a class="permalink" href="#vm_page_free_zero"><code class="Fn" id="vm_page_free_zero">vm_page_free_zero</code></a>()
- functions both call <code class="Fn">vm_page_free_toq</code>() to actually
- free the page, but <code class="Fn">vm_page_free_zero</code>() sets the
- <code class="Dv">PG_ZERO</code> flag and
- <code class="Fn">vm_page_free</code>() clears the
- <code class="Dv">PG_ZERO</code> flag prior to the call to
- <code class="Fn">vm_page_free_toq</code>().</p>
-<p class="Pp" id="vm_page_try_to_free">The
- <a class="permalink" href="#vm_page_try_to_free"><code class="Fn">vm_page_try_to_free</code></a>()
- function verifies that the page is not held, wired, busy or dirty, and if
- so, marks the page as busy, drops any protection that may be set on the
- page, and frees it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vm_page_try_to_free</code>() returns 1 if it is
- able to free the page; otherwise, 0 is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_page_busy(9)</a>,
- <a class="Xr">vm_page_hold(9)</a>, <a class="Xr">vm_page_wire(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 24, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_grab.9 4.html b/static/freebsd/man9/vm_page_grab.9 4.html
deleted file mode 100644
index 7073418e..00000000
--- a/static/freebsd/man9/vm_page_grab.9 4.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_GRAB(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_GRAB(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_grab</code> &#x2014;
- <span class="Nd">returns a page from an object</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_grab</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t
- object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t
- pindex</var>, <var class="Fa" style="white-space: nowrap;">int
- allocflags</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_grab"><code class="Fn" id="vm_page_grab">vm_page_grab</code></a>()
- function returns the page at <var class="Fa">pindex</var> from the given
- object. If the page exists and is busy,
- <code class="Fn">vm_page_grab</code>() will sleep while waiting for it. If
- the page does not exist, it is allocated. The function sleeps until the
- allocation request can be satisfied.</p>
-<p class="Pp" id="vm_page_grab~2">The function requires the
- <var class="Fa">object</var> to be locked on entry, and returns with the
- object locked. If the
- <a class="permalink" href="#vm_page_grab~2"><code class="Fn">vm_page_grab</code></a>()
- function sleeps for any reason, the object lock is temporary dropped.</p>
-<p class="Pp" id="vm_page_grab~3">The
- <a class="permalink" href="#vm_page_grab~3"><code class="Fn">vm_page_grab</code></a>()
- supports all of the flags supported by <a class="Xr">vm_page_alloc(9)</a>.
- In addition, <code class="Fn">vm_page_grab</code>() supports the following
- flags:</p>
-<dl class="Bl-tag">
- <dt id="VM_ALLOC_IGN_SBUSY"><a class="permalink" href="#VM_ALLOC_IGN_SBUSY"><code class="Dv">VM_ALLOC_IGN_SBUSY</code></a></dt>
- <dd>When waiting for the busy state of the existing page to drain, only test
- for exclusive busy; ignore the shared busy counter.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vm_page_grab</code>() always returns the
- page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_page_alloc(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 23, 2013</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_insert.9 4.html b/static/freebsd/man9/vm_page_insert.9 4.html
deleted file mode 100644
index e81844d7..00000000
--- a/static/freebsd/man9/vm_page_insert.9 4.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_INSERT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_INSERT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_insert</code>,
- <code class="Nm">vm_page_remove</code> &#x2014; <span class="Nd">add/remove
- page from an object</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_insert</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">vm_object_t
- object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t
- pindex</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_remove</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_insert"><code class="Fn" id="vm_page_insert">vm_page_insert</code></a>()
- function adds a page to the given object at the given index. The page is
- added to both the VM page hash table and to the object's list of pages, but
- the hardware page tables are not updated. In the case of a user page, it
- will be faulted in when it is accessed. If the page is a kernel page, the
- caller is expected to handle adding the page to the kernel's pmap.</p>
-<p class="Pp">If <code class="Dv">PG_WRITEABLE</code> is set in the page's
- flags, <code class="Dv">OBJ_WRITEABLE</code> and
- <code class="Dv">OBJ_MIGHTBEDIRTY</code> are set in the object's flags.</p>
-<p class="Pp" id="vm_page_remove">The
- <a class="permalink" href="#vm_page_remove"><code class="Fn">vm_page_remove</code></a>()
- function removes the given page from its object, and from the VM page hash
- table. The page must be busy prior to this call, or the system will panic.
- The pmap entry for the page is not removed by this function.</p>
-<p class="Pp" id="vm_page_insert~2">The arguments to
- <a class="permalink" href="#vm_page_insert~2"><code class="Fn">vm_page_insert</code></a>()
- are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">m</var></dt>
- <dd>The page to add to the object.</dd>
- <dt><var class="Fa">object</var></dt>
- <dd>The object the page should be added to.</dd>
- <dt><var class="Fa">pindex</var></dt>
- <dd>The index into the object the page should be at.</dd>
-</dl>
-<p class="Pp" id="vm_page_remove~2">The arguments to
- <a class="permalink" href="#vm_page_remove~2"><code class="Fn">vm_page_remove</code></a>()
- are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">m</var></dt>
- <dd>The page to remove.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The index of a page in a VM object is the byte index into the same
- object truncated to a page boundary. For example, if the page size is 4096
- bytes, and the address in the object is 81944, the page index is 20.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 17, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_lookup.9 4.html b/static/freebsd/man9/vm_page_lookup.9 4.html
deleted file mode 100644
index 2344940e..00000000
--- a/static/freebsd/man9/vm_page_lookup.9 4.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_LOOKUP(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_LOOKUP(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_lookup</code> &#x2014;
- <span class="Nd">lookup a vm page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vm_page_t</var>
- <br/>
- <code class="Fn">vm_page_lookup</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t
- object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t
- pindex</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_lookup"><code class="Fn" id="vm_page_lookup">vm_page_lookup</code></a>()
- function searches for a VM page given its VM object and index. If the page
- is not found, <code class="Dv">NULL</code> is returned. Its arguments
- are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">object</var></dt>
- <dd>The VM object to search on.</dd>
- <dt><var class="Fa">pindex</var></dt>
- <dd>The page index to search on.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">A <var class="Vt">vm_page_t</var> is returned if successful;
- otherwise, <code class="Dv">NULL</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 13, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_rename.9 4.html b/static/freebsd/man9/vm_page_rename.9 4.html
deleted file mode 100644
index 92f57ee4..00000000
--- a/static/freebsd/man9/vm_page_rename.9 4.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_RENAME(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_RENAME(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_rename</code> &#x2014;
- <span class="Nd">move a page</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_rename</code>(<var class="Fa">vm_page_t m</var>,
- <var class="Fa">vm_object_t new_object</var>, <var class="Fa">vm_pindex_t
- new_pindex</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_rename"><code class="Fn" id="vm_page_rename">vm_page_rename</code></a>()
- function removes a page from one object, and adds it to another at the given
- page index. The page is added to the given object, and is removed from the
- object that is currently associated with. If the page is currently on the
- cache queue it will be deactivated unless it is wired or unmanaged, in which
- case the deactivation will fail. The entire page is marked as dirty after
- the move.</p>
-<p class="Pp" id="vm_page_rename~2">The arguments to
- <a class="permalink" href="#vm_page_rename~2"><code class="Fn">vm_page_rename</code></a>()
- are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">m</var></dt>
- <dd>The page to move.</dd>
- <dt><var class="Fa">new_object</var></dt>
- <dd>The object the page should be inserted into.</dd>
- <dt><var class="Fa">new_pindex</var></dt>
- <dd>The page index into <var class="Fa">new_object</var> at which the new page
- should be inserted.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 17, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_page_wire.9 4.html b/static/freebsd/man9/vm_page_wire.9 4.html
deleted file mode 100644
index b3a3c5dc..00000000
--- a/static/freebsd/man9/vm_page_wire.9 4.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_PAGE_WIRE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_PAGE_WIRE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_page_wire</code>,
- <code class="Nm">vm_page_unwire</code>,
- <code class="Nm">vm_page_unwire_noq</code> &#x2014; <span class="Nd">wire
- and unwire pages</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_wire</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">vm_page_wire_mapped</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_page_unwire</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>, <var class="Fa" style="white-space: nowrap;">int queue</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">vm_page_unwire_noq</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t
- m</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_page_wire"><code class="Fn" id="vm_page_wire">vm_page_wire</code></a>()
- and
- <a class="permalink" href="#vm_page_wire_mapped"><code class="Fn" id="vm_page_wire_mapped">vm_page_wire_mapped</code></a>()
- functions wire the page, which prevents it from being reclaimed by the page
- daemon or when its containing object is destroyed. Both functions require
- that the page belong to an object. The
- <code class="Fn">vm_page_wire_mapped</code>() function is for use by the
- <a class="Xr">pmap(9)</a> layer following a lookup. This function may fail
- if mappings of the page are concurrently being destroyed, in which case it
- will return false.</p>
-<p class="Pp" id="vm_page_unwire">The
- <a class="permalink" href="#vm_page_unwire"><code class="Fn">vm_page_unwire</code></a>()
- and
- <a class="permalink" href="#vm_page_unwire_noq"><code class="Fn" id="vm_page_unwire_noq">vm_page_unwire_noq</code></a>()
- functions release a wiring of a page. The
- <code class="Fn">vm_page_unwire</code>() function takes a queue index and
- will insert the page into the corresponding page queue upon releasing its
- last wiring. If the page does not belong to an object and no other
- references to the page exist, <code class="Fn">vm_page_unwire</code>() will
- free the page. <code class="Fn">vm_page_unwire_noq</code>() releases the
- wiring and returns true if it was the last wiring of the page.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 9, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vm_set_page_size.9 4.html b/static/freebsd/man9/vm_set_page_size.9 4.html
deleted file mode 100644
index 7e69f16b..00000000
--- a/static/freebsd/man9/vm_set_page_size.9 4.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_SET_PAGE_SIZE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_SET_PAGE_SIZE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_set_page_size</code> &#x2014;
- <span class="Nd">initialize the system page size</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_page.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_set_page_size</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vm_set_page_size"><code class="Fn" id="vm_set_page_size">vm_set_page_size</code></a>()
- function initializes the system page size. If
- <var class="Va">vm_cnt.v_page_size</var> (see
- <code class="In">&lt;<a class="In">sys/vmmeter.h</a>&gt;</code>) equals 0,
- <code class="Dv">PAGE_SIZE</code> is used; otherwise, the value stored in
- <var class="Va">vm_cnt.v_page_size</var> is used. If
- <var class="Va">vm_cnt.v_page_size</var> is not a power of two, the system
- will panic.</p>
-<p class="Pp" id="vm_set_page_size~2"><a class="permalink" href="#vm_set_page_size~2"><code class="Fn">vm_set_page_size</code></a>()
- must be called prior to any page size dependent functions.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 21, 2014</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vmem.9 3.html b/static/freebsd/man9/vmem.9 3.html
deleted file mode 100644
index 9e7e6121..00000000
--- a/static/freebsd/man9/vmem.9 3.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VMEM(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VMEM(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vmem</code> &#x2014; <span class="Nd">general
- purpose resource allocator</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/vmem.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">vmem_t *</var>
- <br/>
- <code class="Fn">vmem_create</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t
- base</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- quantum</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- qcache_max</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vmem_add</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t
- addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vmem_xalloc</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- align</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t
- phase</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t
- nocross</var>, <var class="Fa" style="white-space: nowrap;">const
- vmem_addr_t minaddr</var>,
- <var class="Fa" style="white-space: nowrap;">const vmem_addr_t
- maxaddr</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">vmem_addr_t *addrp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vmem_xfree</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t
- addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vmem_alloc</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- size</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">vmem_addr_t *addrp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vmem_free</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t
- addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t
- size</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vmem_destroy</code>(<var class="Fa" style="white-space: nowrap;">vmem_t
- *vm</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">vmem</code> is a general purpose resource
- allocator. Despite its name, it can be used for arbitrary resources other
- than virtual memory.</p>
-<p class="Pp" id="vmem_create"><a class="permalink" href="#vmem_create"><code class="Fn">vmem_create</code></a>()
- creates a new vmem arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">name</var></dt>
- <dd>The string to describe the vmem.</dd>
- <dt><var class="Fa">base</var></dt>
- <dd>The start address of the initial span. Pass <code class="Dv">0</code> if
- no initial span is required.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>The size of the initial span. Pass <code class="Dv">0</code> if no initial
- span is required.</dd>
- <dt><var class="Fa">quantum</var></dt>
- <dd>The smallest unit of allocation.</dd>
- <dt><var class="Fa">qcache_max</var></dt>
- <dd>The largest size of allocations which can be served by quantum cache. It
- is merely a hint and can be ignored.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd><a class="Xr">malloc(9)</a> wait flag.</dd>
-</dl>
-</div>
-<p class="Pp" id="vmem_add"><a class="permalink" href="#vmem_add"><code class="Fn">vmem_add</code></a>()
- adds a span of size <var class="Fa">size</var> starting at
- <var class="Fa">addr</var> to the arena. Returns 0 on success,
- <code class="Dv">ENOMEM</code> on failure. <var class="Fa">flags</var> is
- <a class="Xr">malloc(9)</a> wait flag.</p>
-<p class="Pp" id="vmem_xalloc"><a class="permalink" href="#vmem_xalloc"><code class="Fn">vmem_xalloc</code></a>()
- allocates a resource from the arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">vm</var></dt>
- <dd>The arena which we allocate from.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>Specify the size of the allocation.</dd>
- <dt><var class="Fa">align</var></dt>
- <dd>If zero, don't care about the alignment of the allocation. Otherwise,
- request a resource segment starting at offset <var class="Fa">phase</var>
- from an <var class="Fa">align</var> aligned boundary.</dd>
- <dt><var class="Fa">phase</var></dt>
- <dd>See the above description of <var class="Fa">align</var>. If
- <var class="Fa">align</var> is zero, <var class="Fa">phase</var> should be
- zero. Otherwise, <var class="Fa">phase</var> should be smaller than
- <var class="Fa">align</var>.</dd>
- <dt><var class="Fa">nocross</var></dt>
- <dd>Request a resource which doesn't cross <var class="Fa">nocross</var>
- aligned boundary.</dd>
- <dt><var class="Fa">minaddr</var></dt>
- <dd>Specify the minimum address which can be allocated, or
- <code class="Dv">VMEM_ADDR_MIN</code> if the caller does not care.</dd>
- <dt><var class="Fa">maxaddr</var></dt>
- <dd>Specify the maximum address which can be allocated, or
- <code class="Dv">VMEM_ADDR_MAX</code> if the caller does not care.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>A bitwise OR of an allocation strategy and a <a class="Xr">malloc(9)</a>
- wait flag. The allocation strategy is one of:
- <dl class="Bl-tag">
- <dt id="M_FIRSTFIT"><a class="permalink" href="#M_FIRSTFIT"><code class="Dv">M_FIRSTFIT</code></a></dt>
- <dd>Prefer allocation performance.</dd>
- <dt id="M_BESTFIT"><a class="permalink" href="#M_BESTFIT"><code class="Dv">M_BESTFIT</code></a></dt>
- <dd>Prefer space efficiency.</dd>
- <dt id="M_NEXTFIT"><a class="permalink" href="#M_NEXTFIT"><code class="Dv">M_NEXTFIT</code></a></dt>
- <dd>Perform an address-ordered search for free addresses, beginning where
- the previous search ended.</dd>
- </dl>
- </dd>
- <dt><var class="Fa">addrp</var></dt>
- <dd>On success, if <var class="Fa">addrp</var> is not
- <code class="Dv">NULL</code>, <code class="Fn">vmem_xalloc</code>()
- overwrites it with the start address of the allocated span.</dd>
-</dl>
-</div>
-<p class="Pp" id="vmem_xfree"><a class="permalink" href="#vmem_xfree"><code class="Fn">vmem_xfree</code></a>()
- frees resource allocated by <code class="Fn">vmem_xalloc</code>() to the
- arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">vm</var></dt>
- <dd>The arena which we free to.</dd>
- <dt><var class="Fa">addr</var></dt>
- <dd>The resource being freed. It must be the one returned by
- <code class="Fn">vmem_xalloc</code>(). Notably, it must not be the one
- from <code class="Fn">vmem_alloc</code>(). Otherwise, the behaviour is
- undefined.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>The size of the resource being freed. It must be the same as the
- <var class="Fa">size</var> argument used for
- <code class="Fn">vmem_xalloc</code>().</dd>
-</dl>
-</div>
-<p class="Pp" id="vmem_alloc"><a class="permalink" href="#vmem_alloc"><code class="Fn">vmem_alloc</code></a>()
- allocates a resource from the arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">vm</var></dt>
- <dd>The arena which we allocate from.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>Specify the size of the allocation.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>A bitwise OR of an <code class="Nm">vmem</code> allocation strategy flag
- (see above) and a <a class="Xr">malloc(9)</a> sleep flag.</dd>
- <dt><var class="Fa">addrp</var></dt>
- <dd>On success, if <var class="Fa">addrp</var> is not
- <code class="Dv">NULL</code>, <code class="Fn">vmem_alloc</code>()
- overwrites it with the start address of the allocated span.</dd>
-</dl>
-</div>
-<p class="Pp" id="vmem_free"><a class="permalink" href="#vmem_free"><code class="Fn">vmem_free</code></a>()
- frees resource allocated by <code class="Fn">vmem_alloc</code>() to the
- arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">vm</var></dt>
- <dd>The arena which we free to.</dd>
- <dt><var class="Fa">addr</var></dt>
- <dd>The resource being freed. It must be the one returned by
- <code class="Fn">vmem_alloc</code>(). Notably, it must not be the one from
- <code class="Fn">vmem_xalloc</code>(). Otherwise, the behaviour is
- undefined.</dd>
- <dt><var class="Fa">size</var></dt>
- <dd>The size of the resource being freed. It must be the same as the
- <var class="Fa">size</var> argument used for
- <code class="Fn">vmem_alloc</code>().</dd>
-</dl>
-</div>
-<p class="Pp" id="vmem_destroy"><a class="permalink" href="#vmem_destroy"><code class="Fn">vmem_destroy</code></a>()
- destroys a vmem arena.</p>
-<div class="Bd-indent">
-<dl class="Bl-tag">
- <dt><var class="Fa">vm</var></dt>
- <dd>The vmem arena being destroyed. The caller should ensure that no one will
- use it anymore.</dd>
-</dl>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp"><code class="Fn">vmem_create</code>() returns a pointer to the
- newly allocated vmem_t. Otherwise, it returns
- <code class="Dv">NULL</code>.</p>
-<p class="Pp">On success, <code class="Fn">vmem_xalloc</code>() and
- <code class="Fn">vmem_alloc</code>() return 0. Otherwise,
- <code class="Dv">ENOMEM</code> is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
- REFERENCES</a></h1>
-<p class="Pp">The <code class="Nm">vmem</code> subsystem is implemented within
- the file <span class="Pa">sys/kern/subr_vmem.c</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">malloc(9)</a></p>
-<p class="Pp"><a class="Xr">libuvmem(3)</a> for the userspace port of the
- allocator.</p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Jeff Bonwick</span> and
- <span class="RsA">Jonathan Adams</span>, <span class="RsT">Magazines and
- Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary
- Resources</span>, <i class="RsJ">2001 USENIX Annual Technical
- Conference</i>, <span class="RsD">2001</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">vmem</code> allocator was originally
- implemented in <span class="Ux">NetBSD</span>. It was introduced in
- <span class="Ux">FreeBSD 10.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">Original implementation of <code class="Nm">vmem</code> was
- written by <span class="An">YAMAMOTO Takashi</span>. The
- <span class="Ux">FreeBSD</span> port was made by <span class="An">Jeff
- Roberson</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp"><code class="Nm">vmem</code> relies on
- <a class="Xr">malloc(9)</a>, so it cannot be used as early during system
- bootstrap.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 17, 2019</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vn_deallocate.9 4.html b/static/freebsd/man9/vn_deallocate.9 4.html
deleted file mode 100644
index b2da14ec..00000000
--- a/static/freebsd/man9/vn_deallocate.9 4.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VN_DEALLOCATE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VN_DEALLOCATE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vn_deallocate</code> &#x2014;
- <span class="Nd">zero and/or deallocate storage from a file</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_deallocate</code>(<var class="Fa">struct vnode *vp</var>,
- <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *length</var>,
- <var class="Fa">int flags</var>, <var class="Fa">int ioflag</var>,
- <var class="Fa">struct ucred *active_cred</var>, <var class="Fa">struct
- ucred *file_cred</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vn_deallocate"><code class="Fn" id="vn_deallocate">vn_deallocate</code></a>()
- function zeros and/or deallocates backing storage space from a file. This
- function only works on vnodes with <code class="Dv">VREG</code> type.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode of the file.</dd>
- <dt><var class="Fa">offset</var></dt>
- <dd>The starting offset of the operation range.</dd>
- <dt><var class="Fa">length</var></dt>
- <dd>The length of the operation range. This must be greater than 0.</dd>
- <dt><var class="Fa">flags</var></dt>
- <dd>The control flags of the operation. This should be set to 0 for now.</dd>
- <dt><var class="Fa">ioflag</var></dt>
- <dd>Directives and hints to be given to the file system.</dd>
- <dt><var class="Fa">active_cred</var></dt>
- <dd>The user credentials of the calling thread.</dd>
- <dt><var class="Fa">file_cred</var></dt>
- <dd>The credentials installed on the file description pointing to the vnode or
- NOCRED.</dd>
-</dl>
-<p class="Pp" id="ioflag">The
- <a class="permalink" href="#ioflag"><code class="Fn">ioflag</code></a>()
- argument gives directives and hints to the file system. It may include one
- or more of the following flags:</p>
-<dl class="Bl-tag">
- <dt id="IO_NODELOCKED"><a class="permalink" href="#IO_NODELOCKED"><code class="Dv">IO_NODELOCKED</code></a></dt>
- <dd>The vnode was locked before the call.</dd>
- <dt id="IO_RANGELOCKED"><a class="permalink" href="#IO_RANGELOCKED"><code class="Dv">IO_RANGELOCKED</code></a></dt>
- <dd>Rangelock was owned around the call.</dd>
- <dt id="IO_NOMACCHECK"><a class="permalink" href="#IO_NOMACCHECK"><code class="Dv">IO_NOMACCHECK</code></a></dt>
- <dd>Skip MAC checking in the call.</dd>
- <dt id="IO_SYNC"><a class="permalink" href="#IO_SYNC"><code class="Dv">IO_SYNC</code></a></dt>
- <dd>Do I/O synchronously.</dd>
- <dt id="IO_DIRECT"><a class="permalink" href="#IO_DIRECT"><code class="Dv">IO_DIRECT</code></a></dt>
- <dd>Attempt to bypass buffer cache.</dd>
-</dl>
-<p class="Pp"><var class="Fa">*offset</var> and <var class="Fa">*length</var>
- are updated to reflect the unprocessed operation range of the call. For a
- successful completion, <var class="Fa">*length</var> is updated to be the
- value 0, and <var class="Fa">*offset</var> is incremented by the number of
- bytes zeroed before the end-of-file.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">Upon successful completion, the value 0 is returned; otherwise the
- appropriate error is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a>,
- <a class="Xr">VOP_DEALLOCATE(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp"><code class="Nm">vn_deallocate</code> and this manual page was
- written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>&gt;
- under sponsorship from the FreeBSD Foundation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 25, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vn_fullpath.9 3.html b/static/freebsd/man9/vn_fullpath.9 3.html
deleted file mode 100644
index c97d9065..00000000
--- a/static/freebsd/man9/vn_fullpath.9 3.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VN_FULLPATH(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VN_FULLPATH(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vn_fullpath</code> &#x2014;
- <span class="Nd">convert a vnode reference to a full pathname, given a
- process context</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_fullpath</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char
- **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char
- **freebuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_fullpath_jail</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char
- **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char
- **freebuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_fullpath_global</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char
- **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char
- **freebuf</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vn_fullpath_hardlink</code>(<var class="Fa">struct vnode
- *vp</var>, <var class="Fa">struct vnode *dvp</var>, <var class="Fa">const
- char *hrdl_name</var>, <var class="Fa">size_t hrdl_name_length</var>,
- <var class="Fa">char **retbuf</var>, <var class="Fa">char **freebuf</var>,
- <var class="Fa">size_t *buflen</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vn_fullpath"><code class="Fn" id="vn_fullpath">vn_fullpath</code></a>(),
- <a class="permalink" href="#vn_fullpath_jail"><code class="Fn" id="vn_fullpath_jail">vn_fullpath_jail</code></a>(),
- <a class="permalink" href="#vn_fullpath_global"><code class="Fn" id="vn_fullpath_global">vn_fullpath_global</code></a>()
- and <code class="Fn">vn_fullpath_hardlink</code>() functions make a
- &#x201C;best effort&#x201D; attempt at generating a string pathname for the
- passed vnode. They differ in which directory the returned path is relative
- to, except for <code class="Fn">vn_fullpath_hardlink</code>() which behaves
- like <code class="Fn">vn_fullpath</code>() in this respect and is described
- at the end.</p>
-<p class="Pp" id="vn_fullpath~2">The
- <a class="permalink" href="#vn_fullpath~2"><code class="Fn">vn_fullpath</code></a>()
- function returns a path relative to the root directory of the process
- associated with the passed thread pointer. That root directory is either the
- system's or the thread's process' containing jail's root directory, or some
- descendant directory of such established by some <a class="Xr">chroot(2)</a>
- call. The
- <a class="permalink" href="#vn_fullpath_jail~2"><code class="Fn" id="vn_fullpath_jail~2">vn_fullpath_jail</code></a>()
- function returns a path relative to the passed thread's process' current
- jail's root, ignoring intervening <a class="Xr">chroot(2)</a> calls possibly
- made inside that jail. The
- <a class="permalink" href="#vn_fullpath_global~2"><code class="Fn" id="vn_fullpath_global~2">vn_fullpath_global</code></a>()
- function returns the full path from the system root, ignoring all jail roots
- and <a class="Xr">chroot(2)</a> calls.</p>
-<p class="Pp" id="vn_fullpath~3">Paths that the kernel intends to communicate to
- the passed user thread should exclusively be obtained via
- <a class="permalink" href="#vn_fullpath~3"><code class="Fn">vn_fullpath</code></a>().
- Paths obtained via
- <a class="permalink" href="#vn_fullpath_jail~3"><code class="Fn" id="vn_fullpath_jail~3">vn_fullpath_jail</code></a>()
- or
- <a class="permalink" href="#vn_fullpath_global~3"><code class="Fn" id="vn_fullpath_global~3">vn_fullpath_global</code></a>()
- are only useful for specific kernel checks or auditing purposes.</p>
-<p class="Pp">All these functions are implemented by inspecting the VFS name
- cache, and attempting to reconstruct a path from the process root to the
- object. This process is necessarily unreliable for several reasons:
- intermediate entries in the path may not be found in the cache; files may
- have more than one name (hard links), not all file systems use the name
- cache (specifically, most synthetic file systems do not); a single name may
- be used for more than one file (in the context of file systems covering
- other file systems); a file may have no name (if deleted but still open or
- referenced). However, the resulting string may still be more usable to a
- user than a vnode pointer value, or a device number and inode number. Code
- consuming the results of this function should anticipate (and properly
- handle) failure.</p>
-<p class="Pp">These functions take the following arguments:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to search for. No need to be locked by the caller.</dd>
- <dt><var class="Fa">retbuf</var></dt>
- <dd>Pointer to a <var class="Vt">char *</var> that may be set (on success) to
- point at a newly allocated buffer containing the resulting pathname.</dd>
- <dt><var class="Fa">freebuf</var></dt>
- <dd>Pointer to a <var class="Vt">char *</var> that may be set (on success) to
- point at a buffer to be freed, when the caller is done with
- <var class="Fa">retbuf</var>.</dd>
-</dl>
-<p class="Pp" id="vn_fullpath~4">Typical consumers will declare two character
- pointers: <var class="Va">fullpath</var> and <var class="Va">freepath</var>;
- they will set <var class="Va">freepath</var> to
- <code class="Dv">NULL</code>, and <var class="Va">fullpath</var> to a name
- to use in the event that the call to
- <a class="permalink" href="#vn_fullpath~4"><code class="Fn">vn_fullpath</code></a>()
- fails. After done with the value of <var class="Va">fullpath</var>, the
- caller will check if <var class="Va">freepath</var> is
- non-<code class="Dv">NULL</code>, and if so, invoke
- <a class="Xr">free(9)</a> with a pool type of
- <code class="Dv">M_TEMP</code>.</p>
-<p class="Pp" id="vn_fullpath_hardlink">The
- <a class="permalink" href="#vn_fullpath_hardlink"><code class="Fn">vn_fullpath_hardlink</code></a>()
- function is a convenience wrapper which automatically appends the hardlink
- name passed via arguments <var class="Fa">hrdl_name</var> and
- <var class="Fa">hrdl_name_length</var> to the result of calling
- <code class="Fn">vn_fullpath</code>() on the vnode's parent directory. It
- requires the results of a prior call to <a class="Xr">namei(9)</a> with flag
- <code class="Dv">WANTPARENT</code> to be passed in the
- <var class="Fa">vp</var> and <var class="Fa">dvp</var> arguments. Argument
- <var class="Fa">buflen</var> must point to a valid storage containing the
- size of the desired buffer, which will be reduced to
- <code class="Dv">MAXPATHLEN</code> if in excess of it.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the vnode is successfully converted to a pathname, 0 is
- returned; otherwise, an error number is returned.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">free(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was initially written by <span class="An">Robert
- Watson</span>
- &lt;<a class="Mt" href="mailto:rwatson@FreeBSD.org">rwatson@FreeBSD.org</a>&gt;
- to describe the <code class="Fn">vn_fullpath</code>() function. The
- descriptions of the other related functions were added by
- <span class="An">Olivier Certner</span>
- &lt;<a class="Mt" href="mailto:olce@FreeBSD.org">olce@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 29, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vn_isdisk.9 4.html b/static/freebsd/man9/vn_isdisk.9 4.html
deleted file mode 100644
index 03b82ee8..00000000
--- a/static/freebsd/man9/vn_isdisk.9 4.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VN_ISDISK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VN_ISDISK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vn_isdisk</code> &#x2014; <span class="Nd">checks
- if a vnode represents a disk</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">vn_isdisk</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">bool</var>
- <br/>
- <code class="Fn">vn_isdisk_error</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- *errp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vn_isdisk"><code class="Fn" id="vn_isdisk">vn_isdisk</code></a>()
- and
- <a class="permalink" href="#vn_isdisk_error"><code class="Fn" id="vn_isdisk_error">vn_isdisk_error</code></a>()
- functions check to see if <var class="Fa">vp</var> represents a disk. In
- order for <var class="Fa">vp</var> to be a disk, it must be a character
- device, <var class="Va">v_rdev</var> must be valid, and the
- <var class="Vt">cdevsw</var> entry's <var class="Va">flags</var> must have
- <code class="Dv">D_DISK</code> set.</p>
-<p class="Pp">The arguments are:</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>The vnode to check.</dd>
- <dt><var class="Fa">errp</var></dt>
- <dd>An integer pointer to store the error number in if the call fails.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">If the vnode represents a disk, true is returned; otherwise, false
- is returned and <var class="Fa">errp</var> will contain the error
- number.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 28, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vnode.9 3.html b/static/freebsd/man9/vnode.9 3.html
deleted file mode 100644
index 27868c6b..00000000
--- a/static/freebsd/man9/vnode.9 3.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VNODE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VNODE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vnode</code> &#x2014; <span class="Nd">internal
- representation of a file or directory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The vnode is the focus of all file activity in
- <span class="Ux">UNIX</span>. A vnode is described by <var class="Vt">struct
- vnode</var>. There is a unique vnode allocated for each active file, each
- current directory, each mounted-on file, text file, and the root.</p>
-<p class="Pp">Each vnode has three reference counts,
- <var class="Va">v_usecount</var>, <var class="Va">v_holdcnt</var> and
- <var class="Va">v_writecount</var>. The first is the number of clients
- within the kernel which are using this vnode. This count is maintained by
- <a class="Xr">vref(9)</a>, <a class="Xr">vrele(9)</a> and
- <a class="Xr">vput(9)</a>. The second is the number of clients within the
- kernel who veto the recycling of this vnode. This count is maintained by
- <a class="Xr">vhold(9)</a> and <a class="Xr">vdrop(9)</a>. When both the
- <var class="Va">v_usecount</var> and the <var class="Va">v_holdcnt</var> of
- a vnode reaches zero then the vnode will be put on the freelist and may be
- reused for another file, possibly in another file system. The transition
- from the freelist is handled by <a class="Xr">getnewvnode(9)</a>. The third
- is a count of the number of clients which are writing into the file. It is
- maintained by the <a class="Xr">open(2)</a> and <a class="Xr">close(2)</a>
- system calls.</p>
-<p class="Pp">Any call which returns a vnode (e.g., <a class="Xr">vget(9)</a>,
- <a class="Xr">VOP_LOOKUP(9)</a>, etc.) will increase the
- <var class="Va">v_usecount</var> of the vnode by one. When the caller is
- finished with the vnode, it should release this reference by calling
- <a class="Xr">vrele(9)</a> (or <a class="Xr">vput(9)</a> if the vnode is
- locked).</p>
-<p class="Pp" id="VOP_*">Other commonly used members of the vnode structure are
- <var class="Va">v_id</var> which is used to maintain consistency in the name
- cache, <var class="Va">v_mount</var> which points at the file system which
- owns the vnode, <var class="Va">v_type</var> which contains the type of
- object the vnode represents and <var class="Va">v_data</var> which is used
- by file systems to store file system specific data with the vnode. The
- <var class="Va">v_op</var> field is used by the
- <a class="permalink" href="#VOP_*"><code class="Fn">VOP_*</code></a>()
- functions to call functions in the file system which implement the vnode's
- functionality.</p>
-<p class="Pp" id="VOP_*~2">The
- <a class="permalink" href="#VOP_*~2"><code class="Fn">VOP_*</code></a>()
- function declarations and definitions are generated from
- <span class="Pa">sys/kern/vnode_if.src</span> by the
- <span class="Pa">sys/tools/vnode_if.awk</span> script. The interfaces are
- documented in their respective manual pages like
- <a class="Xr">VOP_READ(9)</a> and <a class="Xr">VOP_WRITE(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="VNODE_TYPES"><a class="permalink" href="#VNODE_TYPES">VNODE
- TYPES</a></h1>
-<dl class="Bl-tag">
- <dt id="VNON"><a class="permalink" href="#VNON"><code class="Dv">VNON</code></a></dt>
- <dd>No type.</dd>
- <dt id="VREG"><a class="permalink" href="#VREG"><code class="Dv">VREG</code></a></dt>
- <dd>A regular file; may be with or without VM object backing. If you want to
- make sure this get a backing object, call
- <a class="permalink" href="#vnode_create_vobject"><code class="Fn" id="vnode_create_vobject">vnode_create_vobject</code></a>().</dd>
- <dt id="VDIR"><a class="permalink" href="#VDIR"><code class="Dv">VDIR</code></a></dt>
- <dd>A directory.</dd>
- <dt id="VBLK"><a class="permalink" href="#VBLK"><code class="Dv">VBLK</code></a></dt>
- <dd>A block device; may be with or without VM object backing. If you want to
- make sure this get a backing object, call
- <code class="Fn">vnode_create_vobject</code>().</dd>
- <dt id="VCHR"><a class="permalink" href="#VCHR"><code class="Dv">VCHR</code></a></dt>
- <dd>A character device.</dd>
- <dt id="VLNK"><a class="permalink" href="#VLNK"><code class="Dv">VLNK</code></a></dt>
- <dd>A symbolic link.</dd>
- <dt id="VSOCK"><a class="permalink" href="#VSOCK"><code class="Dv">VSOCK</code></a></dt>
- <dd>A socket. Advisory locking will not work on this.</dd>
- <dt id="VFIFO"><a class="permalink" href="#VFIFO"><code class="Dv">VFIFO</code></a></dt>
- <dd>A FIFO (named pipe). Advisory locking will not work on this.</dd>
- <dt id="VBAD"><a class="permalink" href="#VBAD"><code class="Dv">VBAD</code></a></dt>
- <dd>Indicates that the vnode has been reclaimed.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">VFIFO uses the &quot;struct fileops&quot; from
- <span class="Pa">/sys/kern/sys_pipe.c</span>. VSOCK uses the &quot;struct
- fileops&quot; from <span class="Pa">/sys/kern/sys_socket.c</span>.
- Everything else uses the one from
- <span class="Pa">/sys/kern/vfs_vnops.c</span>.</p>
-<p class="Pp">The VFIFO/VSOCK code, which is why &quot;struct fileops&quot; is
- used at all, is an artifact of an incomplete integration of the VFS code
- into the kernel.</p>
-<p class="Pp">Calls to <a class="Xr">malloc(9)</a> or <a class="Xr">free(9)</a>
- when holding a <code class="Nm">vnode</code> interlock, will cause a LOR
- (Lock Order Reversal) due to the intertwining of VM Objects and Vnodes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag Bl-compact">
- <dt><span class="Pa">sys/kern/vnode_if.src</span></dt>
- <dd>The input file for <span class="Pa">sys/tools/vnode_if.awk</span>.</dd>
- <dt><span class="Pa">sys/tools/vnode_if.awk</span></dt>
- <dd>The script generating the source code of the
- <code class="Fn">VOP_*</code>() functions.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">VFS(9)</a>,
- <a class="Xr">VOP_ACCESS(9)</a>, <a class="Xr">VOP_ACLCHECK(9)</a>,
- <a class="Xr">VOP_ADVISE(9)</a>, <a class="Xr">VOP_ADVLOCK(9)</a>,
- <a class="Xr">VOP_ALLOCATE(9)</a>, <a class="Xr">VOP_ATTRIB(9)</a>,
- <a class="Xr">VOP_BWRITE(9)</a>, <a class="Xr">VOP_CREATE(9)</a>,
- <a class="Xr">VOP_FSYNC(9)</a>, <a class="Xr">VOP_GETACL(9)</a>,
- <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_GETPAGES(9)</a>,
- <a class="Xr">VOP_INACTIVE(9)</a>, <a class="Xr">VOP_IOCTL(9)</a>,
- <a class="Xr">VOP_LINK(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>,
- <a class="Xr">VOP_LOCK(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a>,
- <a class="Xr">VOP_OPENCLOSE(9)</a>, <a class="Xr">VOP_PATHCONF(9)</a>,
- <a class="Xr">VOP_PRINT(9)</a>, <a class="Xr">VOP_RDWR(9)</a>,
- <a class="Xr">VOP_READ_PGCACHE(9)</a>, <a class="Xr">VOP_READDIR(9)</a>,
- <a class="Xr">VOP_READLINK(9)</a>, <a class="Xr">VOP_REALLOCBLKS(9)</a>,
- <a class="Xr">VOP_REMOVE(9)</a>, <a class="Xr">VOP_RENAME(9)</a>,
- <a class="Xr">VOP_REVOKE(9)</a>, <a class="Xr">VOP_SETACL(9)</a>,
- <a class="Xr">VOP_SETEXTATTR(9)</a>, <a class="Xr">VOP_SETLABEL(9)</a>,
- <a class="Xr">VOP_STRATEGY(9)</a>, <a class="Xr">VOP_VPTOCNP(9)</a>,
- <a class="Xr">VOP_VPTOFH(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 15, 2025</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vnode_pager_purge_range.9 4.html b/static/freebsd/man9/vnode_pager_purge_range.9 4.html
deleted file mode 100644
index fe6a0229..00000000
--- a/static/freebsd/man9/vnode_pager_purge_range.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VNODE_PAGER_PURGE_RANGE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VNODE_PAGER_PURGE_RANGE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vnode_pager_purge_range</code> &#x2014;
- <span class="Nd">invalidate the cached content within the given byte
- range</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_extern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vnode_pager_purge_range</code>(<var class="Fa">struct vnode
- *vp</var>, <var class="Fa">vm_ooffset_t start</var>,
- <var class="Fa">vm_ooffset_t end</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">vnode_pager_purge_range</code> invalidates the
- cached content within the given byte range from the specified vnode
- <var class="Fa">vp</var>. The range to be purged is
- [<var class="Fa">start</var>, <var class="Fa">end</var>). If the
- <var class="Fa">end</var> parameter is the value zero, the affected range
- starts from <var class="Fa">start</var> continues to the end of the object.
- Pages within the specified range will be removed from the object's queue. If
- <var class="Fa">start</var> or <var class="Fa">end</var> is not aligned to a
- page boundary, the invalidated part of the page is zeroed. This function
- only cleans the resident pages in the affected region, it is up to the
- callers to ensure reading the backing store gets back zeroes.</p>
-<p class="Pp">In case the vnode <var class="Fa">vp</var> does not have a VM
- object allocated, the effect of calling this function is a no-op.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode must be locked on entry and will still be locked on
- exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">vnode_pager_purge_range</code> manual page
- first appeared in <span class="Ux">FreeBSD 14</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 24, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vnode_pager_setsize.9 4.html b/static/freebsd/man9/vnode_pager_setsize.9 4.html
deleted file mode 100644
index 03626ef3..00000000
--- a/static/freebsd/man9/vnode_pager_setsize.9 4.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VNODE_PAGER_SETSIZE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VNODE_PAGER_SETSIZE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vnode_pager_setsize</code> &#x2014;
- <span class="Nd">notify the VM system about updates in the file
- size</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_extern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vnode_pager_setsize</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">vm_ooffset_t
- nsize</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">vnode_pager_setsize</code> lets the VM system
- know about a change in size for a file, and updates the object size and
- vnode pager size of the vm object in <var class="Fa">vp</var> with
- <var class="Fa">nsize</var>. Page faults on the object mapping with offset
- beyond the new object size results in <var class="Va">SIGBUS</var>.</p>
-<p class="Pp">Pages between the old EOF and the new EOF are removed from the
- object queue if the file size shrinks. In case the new EOF specified by the
- <var class="Fa">nsize</var> argument is not aligned to page boundary,
- partial-page area starting beyond the EOF is zeroed and marked invalid. if
- the page exists resident.</p>
-<p class="Pp">In case the vnode <var class="Fa">vp</var> does not have a VM
- object allocated, the effect of calling this function is no-op.</p>
-<p class="Pp">This function must be used within file system code to implement
- truncation if the file system allocates vm objects for vnodes.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1>
-<p class="Pp">The vnode should be exclusively locked on entry and will still be
- locked on exit.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">vnode_pager_setsize</code> manual page first
- appeared in <span class="Ux">FreeBSD 14</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">April 8, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vref.9 4.html b/static/freebsd/man9/vref.9 4.html
deleted file mode 100644
index 56e1adf8..00000000
--- a/static/freebsd/man9/vref.9 4.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VREF(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VREF(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vref</code>, <code class="Nm">vrefl</code>
- &#x2014; <span class="Nd">increment the use count for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vref</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vrefl</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Increment the <var class="Va">v_usecount</var> field of a
- vnode.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>the vnode to increment</dd>
-</dl>
-<p class="Pp">Each vnode maintains a reference count of how many parts of the
- system are using the vnode. This allows the system to detect when a vnode is
- no longer being used and can be safely recycled for a different file.</p>
-<p class="Pp" id="vref">Any code in the system which is using a vnode (e.g.
- during the operation of some algorithm or to store in a data structure)
- should call
- <a class="permalink" href="#vref"><code class="Fn">vref</code></a>() or
- <a class="permalink" href="#vrefl"><code class="Fn" id="vrefl">vrefl</code></a>().</p>
-<p class="Pp" id="vref~2"><a class="permalink" href="#vref~2"><code class="Fn">vref</code></a>()
- locks the vnode interlock while
- <a class="permalink" href="#vrefl~2"><code class="Fn" id="vrefl~2">vrefl</code></a>()
- expects the interlock to already be held.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">vput(9)</a>, <a class="Xr">vrefcnt(9)</a>,
- <a class="Xr">vrele(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 18, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vrefcnt.9 4.html b/static/freebsd/man9/vrefcnt.9 4.html
deleted file mode 100644
index 855d026e..00000000
--- a/static/freebsd/man9/vrefcnt.9 4.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VREFCNT(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VREFCNT(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vrefcnt</code> &#x2014; <span class="Nd">returns
- the use count of a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vrefcnt</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Returns the use count of a vnode.</p>
-<p class="Pp">See <a class="Xr">vnode(9)</a> for a detailed description of the
- vnode reference counts.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">vput(9)</a>, <a class="Xr">vrele(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad
- David</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 10, 2008</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vrele.9 4.html b/static/freebsd/man9/vrele.9 4.html
deleted file mode 100644
index 09d1a7bd..00000000
--- a/static/freebsd/man9/vrele.9 4.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VRELE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VRELE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vput</code>, <code class="Nm">vrele</code>,
- <code class="Nm">vunref</code> &#x2014; <span class="Nd">decrement the use
- count for a vnode</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vput</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vrele</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vunref</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Decrement the <var class="Va">v_usecount</var> field of a
- vnode.</p>
-<dl class="Bl-tag">
- <dt><var class="Fa">vp</var></dt>
- <dd>the vnode to decrement</dd>
-</dl>
-<p class="Pp" id="vrele">The
- <a class="permalink" href="#vrele"><code class="Fn">vrele</code></a>()
- function takes an unlocked vnode and returns with the vnode unlocked.</p>
-<p class="Pp" id="vput">The
- <a class="permalink" href="#vput"><code class="Fn">vput</code></a>()
- function should be given a locked vnode as argument, the vnode is unlocked
- after the function returned. The <code class="Fn">vput</code>() is
- operationally equivalent to calling <a class="Xr">VOP_UNLOCK(9)</a> followed
- by <code class="Fn">vrele</code>(), with less overhead.</p>
-<p class="Pp" id="vunref">The
- <a class="permalink" href="#vunref"><code class="Fn">vunref</code></a>()
- function takes a locked vnode as argument, and returns with the vnode
- locked.</p>
-<p class="Pp">Any code in the system which signified its use of a vnode by
- usecount should call one of the listed function to decrement use counter. If
- the <var class="Va">v_usecount</var> field of the non-doomed vnode reaches
- zero, then it will be inactivated and placed on the free list.</p>
-<p class="Pp" id="vrele~2">The
- <a class="permalink" href="#vrele~2"><code class="Fn">vrele</code></a>()
- function may lock the vnode. All three functions may sleep.</p>
-<p class="Pp">The hold count for the vnode is always greater or equal to the
- usecount. Non-forced unmount fails when mount point owns a vnode that has
- non-zero usecount, see <a class="Xr">vflush(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>,
- <a class="Xr">vref(9)</a>, <a class="Xr">vrefcnt(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Doug
- Rabson</span> and
- <br/>
- <span class="An">Konstantin Belousov</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 24, 2016</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/vslock.9 4.html b/static/freebsd/man9/vslock.9 4.html
deleted file mode 100644
index 348a61d9..00000000
--- a/static/freebsd/man9/vslock.9 4.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VSLOCK(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VSLOCK(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vslock</code>, <code class="Nm">vsunlock</code>
- &#x2014; <span class="Nd">lock/unlock user space addresses in
- memory</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/proc.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_extern.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">vslock</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vsunlock</code>(<var class="Fa" style="white-space: nowrap;">void
- *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t
- len</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The
- <a class="permalink" href="#vslock"><code class="Fn" id="vslock">vslock</code></a>()
- and
- <a class="permalink" href="#vsunlock"><code class="Fn" id="vsunlock">vsunlock</code></a>()
- functions respectively lock and unlock a range of addresses belonging to the
- currently running process into memory. The actual amount of memory locked is
- a multiple of the machine's page size. The starting page number is computed
- by truncating <var class="Fa">addr</var> to the nearest preceding page
- boundary, and by rounding up <var class="Fa">addr +</var>
- <var class="Fa">len</var> to the next page boundary. The process context to
- use for this operation is taken from the global variable
- <var class="Va">curproc</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">vslock</code>() function will return 0 on
- success, otherwise it will return one of the errors listed below.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<p class="Pp">The <code class="Fn">vslock</code>() function will fail if:</p>
-<dl class="Bl-tag">
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>The <var class="Fa">addr</var> and <var class="Fa">len</var> parameters
- specify a memory range that wraps around the end of the machine address
- space.</dd>
- <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
- <dd>The size of the specified address range exceeds the system limit on locked
- memory.</dd>
- <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt>
- <dd>Some portion of the indicated address range is not allocated. There was an
- error faulting/mapping a page.</dd>
-</dl>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 29, 2012</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/watchdog.9 4.html b/static/freebsd/man9/watchdog.9 4.html
deleted file mode 100644
index 71192669..00000000
--- a/static/freebsd/man9/watchdog.9 4.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">WATCHDOG(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">WATCHDOG(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">watchdog</code> &#x2014;
- <span class="Nd">software and hardware watchdog facility</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/watchdog.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">watchdog_fn</code>(<var class="Fa" style="white-space: nowrap;">void
- *private</var>, <var class="Fa" style="white-space: nowrap;">u_int
- cmd</var>, <var class="Fa" style="white-space: nowrap;">int
- *error</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">watchdog_list</var>,
- <var class="Fa" style="white-space: nowrap;">watchdog_fn</var>,
- <var class="Fa" style="white-space: nowrap;">private</var>,
- <var class="Fa" style="white-space: nowrap;">0</var>);</p>
-<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">watchdog_list</var>,
- <var class="Fa" style="white-space: nowrap;">eventhandler_tag</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">To implement a watchdog in software or hardware, only a single
- function needs to be written and registered on the global
- <var class="Va">watchdog_list</var>.</p>
-<p class="Pp">The function must examine the <var class="Fa">cmd</var> argument
- and act on it as follows:</p>
-<p class="Pp">If <var class="Fa">cmd</var> is zero, the watchdog must be
- disabled and the <var class="Fa">error</var> argument left untouched. If the
- watchdog cannot be disabled, the <var class="Fa">error</var> argument must
- be set to <code class="Dv">EOPNOTSUPP</code>.</p>
-<p class="Pp">Else the watchdog should be reset and configured to a timeout of
- (1 &lt;&lt; (<var class="Fa">cmd</var> <span class="No">&amp;</span>
- <code class="Dv">WD_INTERVAL</code>)) nanoseconds or larger and the
- <var class="Fa">error</var> argument be set to zero to signal arming of a
- watchdog.</p>
-<p class="Pp">If the watchdog cannot be configured to the proposed timeout, it
- must be disabled and the <var class="Fa">error</var> argument left as is (to
- avoid hiding the arming of another watchdog).</p>
-<p class="Pp">There is no specification of what the watchdog should do when it
- times out, but a hardware reset or similar &#x201C;drastic but
- certain&#x201D; behaviour is recommended.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">watchdog(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">watchdog</code> facility and this manual page
- was written <span class="An">Poul-Henning Kamp</span>
- &lt;<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">February 28, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/zero_region.9 4.html b/static/freebsd/man9/zero_region.9 4.html
deleted file mode 100644
index cedfbea5..00000000
--- a/static/freebsd/man9/zero_region.9 4.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">ZERO_REGION(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">ZERO_REGION(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">zero_region</code> &#x2014;
- <span class="Nd">Read-only region prefilled with zeroes</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/systm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_param.h</a>&gt;</code></p>
-<p class="Pp"><var class="Vt">extern const void *zero_region</var>;</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The global variable <var class="Va">zero_region</var> points to a
- read-only region prefilled with zeroes. The size of the region is specified
- by the <code class="Dv">ZERO_REGION_SIZE</code> macro.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The region <var class="Va">zero_region</var> points to is mapped
- to the same page multiple times.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<div class="Bd Li">
-<pre>/*
- * This function writes zeroes to the vnode at offset 0
- * with ZERO_REGION_SIZE length.
- */
-static int
-write_example(struct vnode *vp)
-{
- struct thread *td;
- struct iovec aiov;
- struct uio auio;
- int error;
-
- td = curthread;
-
- aiov.iov_base = __DECONST(void *, zero_region);
- aiov.iov_len = ZERO_REGION_SIZE;
- auio.uio_iov = &amp;aiov;
- auio.uio_iovcnt = 1;
- auio.uio_offset = 0;
- auio.uio_resid = ZERO_REGION_SIZE;
- auio.uio_segflg = UIO_SYSSPACE;
- auio.uio_rw = UIO_WRITE;
- auio.uio_td = td;
-
- error = VOP_WRITE(vp, &amp;auio, 0, td-&gt;td_ucred);
- return (error);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSDFoundation.org">khng@FreeBSDFoundation.org</a>&gt;
- under sponsorship from the FreeBSD Foundation.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 2, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>
diff --git a/static/freebsd/man9/zone.9 3.html b/static/freebsd/man9/zone.9 3.html
deleted file mode 100644
index e45ef578..00000000
--- a/static/freebsd/man9/zone.9 3.html
+++ /dev/null
@@ -1,596 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">UMA(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">UMA(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">UMA</code> &#x2014;
- <span class="Nd">general-purpose kernel object allocator</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/queue.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/uma.h</a>&gt;</code></p>
-<div class="Bd Pp Li">
-<pre>typedef int (*uma_ctor)(void *mem, int size, void *arg, int flags);
-typedef void (*uma_dtor)(void *mem, int size, void *arg);
-typedef int (*uma_init)(void *mem, int size, int flags);
-typedef void (*uma_fini)(void *mem, int size);
-typedef int (*uma_import)(void *arg, void **store, int count, int domain,
- int flags);
-typedef void (*uma_release)(void *arg, void **store, int count);
-typedef void *(*uma_alloc)(uma_zone_t zone, vm_size_t size, int domain,
- uint8_t *pflag, int wait);
-typedef void (*uma_free)(void *item, vm_size_t size, uint8_t pflag);
-
-</pre>
-</div>
-<br/>
-<var class="Ft">uma_zone_t</var>
-<br/>
-<code class="Fn">uma_zcreate</code>(<var class="Fa">char *name</var>,
- <var class="Fa">size_t size</var>, <var class="Fa">uma_ctor ctor</var>,
- <var class="Fa">uma_dtor dtor</var>, <var class="Fa">uma_init zinit</var>,
- <var class="Fa">uma_fini zfini</var>, <var class="Fa">int align</var>,
- <var class="Fa">uint16_t flags</var>);
-<p class="Pp"><var class="Ft">uma_zone_t</var>
- <br/>
- <code class="Fn">uma_zcache_create</code>(<var class="Fa">char *name</var>,
- <var class="Fa">int size</var>, <var class="Fa">uma_ctor ctor</var>,
- <var class="Fa">uma_dtor dtor</var>, <var class="Fa">uma_init zinit</var>,
- <var class="Fa">uma_fini zfini</var>, <var class="Fa">uma_import
- zimport</var>, <var class="Fa">uma_release zrelease</var>,
- <var class="Fa">void *arg</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">uma_zone_t</var>
- <br/>
- <code class="Fn">uma_zsecond_create</code>(<var class="Fa">char *name</var>,
- <var class="Fa">uma_ctor ctor</var>, <var class="Fa">uma_dtor dtor</var>,
- <var class="Fa">uma_init zinit</var>, <var class="Fa">uma_fini zfini</var>,
- <var class="Fa">uma_zone_t master</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zdestroy</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc_domain</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int domain</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc_pcpu</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc_pcpu_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">uma_zalloc_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zfree</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void
- *item</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zfree_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void *item</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zfree_pcpu</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void
- *item</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zfree_pcpu_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void *item</var>,
- <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zfree_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void
- *item</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_prealloc</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_reserve</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_reserve_kva</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_reclaim</code>(<var class="Fa" style="white-space: nowrap;">int
- req</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_reclaim_domain</code>(<var class="Fa" style="white-space: nowrap;">int
- req</var>, <var class="Fa" style="white-space: nowrap;">int
- domain</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_reclaim</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int req</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_reclaim_domain</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int req</var>,
- <var class="Fa" style="white-space: nowrap;">int domain</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_allocf</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">uma_alloc
- allocf</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_freef</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">uma_free
- freef</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uma_zone_set_max</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_maxcache</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">int
- nitems</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uma_zone_get_max</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">uma_zone_get_cur</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_warning</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">const char
- *warning</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_maxaction</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">void
- (*maxaction)(uma_zone_t)</var>);</p>
-<p class="Pp"><var class="Ft">smr_t</var>
- <br/>
- <code class="Fn">uma_zone_get_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">uma_zone_set_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t
- zone</var>, <var class="Fa" style="white-space: nowrap;">smr_t
- smr</var>);</p>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">SYSCTL_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">zone</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ADD_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>,
- <var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">zone</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">zone</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-<p class="Pp"><code class="Fn">SYSCTL_ADD_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>,
- <var class="Fa" style="white-space: nowrap;">parent</var>,
- <var class="Fa" style="white-space: nowrap;">nbr</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">access</var>,
- <var class="Fa" style="white-space: nowrap;">zone</var>,
- <var class="Fa" style="white-space: nowrap;">descr</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">UMA (Universal Memory Allocator) provides an efficient interface
- for managing dynamically-sized collections of items of identical size,
- referred to as zones. Zones keep track of which items are in use and which
- are not, and UMA provides functions for allocating items from a zone and for
- releasing them back, making them available for subsequent allocation
- requests. Zones maintain per-CPU caches with linear scalability on SMP
- systems as well as round-robin and first-touch policies for NUMA systems.
- The number of items cached per CPU is bounded, and each zone additionally
- maintains an unbounded cache of items that is used to quickly satisfy
- per-CPU cache allocation misses.</p>
-<p class="Pp">Two types of zones exist: regular zones and cache zones. In a
- regular zone, items are allocated from a slab, which is one or more
- virtually contiguous memory pages that have been allocated from the kernel's
- page allocator. Internally, slabs are managed by a UMA keg, which is
- responsible for allocating slabs and keeping track of their usage by one or
- more zones. In typical usage, there is one keg per zone, so slabs are not
- shared among multiple zones.</p>
-<p class="Pp">Normal zones import items from a keg, and release items back to
- that keg if requested. Cache zones do not have a keg, and instead use custom
- import and release methods. For example, some collections of kernel objects
- are statically allocated at boot-time, and the size of the collection does
- not change. A cache zone can be used to implement an efficient allocator for
- the objects in such a collection.</p>
-<p class="Pp" id="uma_zcreate">The
- <a class="permalink" href="#uma_zcreate"><code class="Fn">uma_zcreate</code></a>()
- and <code class="Fn">uma_zcache_create</code>() functions create a new
- regular zone and cache zone, respectively. The
- <a class="permalink" href="#uma_zsecond_create"><code class="Fn" id="uma_zsecond_create">uma_zsecond_create</code></a>()
- function creates a regular zone which shares the keg of the zone specified
- by the <var class="Fa">master</var> argument. The <var class="Fa">name</var>
- argument is a text name of the zone for debugging and stats; this memory
- should not be freed until the zone has been deallocated.</p>
-<p class="Pp" id="uma_zalloc">The <var class="Fa">ctor</var> and
- <var class="Fa">dtor</var> arguments are callback functions that are called
- by the UMA subsystem at the time of the call to
- <a class="permalink" href="#uma_zalloc"><code class="Fn">uma_zalloc</code></a>()
- and <code class="Fn">uma_zfree</code>() respectively. Their purpose is to
- provide hooks for initializing or destroying things that need to be done at
- the time of the allocation or release of a resource. A good usage for the
- <var class="Fa">ctor</var> and <var class="Fa">dtor</var> callbacks might be
- to initialize a data structure embedded in the item, such as a
- <a class="Xr">queue(3)</a> head.</p>
-<p class="Pp" id="uma_zalloc~2">The <var class="Fa">zinit</var> and
- <var class="Fa">zfini</var> arguments are used to optimize the allocation of
- items from the zone. They are called by the UMA subsystem whenever it needs
- to allocate or free items to satisfy requests or memory pressure. A good use
- for the <var class="Fa">zinit</var> and <var class="Fa">zfini</var>
- callbacks might be to initialize and destroy a mutex contained within an
- item. This would allow one to avoid destroying and re-initializing the mutex
- each time the item is freed and re-allocated. They are not called on each
- call to
- <a class="permalink" href="#uma_zalloc~2"><code class="Fn">uma_zalloc</code></a>()
- and <code class="Fn">uma_zfree</code>() but rather when an item is imported
- into a zone's cache, and when a zone releases an item to the slab allocator,
- typically as a response to memory pressure.</p>
-<p class="Pp" id="uma_zcache_create">For
- <a class="permalink" href="#uma_zcache_create"><code class="Fn">uma_zcache_create</code></a>(),
- the <var class="Fa">zimport</var> and <var class="Fa">zrelease</var>
- functions are called to import items into the zone and to release items from
- the zone, respectively. The <var class="Fa">zimport</var> function should
- store pointers to items in the <var class="Fa">store</var> array, which
- contains a maximum of <var class="Fa">count</var> entries. The function must
- return the number of imported items, which may be less than the maximum.
- Similarly, the <var class="Fa">store</var> parameter to the
- <var class="Fa">zrelease</var> function contains an array of
- <var class="Fa">count</var> pointers to items. The <var class="Fa">arg</var>
- parameter passed to <code class="Fn">uma_zcache_create</code>() is provided
- to the import and release functions. The <var class="Fa">domain</var>
- parameter to <var class="Fa">zimport</var> specifies the requested
- <a class="Xr">numa(4)</a> domain for the allocation. It is either a NUMA
- domain number or the special value
- <code class="Dv">UMA_ANYDOMAIN</code>.</p>
-<p class="Pp" id="uma_zcreate~2">The <var class="Fa">flags</var> argument of
- <a class="permalink" href="#uma_zcreate~2"><code class="Fn">uma_zcreate</code></a>()
- and <code class="Fn">uma_zcache_create</code>() is a subset of the following
- flags:</p>
-<dl class="Bl-tag">
- <dt id="UMA_ZONE_NOFREE"><a class="permalink" href="#UMA_ZONE_NOFREE"><code class="Dv">UMA_ZONE_NOFREE</code></a></dt>
- <dd>Slabs allocated to the zone's keg are never freed.</dd>
- <dt id="UMA_ZONE_NODUMP"><a class="permalink" href="#UMA_ZONE_NODUMP"><code class="Dv">UMA_ZONE_NODUMP</code></a></dt>
- <dd>Pages belonging to the zone will not be included in minidumps.</dd>
- <dt id="UMA_ZONE_PCPU"><a class="permalink" href="#UMA_ZONE_PCPU"><code class="Dv">UMA_ZONE_PCPU</code></a></dt>
- <dd>An allocation from zone would have <var class="Va">mp_ncpu</var> shadow
- copies, that are privately assigned to CPUs. A CPU can address its private
- copy using base the allocation address plus a multiple of the current CPU
- ID and
- <a class="permalink" href="#sizeof"><code class="Fn" id="sizeof">sizeof</code></a>(<var class="Fa">struct
- pcpu</var>):
- <div class="Bd Pp Bd-indent Li">
- <pre>foo_zone = uma_zcreate(..., UMA_ZONE_PCPU);
- ...
-foo_base = uma_zalloc(foo_zone, ...);
- ...
-critical_enter();
-foo_pcpu = (foo_t *)zpcpu_get(foo_base);
-/* do something with foo_pcpu */
-critical_exit();
-
- </pre>
- </div>
- Note that <code class="Dv">M_ZERO</code> cannot be used when allocating
- items from a PCPU zone. To obtain zeroed memory from a PCPU zone, use the
- <code class="Fn">uma_zalloc_pcpu</code>() function and its variants
- instead, and pass <code class="Dv">M_ZERO</code>.</dd>
- <dt id="UMA_ZONE_NOTOUCH"><a class="permalink" href="#UMA_ZONE_NOTOUCH"><code class="Dv">UMA_ZONE_NOTOUCH</code></a></dt>
- <dd>The UMA subsystem may not directly touch (i.e. read or write) the slab
- memory. Otherwise, by default, book-keeping of items within a slab may be
- done in the slab page itself, and <code class="Dv">INVARIANTS</code>
- kernels may also do use-after-free checking by accessing the slab
- memory.</dd>
- <dt id="UMA_ZONE_ZINIT"><a class="permalink" href="#UMA_ZONE_ZINIT"><code class="Dv">UMA_ZONE_ZINIT</code></a></dt>
- <dd>The zone will have its <var class="Ft">uma_init</var> method set to
- internal method that initializes a new allocated slab to all zeros. Do not
- mistake <var class="Ft">uma_init</var> method with
- <var class="Ft">uma_ctor</var>. A zone with
- <code class="Dv">UMA_ZONE_ZINIT</code> flag would not return zeroed memory
- on every <code class="Fn">uma_zalloc</code>().</dd>
- <dt id="UMA_ZONE_NOTPAGE"><a class="permalink" href="#UMA_ZONE_NOTPAGE"><code class="Dv">UMA_ZONE_NOTPAGE</code></a></dt>
- <dd>An allocator function will be supplied with
- <code class="Fn">uma_zone_set_allocf</code>() and the memory that it
- returns may not be kernel virtual memory backed by VM pages in the page
- array.</dd>
- <dt id="UMA_ZONE_MALLOC"><a class="permalink" href="#UMA_ZONE_MALLOC"><code class="Dv">UMA_ZONE_MALLOC</code></a></dt>
- <dd>The zone is for the <a class="Xr">malloc(9)</a> subsystem.</dd>
- <dt id="UMA_ZONE_VM"><a class="permalink" href="#UMA_ZONE_VM"><code class="Dv">UMA_ZONE_VM</code></a></dt>
- <dd>The zone is for the VM subsystem.</dd>
- <dt id="UMA_ZONE_CONTIG"><a class="permalink" href="#UMA_ZONE_CONTIG"><code class="Dv">UMA_ZONE_CONTIG</code></a></dt>
- <dd>Items in this zone must be contiguous in physical address space. Items
- will follow normal alignment constraints and may span page boundaries
- between pages with contiguous physical addresses.</dd>
- <dt id="UMA_ZONE_UNMANAGED"><a class="permalink" href="#UMA_ZONE_UNMANAGED"><code class="Dv">UMA_ZONE_UNMANAGED</code></a></dt>
- <dd>By default, UMA zone caches are shrunk to help resolve free page
- shortages. Cached items that have not been used for a long period may also
- be freed from zone. When this flag is set, the system will not reclaim
- memory from the zone's caches.</dd>
- <dt id="UMA_ZONE_SMR"><a class="permalink" href="#UMA_ZONE_SMR"><code class="Dv">UMA_ZONE_SMR</code></a></dt>
- <dd>Create a zone whose items will be synchronized using the
- <a class="Xr">smr(9)</a> mechanism. Upon creation the zone will have an
- associated <var class="Ft">smr_t</var> structure which can be fetched
- using
- <a class="permalink" href="#uma_zone_get_smr"><code class="Fn" id="uma_zone_get_smr">uma_zone_get_smr</code></a>().</dd>
-</dl>
-<p class="Pp" id="uma_zdestroy">Zones can be destroyed using
- <a class="permalink" href="#uma_zdestroy"><code class="Fn">uma_zdestroy</code></a>(),
- freeing all memory that is cached in the zone. All items allocated from the
- zone must be freed to the zone before the zone may be safely destroyed.</p>
-<p class="Pp" id="uma_zalloc~3">To allocate an item from a zone, simply call
- <a class="permalink" href="#uma_zalloc~3"><code class="Fn">uma_zalloc</code></a>()
- with a pointer to that zone and set the <var class="Fa">flags</var> argument
- to selected flags as documented in <a class="Xr">malloc(9)</a>. It will
- return a pointer to an item if successful, or <code class="Dv">NULL</code>
- in the rare case where all items in the zone are in use and the allocator is
- unable to grow the zone and <code class="Dv">M_NOWAIT</code> is
- specified.</p>
-<p class="Pp" id="uma_zfree">Items are released back to the zone from which they
- were allocated by calling
- <a class="permalink" href="#uma_zfree"><code class="Fn">uma_zfree</code></a>()
- with a pointer to the zone and a pointer to the item. If
- <var class="Fa">item</var> is <code class="Dv">NULL</code>, then
- <code class="Fn">uma_zfree</code>() does nothing.</p>
-<p class="Pp" id="uma_zalloc_arg">The variants
- <a class="permalink" href="#uma_zalloc_arg"><code class="Fn">uma_zalloc_arg</code></a>()
- and
- <a class="permalink" href="#uma_zfree_arg"><code class="Fn" id="uma_zfree_arg">uma_zfree_arg</code></a>()
- allow callers to specify an argument for the <code class="Dv">ctor</code>
- and <code class="Dv">dtor</code> functions of the zone, respectively. The
- variants
- <a class="permalink" href="#uma_zalloc_pcpu"><code class="Fn" id="uma_zalloc_pcpu">uma_zalloc_pcpu</code></a>()
- and
- <a class="permalink" href="#uma_zfree_pcpu"><code class="Fn" id="uma_zfree_pcpu">uma_zfree_pcpu</code></a>()
- allocate and free <var class="Va">mp_ncpu</var> shadow copies as described
- for <code class="Dv">UMA_ZONE_PCPU</code>. If <var class="Fa">item</var> is
- <code class="Dv">NULL</code>, then <code class="Fn">uma_zfree_pcpu</code>()
- does nothing.</p>
-<p class="Pp" id="uma_zalloc_smr">The
- <a class="permalink" href="#uma_zalloc_smr"><code class="Fn">uma_zalloc_smr</code></a>()
- and
- <a class="permalink" href="#uma_zfree_smr"><code class="Fn" id="uma_zfree_smr">uma_zfree_smr</code></a>()
- functions allocate and free items from an SMR-enabled zone, that is, a zone
- created with <code class="Dv">UMA_ZONE_SMR</code> or a zone that has had
- <code class="Fn">uma_zone_set_smr</code>() called.</p>
-<p class="Pp" id="uma_zalloc_domain">The
- <a class="permalink" href="#uma_zalloc_domain"><code class="Fn">uma_zalloc_domain</code></a>()
- function allows callers to specify a fixed <a class="Xr">numa(4)</a> domain
- to allocate from. This uses a guaranteed but slow path in the allocator
- which reduces concurrency.</p>
-<p class="Pp" id="uma_prealloc">The
- <a class="permalink" href="#uma_prealloc"><code class="Fn">uma_prealloc</code></a>()
- function allocates slabs for the requested number of items, typically
- following the initial creation of a zone. Subsequent allocations from the
- zone will be satisfied using the pre-allocated slabs. Note that slab
- allocation is performed with the <code class="Dv">M_WAITOK</code> flag, so
- <code class="Fn">uma_prealloc</code>() may sleep.</p>
-<p class="Pp" id="uma_zone_reserve">The
- <a class="permalink" href="#uma_zone_reserve"><code class="Fn">uma_zone_reserve</code></a>()
- function sets the number of reserved items for the zone.
- <code class="Fn">uma_zalloc</code>() and variants will ensure that the zone
- contains at least the reserved number of free items. Reserved items may be
- allocated by specifying <code class="Dv">M_USE_RESERVE</code> in the
- allocation request flags. <code class="Fn">uma_zone_reserve</code>() does
- not perform any pre-allocation by itself.</p>
-<p class="Pp" id="uma_zone_reserve_kva">The
- <a class="permalink" href="#uma_zone_reserve_kva"><code class="Fn">uma_zone_reserve_kva</code></a>()
- function pre-allocates kernel virtual address space for the requested number
- of items. Subsequent allocations from the zone will be satisfied using the
- pre-allocated address space. Note that unlike
- <code class="Fn">uma_zone_reserve</code>(),
- <code class="Fn">uma_zone_reserve_kva</code>() does not restrict the use of
- the pre-allocation to <code class="Dv">M_USE_RESERVE</code> requests.</p>
-<p class="Pp" id="uma_reclaim">The
- <a class="permalink" href="#uma_reclaim"><code class="Fn">uma_reclaim</code></a>()
- and
- <a class="permalink" href="#uma_zone_reclaim"><code class="Fn" id="uma_zone_reclaim">uma_zone_reclaim</code></a>()
- functions reclaim cached items from UMA zones, releasing unused memory. The
- <code class="Fn">uma_reclaim</code>() function reclaims items from all
- regular zones, while <code class="Fn">uma_zone_reclaim</code>() reclaims
- items only from the specified zone. The <var class="Fa">req</var> parameter
- must be one of three values which specify how aggressively items are to be
- reclaimed:</p>
-<dl class="Bl-tag">
- <dt id="UMA_RECLAIM_TRIM"><a class="permalink" href="#UMA_RECLAIM_TRIM"><code class="Dv">UMA_RECLAIM_TRIM</code></a></dt>
- <dd>Reclaim items only in excess of the zone's estimated working set size. The
- working set size is periodically updated and tracks the recent history of
- the zone's usage.</dd>
- <dt id="UMA_RECLAIM_DRAIN"><a class="permalink" href="#UMA_RECLAIM_DRAIN"><code class="Dv">UMA_RECLAIM_DRAIN</code></a></dt>
- <dd>Reclaim all items from the unbounded cache. Free items in the per-CPU
- caches are left alone.</dd>
- <dt id="UMA_RECLAIM_DRAIN_CPU"><a class="permalink" href="#UMA_RECLAIM_DRAIN_CPU"><code class="Dv">UMA_RECLAIM_DRAIN_CPU</code></a></dt>
- <dd>Reclaim all cached items.</dd>
-</dl>
-The
- <a class="permalink" href="#uma_reclaim_domain"><code class="Fn" id="uma_reclaim_domain">uma_reclaim_domain</code></a>()
- and
- <a class="permalink" href="#uma_zone_reclaim_domain"><code class="Fn" id="uma_zone_reclaim_domain">uma_zone_reclaim_domain</code></a>()
- functions apply only to items allocated from the specified domain. In the case
- of domains using a round-robin NUMA policy, cached items from all domains are
- freed to the keg, but only slabs from the specific domain will be freed.
-<p class="Pp" id="uma_zone_set_allocf">The
- <a class="permalink" href="#uma_zone_set_allocf"><code class="Fn">uma_zone_set_allocf</code></a>()
- and
- <a class="permalink" href="#uma_zone_set_freef"><code class="Fn" id="uma_zone_set_freef">uma_zone_set_freef</code></a>()
- functions allow a zone's default slab allocation and free functions to be
- overridden. This is useful if memory with special constraints such as
- attributes, alignment, or address ranges must be used.</p>
-<p class="Pp" id="uma_zone_set_max">The
- <a class="permalink" href="#uma_zone_set_max"><code class="Fn">uma_zone_set_max</code></a>()
- function limits the number of items (and therefore memory) that can be
- allocated to <var class="Fa">zone</var>. The <var class="Fa">nitems</var>
- argument specifies the requested upper limit number of items. The effective
- limit is returned to the caller, as it may end up being higher than
- requested due to the implementation rounding up to ensure all memory pages
- allocated to the zone are utilised to capacity. The limit applies to the
- total number of items in the zone, which includes allocated items, free
- items and free items in the per-cpu caches. On systems with more than one
- CPU it may not be possible to allocate the specified number of items even
- when there is no shortage of memory, because all of the remaining free items
- may be in the caches of the other CPUs when the limit is hit.</p>
-<p class="Pp" id="uma_zone_set_maxcache">The
- <a class="permalink" href="#uma_zone_set_maxcache"><code class="Fn">uma_zone_set_maxcache</code></a>()
- function limits the number of free items which may be cached in the zone.
- This limit applies to both the per-CPU caches and the cache of free
- buckets.</p>
-<p class="Pp" id="uma_zone_get_max">The
- <a class="permalink" href="#uma_zone_get_max"><code class="Fn">uma_zone_get_max</code></a>()
- function returns the effective upper limit number of items for a zone.</p>
-<p class="Pp" id="uma_zone_get_cur">The
- <a class="permalink" href="#uma_zone_get_cur"><code class="Fn">uma_zone_get_cur</code></a>()
- function returns an approximation of the number of items currently allocated
- from the zone. The returned value is approximate because appropriate
- synchronisation to determine an exact value is not performed by the
- implementation. This ensures low overhead at the expense of potentially
- stale data being used in the calculation.</p>
-<p class="Pp" id="uma_zone_set_warning">The
- <a class="permalink" href="#uma_zone_set_warning"><code class="Fn">uma_zone_set_warning</code></a>()
- function sets a warning that will be printed on the system console when the
- given zone becomes full and fails to allocate an item. The warning will be
- printed no more often than every five minutes. Warnings can be turned off
- globally by setting the <var class="Va">vm.zone_warnings</var> sysctl
- tunable to <var class="Va">0</var>.</p>
-<p class="Pp" id="uma_zone_set_maxaction">The
- <a class="permalink" href="#uma_zone_set_maxaction"><code class="Fn">uma_zone_set_maxaction</code></a>()
- function sets a function that will be called when the given zone becomes
- full and fails to allocate an item. The function will be called with the
- zone locked. Also, the function that called the allocation function may have
- held additional locks. Therefore, this function should do very little work
- (similar to a signal handler).</p>
-<p class="Pp" id="uma_zone_set_smr">The
- <a class="permalink" href="#uma_zone_set_smr"><code class="Fn">uma_zone_set_smr</code></a>()
- function associates an existing <a class="Xr">smr(9)</a> structure with a
- UMA zone. The effect is similar to creating a zone with the
- <code class="Dv">UMA_ZONE_SMR</code> flag, except that a new SMR structure
- is not created. This function must be called before any allocations from the
- zone are performed.</p>
-<p class="Pp" id="SYSCTL_UMA_MAX">The
- <a class="permalink" href="#SYSCTL_UMA_MAX"><code class="Fn">SYSCTL_UMA_MAX</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">nbr</var>, <var class="Fa">name</var>,
- <var class="Fa">access</var>, <var class="Fa">zone</var>,
- <var class="Fa">descr</var>) macro declares a static
- <a class="Xr">sysctl(9)</a> oid that exports the effective upper limit
- number of items for a zone. The <var class="Fa">zone</var> argument should
- be a pointer to <var class="Vt">uma_zone_t</var>. A read of the oid returns
- value obtained through <code class="Fn">uma_zone_get_max</code>(). A write
- to the oid sets new value via <code class="Fn">uma_zone_set_max</code>().
- The
- <a class="permalink" href="#SYSCTL_ADD_UMA_MAX"><code class="Fn" id="SYSCTL_ADD_UMA_MAX">SYSCTL_ADD_UMA_MAX</code></a>(<var class="Fa">ctx</var>,
- <var class="Fa">parent</var>, <var class="Fa">nbr</var>,
- <var class="Fa">name</var>, <var class="Fa">access</var>,
- <var class="Fa">zone</var>, <var class="Fa">descr</var>) macro is provided
- to create this type of oid dynamically.</p>
-<p class="Pp" id="SYSCTL_UMA_CUR">The
- <a class="permalink" href="#SYSCTL_UMA_CUR"><code class="Fn">SYSCTL_UMA_CUR</code></a>(<var class="Fa">parent</var>,
- <var class="Fa">nbr</var>, <var class="Fa">name</var>,
- <var class="Fa">access</var>, <var class="Fa">zone</var>,
- <var class="Fa">descr</var>) macro declares a static read-only
- <a class="Xr">sysctl(9)</a> oid that exports the approximate current
- occupancy of the zone. The <var class="Fa">zone</var> argument should be a
- pointer to <var class="Vt">uma_zone_t</var>. A read of the oid returns value
- obtained through <code class="Fn">uma_zone_get_cur</code>(). The
- <a class="permalink" href="#SYSCTL_ADD_UMA_CUR"><code class="Fn" id="SYSCTL_ADD_UMA_CUR">SYSCTL_ADD_UMA_CUR</code></a>(<var class="Fa">ctx</var>,
- <var class="Fa">parent</var>, <var class="Fa">nbr</var>,
- <var class="Fa">name</var>, <var class="Fa">zone</var>,
- <var class="Fa">descr</var>) macro is provided to create this type of oid
- dynamically.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
- NOTES</a></h1>
-<p class="Pp">The memory that these allocation calls return is not executable.
- The <code class="Fn">uma_zalloc</code>() function does not support the
- <code class="Dv">M_EXEC</code> flag to allocate executable memory. Not all
- platforms enforce a distinction between executable and non-executable
- memory.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">vmstat(8)</a>,
- <a class="Xr">malloc(9)</a>, <a class="Xr">smr(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Jeff Bonwick</span>,
- <span class="RsT">The Slab Allocator: An Object-Caching Kernel Memory
- Allocator</span>, <span class="RsD">1994</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The zone allocator first appeared in <span class="Ux">FreeBSD
- 3.0</span>. It was radically changed in <span class="Ux">FreeBSD 5.0</span>
- to function as a slab allocator.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The zone allocator was written by <span class="An">John S.
- Dyson</span>. The zone allocator was rewritten in large parts by
- <span class="An">Jeff Roberson</span>
- &lt;<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>&gt; to
- function as a slab allocator.</p>
-<p class="Pp">This manual page was written by <span class="An">Dag-Erling
- Sm&#x00F8;rgrav</span>
- &lt;<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>&gt;.
- Changes for UMA by <span class="An">Jeroen Ruigrok van der Werven</span>
- &lt;<a class="Mt" href="mailto:asmodai@FreeBSD.org">asmodai@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 16, 2023</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>