freebsd-skq/share/man/man9/Makefile

2386 lines
67 KiB
Makefile
Raw Normal View History

1999-08-28 00:22:10 +00:00
# $FreeBSD$
.include <src.opts.mk>
MAN= accept_filter.9 \
accf_data.9 \
accf_dns.9 \
accf_http.9 \
acl.9 \
alq.9 \
altq.9 \
atomic.9 \
bhnd.9 \
bhnd_erom.9 \
bios.9 \
2015-10-17 19:55:58 +00:00
bitset.9 \
boot.9 \
bpf.9 \
buf.9 \
buf_ring.9 \
BUF_ISLOCKED.9 \
BUF_LOCK.9 \
BUF_LOCKFREE.9 \
BUF_LOCKINIT.9 \
BUF_RECURSED.9 \
BUF_TIMELOCK.9 \
BUF_UNLOCK.9 \
bus_activate_resource.9 \
BUS_ADD_CHILD.9 \
bus_adjust_resource.9 \
bus_alloc_resource.9 \
BUS_BIND_INTR.9 \
bus_child_present.9 \
BUS_CHILD_DELETED.9 \
BUS_CHILD_DETACHED.9 \
BUS_CONFIG_INTR.9 \
bus_delayed_attach_children.9 \
BUS_DESCRIBE_INTR.9 \
bus_dma.9 \
bus_generic_attach.9 \
bus_generic_detach.9 \
Add support for multiple passes of the device tree during the boot-time probe. The current device order is unchanged. This commit just adds the infrastructure and ABI changes so that it is easier to merge later changes into 8.x. - Driver attachments now have an associated pass level. Attachments are not allowed to probe or attach to drivers until the system-wide pass level is >= the attachment's pass level. By default driver attachments use the "last" pass level (BUS_PASS_DEFAULT). Driver's that wish to probe during an earlier pass use EARLY_DRIVER_MODULE() instead of DRIVER_MODULE() which accepts the pass level as an additional parameter. - A new method BUS_NEW_PASS has been added to the bus interface. This method is invoked when the system-wide pass level is changed to kick off a rescan of the device tree so that drivers that have just been made "eligible" can probe and attach. - The bus_generic_new_pass() function provides a default implementation of BUS_NEW_PASS(). It first allows drivers that were just made eligible for this pass to identify new child devices. Then it propogates the rescan to child devices that already have an attached driver by invoking their BUS_NEW_PASS() method. It also reprobes devices without a driver. - BUS_PROBE_NOMATCH() is only invoked for devices that do not have an attached driver after being scanned during the final pass. - The bus_set_pass() function is used during boot to raise the pass level. Currently it is only called once during root_bus_configure() to raise the pass level to BUS_PASS_DEFAULT. This has the effect of probing all devices in a single pass identical to previous behavior. Reviewed by: imp Approved by: re (kib)
2009-06-09 14:26:23 +00:00
bus_generic_new_pass.9 \
bus_generic_print_child.9 \
bus_generic_read_ivar.9 \
bus_generic_shutdown.9 \
Add a new bus method to fetch device-specific CPU sets. bus_get_cpus() returns a specified set of CPUs for a device. It accepts an enum for the second parameter that indicates the type of cpuset to request. Currently two valus are supported: - LOCAL_CPUS (on x86 this returns all the CPUs in the package closest to the device when DEVICE_NUMA is enabled) - INTR_CPUS (like LOCAL_CPUS but only returns 1 SMT thread for each core) For systems that do not support NUMA (or if it is not enabled in the kernel config), LOCAL_CPUS fails with EINVAL. INTR_CPUS is mapped to 'all_cpus' by default. The idea is that INTR_CPUS should always return a valid set. Device drivers which want to use per-CPU interrupts should start using INTR_CPUS instead of simply assigning interrupts to all available CPUs. In the future we may wish to add tunables to control the policy of INTR_CPUS (e.g. should it be local-only or global, should it ignore SMT threads or not). The x86 nexus driver exposes the internal set of interrupt CPUs from the the x86 interrupt code via INTR_CPUS. The ACPI bus driver and PCI bridge drivers use _PXM to return a suitable LOCAL_CPUS set when _PXM exists and DEVICE_NUMA is enabled. They also and the global INTR_CPUS set from the nexus driver with the per-domain set from _PXM to generate a local INTR_CPUS set for child devices. Compared to the r298933, this version uses 'struct _cpuset' in <sys/bus.h> instead of 'cpuset_t' to avoid requiring <sys/param.h> (<sys/_cpuset.h> still requires <sys/param.h> for MAXCPU even though <sys/_bitset.h> does not after recent changes).
2016-05-09 20:50:21 +00:00
BUS_GET_CPUS.9 \
bus_get_resource.9 \
Add new bus methods for mapping resources. Add a pair of bus methods that can be used to "map" resources for direct CPU access using bus_space(9). bus_map_resource() creates a mapping and bus_unmap_resource() releases a previously created mapping. Mappings are described by 'struct resource_map' object. Pointers to these objects can be passed as the first argument to the bus_space wrapper API used for bus resources. Drivers that wish to map all of a resource using default settings (for example, using uncacheable memory attributes) do not need to change. However, drivers that wish to use non-default settings can now do so without jumping through hoops. First, an RF_UNMAPPED flag is added to request that a resource is not implicitly mapped with the default settings when it is activated. This permits other activation steps (such as enabling I/O or memory decoding in a device's PCI command register) to be taken without creating a mapping. Right now the AGP drivers don't set RF_ACTIVE to avoid using up a large amount of KVA to map the AGP aperture on 32-bit platforms. Once RF_UNMAPPED is supported on all platforms that support AGP this can be changed to using RF_UNMAPPED with RF_ACTIVE instead. Second, bus_map_resource accepts an optional structure that defines additional settings for a given mapping. For example, a driver can now request to map only a subset of a resource instead of the entire range. The AGP driver could also use this to only map the first page of the aperture (IIRC, it calls pmap_mapdev() directly to map the first page currently). I will also eventually change the PCI-PCI bridge driver to request mappings of the subset of the I/O window resource on its parent side to create mappings for child devices rather than passing child resources directly up to nexus to be mapped. This also permits bridges that do address translation to request suitable mappings from a resource on the "upper" side of the bus when mapping resources on the "lower" side of the bus. Another attribute that can be specified is an alternate memory attribute for memory-mapped resources. This can be used to request a Write-Combining mapping of a PCI BAR in an MI fashion. (Currently the drivers that do this call pmap_change_attr() directly for x86 only.) Note that this commit only adds the MI framework. Each platform needs to add support for handling RF_UNMAPPED and thew new bus_map/unmap_resource methods. Generally speaking, any drivers that are calling rman_set_bustag() and rman_set_bushandle() need to be updated. Discussed on: arch Reviewed by: cem Differential Revision: https://reviews.freebsd.org/D5237
2016-05-20 17:57:47 +00:00
bus_map_resource.9 \
Add support for multiple passes of the device tree during the boot-time probe. The current device order is unchanged. This commit just adds the infrastructure and ABI changes so that it is easier to merge later changes into 8.x. - Driver attachments now have an associated pass level. Attachments are not allowed to probe or attach to drivers until the system-wide pass level is >= the attachment's pass level. By default driver attachments use the "last" pass level (BUS_PASS_DEFAULT). Driver's that wish to probe during an earlier pass use EARLY_DRIVER_MODULE() instead of DRIVER_MODULE() which accepts the pass level as an additional parameter. - A new method BUS_NEW_PASS has been added to the bus interface. This method is invoked when the system-wide pass level is changed to kick off a rescan of the device tree so that drivers that have just been made "eligible" can probe and attach. - The bus_generic_new_pass() function provides a default implementation of BUS_NEW_PASS(). It first allows drivers that were just made eligible for this pass to identify new child devices. Then it propogates the rescan to child devices that already have an attached driver by invoking their BUS_NEW_PASS() method. It also reprobes devices without a driver. - BUS_PROBE_NOMATCH() is only invoked for devices that do not have an attached driver after being scanned during the final pass. - The bus_set_pass() function is used during boot to raise the pass level. Currently it is only called once during root_bus_configure() to raise the pass level to BUS_PASS_DEFAULT. This has the effect of probing all devices in a single pass identical to previous behavior. Reviewed by: imp Approved by: re (kib)
2009-06-09 14:26:23 +00:00
BUS_NEW_PASS.9 \
BUS_PRINT_CHILD.9 \
BUS_READ_IVAR.9 \
BUS_RESCAN.9 \
bus_release_resource.9 \
Add support for multiple passes of the device tree during the boot-time probe. The current device order is unchanged. This commit just adds the infrastructure and ABI changes so that it is easier to merge later changes into 8.x. - Driver attachments now have an associated pass level. Attachments are not allowed to probe or attach to drivers until the system-wide pass level is >= the attachment's pass level. By default driver attachments use the "last" pass level (BUS_PASS_DEFAULT). Driver's that wish to probe during an earlier pass use EARLY_DRIVER_MODULE() instead of DRIVER_MODULE() which accepts the pass level as an additional parameter. - A new method BUS_NEW_PASS has been added to the bus interface. This method is invoked when the system-wide pass level is changed to kick off a rescan of the device tree so that drivers that have just been made "eligible" can probe and attach. - The bus_generic_new_pass() function provides a default implementation of BUS_NEW_PASS(). It first allows drivers that were just made eligible for this pass to identify new child devices. Then it propogates the rescan to child devices that already have an attached driver by invoking their BUS_NEW_PASS() method. It also reprobes devices without a driver. - BUS_PROBE_NOMATCH() is only invoked for devices that do not have an attached driver after being scanned during the final pass. - The bus_set_pass() function is used during boot to raise the pass level. Currently it is only called once during root_bus_configure() to raise the pass level to BUS_PASS_DEFAULT. This has the effect of probing all devices in a single pass identical to previous behavior. Reviewed by: imp Approved by: re (kib)
2009-06-09 14:26:23 +00:00
bus_set_pass.9 \
bus_set_resource.9 \
BUS_SETUP_INTR.9 \
bus_space.9 \
byteorder.9 \
callout.9 \
casuword.9 \
cd.9 \
cnv.9 \
condvar.9 \
config_intrhook.9 \
2004-03-06 08:01:16 +00:00
contigmalloc.9 \
copy.9 \
counter.9 \
cpuset.9 \
cr_cansee.9 \
critical_enter.9 \
cr_seeothergids.9 \
cr_seeotheruids.9 \
crypto.9 \
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
crypto_asym.9 \
Add support for optional separate output buffers to in-kernel crypto. Some crypto consumers such as GELI and KTLS for file-backed sendfile need to store their output in a separate buffer from the input. Currently these consumers copy the contents of the input buffer into the output buffer and queue an in-place crypto operation on the output buffer. Using a separate output buffer avoids this copy. - Create a new 'struct crypto_buffer' describing a crypto buffer containing a type and type-specific fields. crp_ilen is gone, instead buffers that use a flat kernel buffer have a cb_buf_len field for their length. The length of other buffer types is inferred from the backing store (e.g. uio_resid for a uio). Requests now have two such structures: crp_buf for the input buffer, and crp_obuf for the output buffer. - Consumers now use helper functions (crypto_use_*, e.g. crypto_use_mbuf()) to configure the input buffer. If an output buffer is not configured, the request still modifies the input buffer in-place. A consumer uses a second set of helper functions (crypto_use_output_*) to configure an output buffer. - Consumers must request support for separate output buffers when creating a crypto session via the CSP_F_SEPARATE_OUTPUT flag and are only permitted to queue a request with a separate output buffer on sessions with this flag set. Existing drivers already reject sessions with unknown flags, so this permits drivers to be modified to support this extension without requiring all drivers to change. - Several data-related functions now have matching versions that operate on an explicit buffer (e.g. crypto_apply_buf, crypto_contiguous_subsegment_buf, bus_dma_load_crp_buf). - Most of the existing data-related functions operate on the input buffer. However crypto_copyback always writes to the output buffer if a request uses a separate output buffer. - For the regions in input/output buffers, the following conventions are followed: - AAD and IV are always present in input only and their fields are offsets into the input buffer. - payload is always present in both buffers. If a request uses a separate output buffer, it must set a new crp_payload_start_output field to the offset of the payload in the output buffer. - digest is in the input buffer for verify operations, and in the output buffer for compute operations. crp_digest_start is relative to the appropriate buffer. - Add a crypto buffer cursor abstraction. This is a more general form of some bits in the cryptosoft driver that tried to always use uio's. However, compared to the original code, this avoids rewalking the uio iovec array for requests with multiple vectors. It also avoids allocate an iovec array for mbufs and populating it by instead walking the mbuf chain directly. - Update the cryptosoft(4) driver to support separate output buffers making use of the cursor abstraction. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D24545
2020-05-25 22:12:04 +00:00
crypto_buffer.9 \
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
crypto_driver.9 \
crypto_request.9 \
crypto_session.9 \
CTASSERT.9 \
DB_COMMAND.9 \
DECLARE_GEOM_CLASS.9 \
DECLARE_MODULE.9 \
DEFINE_IFUNC.9 \
DELAY.9 \
devclass.9 \
devclass_find.9 \
devclass_get_device.9 \
devclass_get_devices.9 \
devclass_get_drivers.9 \
devclass_get_maxunit.9 \
devclass_get_name.9 \
devclass_get_softc.9 \
dev_clone.9 \
devfs_set_cdevpriv.9 \
device.9 \
device_add_child.9 \
DEVICE_ATTACH.9 \
device_delete_child.9 \
device_delete_children.9 \
DEVICE_DETACH.9 \
device_enable.9 \
device_find_child.9 \
device_get_children.9 \
device_get_devclass.9 \
device_get_driver.9 \
device_get_ivars.9 \
device_get_name.9 \
device_get_parent.9 \
device_get_softc.9 \
device_get_state.9 \
device_get_sysctl.9 \
device_get_unit.9 \
DEVICE_IDENTIFY.9 \
device_printf.9 \
DEVICE_PROBE.9 \
device_probe_and_attach.9 \
device_quiet.9 \
device_set_desc.9 \
device_set_driver.9 \
device_set_flags.9 \
DEVICE_SHUTDOWN.9 \
DEV_MODULE.9 \
dev_refthread.9 \
devstat.9 \
devtoname.9 \
disk.9 \
dnv.9 \
domain.9 \
domainset.9 \
dpcpu.9 \
drbr.9 \
driver.9 \
DRIVER_MODULE.9 \
efirt.9 \
epoch.9 \
EVENTHANDLER.9 \
eventtimers.9 \
2001-07-10 07:42:35 +00:00
extattr.9 \
fail.9 \
fdt_pinctrl.9 \
fetch.9 \
firmware.9 \
fpu_kern.9 \
2004-03-11 19:51:14 +00:00
g_access.9 \
g_attach.9 \
g_bio.9 \
g_consumer.9 \
g_data.9 \
get_cyclecount.9 \
getenv.9 \
getnewvnode.9 \
g_event.9 \
g_geom.9 \
g_provider.9 \
g_provider_by_name.9 \
groupmember.9 \
g_wither_geom.9 \
hash.9 \
hashinit.9 \
hexdump.9 \
hhook.9 \
ieee80211.9 \
ieee80211_amrr.9 \
ieee80211_beacon.9 \
ieee80211_bmiss.9 \
ieee80211_crypto.9 \
ieee80211_ddb.9 \
ieee80211_input.9 \
ieee80211_node.9 \
ieee80211_output.9 \
ieee80211_proto.9 \
ieee80211_radiotap.9 \
ieee80211_regdomain.9 \
ieee80211_scan.9 \
ieee80211_vap.9 \
iflib.9 \
iflibdd.9 \
iflibdi.9 \
iflibtxrx.9 \
ifnet.9 \
inittodr.9 \
2008-02-26 21:11:05 +00:00
insmntque.9 \
intro.9 \
ithread.9 \
KASSERT.9 \
kern_testfrwk.9 \
kernacc.9 \
kernel_mount.9 \
khelp.9 \
kobj.9 \
2007-10-26 16:50:21 +00:00
kproc.9 \
kqueue.9 \
kthread.9 \
ktr.9 \
lock.9 \
locking.9 \
LOCK_PROFILING.9 \
mac.9 \
make_dev.9 \
malloc.9 \
mbchain.9 \
mbuf.9 \
mbuf_tags.9 \
MD5.9 \
mdchain.9 \
memcchr.9 \
2005-02-22 17:42:12 +00:00
memguard.9 \
microseq.9 \
microtime.9 \
microuptime.9 \
mi_switch.9 \
mod_cc.9 \
module.9 \
MODULE_DEPEND.9 \
MODULE_PNP_INFO.9 \
MODULE_VERSION.9 \
mtx_pool.9 \
mutex.9 \
namei.9 \
netisr.9 \
nv.9 \
OF_child.9 \
OF_device_from_xref.9 \
OF_finddevice.9 \
OF_getprop.9 \
OF_node_from_xref.9 \
OF_package_to_path.9 \
ofw_bus_is_compatible.9 \
ofw_bus_status_okay.9 \
osd.9 \
owll.9 \
own.9 \
panic.9 \
PCBGROUP.9 \
p_candebug.9 \
p_cansee.9 \
pci.9 \
PCI_IOV_ADD_VF.9 \
PCI_IOV_INIT.9 \
pci_iov_schema.9 \
PCI_IOV_UNINIT.9 \
pfil.9 \
pfind.9 \
pget.9 \
pgfind.9 \
PHOLD.9 \
physio.9 \
pmap.9 \
pmap_activate.9 \
pmap_clear_modify.9 \
pmap_copy.9 \
pmap_enter.9 \
pmap_extract.9 \
pmap_growkernel.9 \
pmap_init.9 \
pmap_is_modified.9 \
pmap_is_prefaultable.9 \
pmap_map.9 \
pmap_mincore.9 \
pmap_object_init_pt.9 \
pmap_page_exists_quick.9 \
pmap_page_init.9 \
pmap_pinit.9 \
2014-07-18 06:56:24 +00:00
pmap_protect.9 \
pmap_qenter.9 \
pmap_quick_enter_page.9 \
pmap_release.9 \
pmap_remove.9 \
pmap_resident_count.9 \
pmap_unwire.9 \
pmap_zero_page.9 \
printf.9 \
prison_check.9 \
Add a new priv(9) kernel interface for checking the availability of privilege for threads and credentials. Unlike the existing suser(9) interface, priv(9) exposes a named privilege identifier to the privilege checking code, allowing more complex policies regarding the granting of privilege to be expressed. Two interfaces are provided, replacing the existing suser(9) interface: suser(td) -> priv_check(td, priv) suser_cred(cred, flags) -> priv_check_cred(cred, priv, flags) A comprehensive list of currently available kernel privileges may be found in priv.h. New privileges are easily added as required, but the comments on adding privileges found in priv.h and priv(9) should be read before doing so. The new privilege interface exposed sufficient information to the privilege checking routine that it will now be possible for jail to determine whether a particular privilege is granted in the check routine, rather than relying on hints from the calling context via the SUSER_ALLOWJAIL flag. For now, the flag is maintained, but a new jail check function, prison_priv_check(), is exposed from kern_jail.c and used by the privilege check routine to determine if the privilege is permitted in jail. As a result, a centralized list of privileges permitted in jail is now present in kern_jail.c. The MAC Framework is now also able to instrument privilege checks, both to deny privileges otherwise granted (mac_priv_check()), and to grant privileges otherwise denied (mac_priv_grant()), permitting MAC Policy modules to implement privilege models, as well as control a much broader range of system behavior in order to constrain processes running with root privilege. The suser() and suser_cred() functions remain implemented, now in terms of priv_check() and the PRIV_ROOT privilege, for use during the transition and possibly continuing use by third party kernel modules that have not been updated. The PRIV_DRIVER privilege exists to allow device drivers to check privilege without adopting a more specific privilege identifier. This change does not modify the actual security policy, rather, it modifies the interface for privilege checks so changes to the security policy become more feasible. Sponsored by: nCircle Network Security, Inc. Obtained from: TrustedBSD Project Discussed on: arch@ Reviewed (at least in part) by: mlaier, jmg, pjd, bde, ceri, Alex Lyashkov <umka at sevcity dot net>, Skip Ford <skip dot ford at verizon dot net>, Antoine Brodin <antoine dot brodin at laposte dot net>
2006-11-06 13:37:19 +00:00
priv.9 \
prng.9 \
proc_rwmem.9 \
pseudofs.9 \
psignal.9 \
pwmbus.9 \
random.9 \
random_harvest.9 \
ratecheck.9 \
redzone.9 \
refcount.9 \
resettodr.9 \
resource_int_value.9 \
rijndael.9 \
rman.9 \
rmlock.9 \
rtalloc.9 \
rtentry.9 \
runqueue.9 \
rwlock.9 \
sbuf.9 \
scheduler.9 \
SDT.9 \
securelevel_gt.9 \
selrecord.9 \
sema.9 \
seqc.9 \
sf_buf.9 \
sglist.9 \
shm_map.9 \
signal.9 \
sleep.9 \
sleepqueue.9 \
socket.9 \
stack.9 \
store.9 \
style.9 \
style.lua.9 \
${_superio.9} \
swi.9 \
sx.9 \
syscall_helper_register.9 \
SYSCALL_MODULE.9 \
sysctl.9 \
sysctl_add_oid.9 \
sysctl_ctx_init.9 \
SYSINIT.9 \
taskqueue.9 \
tcp_functions.9 \
thread_exit.9 \
time.9 \
tvtohz.9 \
ucred.9 \
uidinfo.9 \
uio.9 \
unr.9 \
vaccess.9 \
vaccess_acl_nfs4.9 \
vaccess_acl_posix1e.9 \
vcount.9 \
vflush.9 \
VFS.9 \
vfs_busy.9 \
VFS_CHECKEXP.9 \
vfsconf.9 \
VFS_FHTOVP.9 \
vfs_getnewfsid.9 \
vfs_getopt.9 \
vfs_getvfs.9 \
VFS_MOUNT.9 \
2008-02-26 21:40:30 +00:00
vfs_mountedfrom.9 \
VFS_QUOTACTL.9 \
VFS_ROOT.9 \
vfs_rootmountalloc.9 \
VFS_SET.9 \
VFS_STATFS.9 \
2004-07-09 22:33:43 +00:00
vfs_suser.9 \
VFS_SYNC.9 \
vfs_timestamp.9 \
vfs_unbusy.9 \
VFS_UNMOUNT.9 \
vfs_unmountall.9 \
VFS_VGET.9 \
vget.9 \
vgone.9 \
vhold.9 \
vinvalbuf.9 \
vm_fault_prefault.9 \
vm_map.9 \
vm_map_check_protection.9 \
vm_map_create.9 \
vm_map_delete.9 \
vm_map_entry_resize_free.9 \
vm_map_find.9 \
vm_map_findspace.9 \
vm_map_inherit.9 \
vm_map_init.9 \
vm_map_insert.9 \
vm_map_lock.9 \
vm_map_lookup.9 \
vm_map_madvise.9 \
vm_map_max.9 \
vm_map_protect.9 \
vm_map_remove.9 \
vm_map_simplify_entry.9 \
vm_map_stack.9 \
vm_map_submap.9 \
vm_map_sync.9 \
vm_map_wire.9 \
vm_page_alloc.9 \
vm_page_bits.9 \
2013-08-26 16:38:40 +00:00
vm_page_busy.9 \
vm_page_deactivate.9 \
vm_page_dontneed.9 \
vm_page_aflag.9 \
vm_page_free.9 \
vm_page_grab.9 \
vm_page_insert.9 \
vm_page_lookup.9 \
vm_page_rename.9 \
vm_page_wire.9 \
vm_set_page_size.9 \
vmem.9 \
vn_fullpath.9 \
vn_isdisk.9 \
vnet.9 \
vnode.9 \
VOP_ACCESS.9 \
VOP_ACLCHECK.9 \
VOP_ADVISE.9 \
VOP_ADVLOCK.9 \
VOP_ALLOCATE.9 \
VOP_ATTRIB.9 \
VOP_BMAP.9 \
VOP_BWRITE.9 \
VOP_COPY_FILE_RANGE.9 \
VOP_CREATE.9 \
VOP_FSYNC.9 \
VOP_GETACL.9 \
VOP_GETEXTATTR.9 \
VOP_GETPAGES.9 \
VOP_INACTIVE.9 \
VOP_IOCTL.9 \
VOP_LINK.9 \
VOP_LISTEXTATTR.9 \
VOP_LOCK.9 \
VOP_LOOKUP.9 \
VOP_OPENCLOSE.9 \
VOP_PATHCONF.9 \
VOP_PRINT.9 \
VOP_RDWR.9 \
VOP_READDIR.9 \
VOP_READLINK.9 \
VOP_REALLOCBLKS.9 \
VOP_REMOVE.9 \
VOP_RENAME.9 \
VOP_REVOKE.9 \
VOP_SETACL.9 \
VOP_SETEXTATTR.9 \
VOP_STRATEGY.9 \
VOP_VPTOCNP.9 \
VOP_VPTOFH.9 \
vref.9 \
2008-02-26 20:10:32 +00:00
vrefcnt.9 \
vrele.9 \
2001-07-10 07:42:35 +00:00
vslock.9 \
watchdog.9 \
zone.9
MLINKS= unr.9 alloc_unr.9 \
unr.9 alloc_unrl.9 \
unr.9 alloc_unr_specific.9 \
unr.9 clear_unrhdr.9 \
unr.9 delete_unrhdr.9 \
unr.9 free_unr.9 \
unr.9 new_unrhdr.9
MLINKS+=accept_filter.9 accept_filt_add.9 \
accept_filter.9 accept_filt_del.9 \
accept_filter.9 accept_filt_generic_mod_event.9 \
accept_filter.9 accept_filt_get.9
MLINKS+=alq.9 ALQ.9 \
alq.9 alq_close.9 \
alq.9 alq_flush.9 \
alq.9 alq_get.9 \
alq.9 alq_getn.9 \
alq.9 alq_open.9 \
alq.9 alq_open_flags.9 \
alq.9 alq_post.9 \
alq.9 alq_post_flags.9 \
alq.9 alq_write.9 \
alq.9 alq_writen.9
MLINKS+=altq.9 ALTQ.9
MLINKS+=atomic.9 atomic_add.9 \
atomic.9 atomic_clear.9 \
atomic.9 atomic_cmpset.9 \
2018-06-26 09:30:14 +00:00
atomic.9 atomic_fcmpset.9 \
atomic.9 atomic_fetchadd.9 \
atomic.9 atomic_load.9 \
atomic.9 atomic_readandclear.9 \
atomic.9 atomic_set.9 \
atomic.9 atomic_store.9 \
atomic.9 atomic_subtract.9 \
atomic.9 atomic_swap.9 \
atomic.9 atomic_testandclear.9 \
atomic.9 atomic_testandset.9 \
atomic.9 atomic_thread_fence.9
MLINKS+=bhnd.9 BHND_MATCH_BOARD_TYPE.9 \
bhnd.9 BHND_MATCH_BOARD_VENDOR.9 \
bhnd.9 BHND_MATCH_CHIP_ID.9 \
bhnd.9 BHND_MATCH_CHIP_PKG.9 \
bhnd.9 BHND_MATCH_CHIP_REV.9 \
bhnd.9 BHND_MATCH_CORE_ID.9 \
bhnd.9 BHND_MATCH_CORE_VENDOR.9 \
bhnd.9 bhnd_activate_resource.9 \
bhnd.9 bhnd_alloc_pmu.9 \
bhnd.9 bhnd_alloc_resource.9 \
bhnd.9 bhnd_alloc_resource_any.9 \
bhnd.9 bhnd_alloc_resources.9 \
bhnd.9 bhnd_board_matches.9 \
bhnd.9 bhnd_bus_match_child.9 \
bhnd.9 bhnd_bus_read_1.9 \
bhnd.9 bhnd_bus_read_2.9 \
bhnd.9 bhnd_bus_read_4.9 \
bhnd.9 bhnd_bus_read_stream_1.9 \
bhnd.9 bhnd_bus_read_stream_2.9 \
bhnd.9 bhnd_bus_read_stream_4.9 \
bhnd.9 bhnd_bus_write_1.9 \
bhnd.9 bhnd_bus_write_2.9 \
bhnd.9 bhnd_bus_write_4.9 \
bhnd.9 bhnd_bus_write_stream_1.9 \
bhnd.9 bhnd_bus_write_stream_2.9 \
bhnd.9 bhnd_bus_write_stream_4.9 \
bhnd.9 bhnd_chip_matches.9 \
bhnd.9 bhnd_core_class.9 \
bhnd.9 bhnd_core_get_match_desc.9 \
bhnd.9 bhnd_core_matches.9 \
bhnd.9 bhnd_core_name.9 \
bhnd.9 bhnd_cores_equal.9 \
bhnd.9 bhnd_deactivate_resource.9 \
bhnd.9 bhnd_decode_port_rid.9 \
bhnd.9 bhnd_deregister_provider.9 \
bhnd.9 bhnd_device_lookup.9 \
bhnd.9 bhnd_device_matches.9 \
bhnd.9 bhnd_device_quirks.9 \
bhnd.9 bhnd_driver_get_erom_class.9 \
bhnd.9 bhnd_enable_clocks.9 \
bhnd.9 bhnd_find_core_class.9 \
bhnd.9 bhnd_find_core_name.9 \
bhnd.9 bhnd_format_chip_id.9 \
bhnd.9 bhnd_get_attach_type.9 \
bhnd.9 bhnd_get_chipid.9 \
bhnd.9 bhnd_get_class.9 \
bhnd.9 bhnd_get_clock_freq.9 \
bhnd.9 bhnd_get_clock_latency.9 \
bhnd.9 bhnd_get_core_index.9 \
bhnd.9 bhnd_get_core_info.9 \
bhnd.9 bhnd_get_core_unit.9 \
bhnd.9 bhnd_get_device.9 \
bhnd.9 bhnd_get_device_name.9 \
bhnd.9 bhnd_get_dma_translation.9 \
bhnd.9 bhnd_get_hwrev.9 \
bhnd.9 bhnd_get_intr_count.9 \
bhnd.9 bhnd_get_intr_ivec.9 \
bhnd.9 bhnd_get_port_count.9 \
bhnd.9 bhnd_get_port_rid.9 \
bhnd.9 bhnd_get_region_addr.9 \
bhnd.9 bhnd_get_region_count.9 \
bhnd.9 bhnd_get_vendor.9 \
bhnd.9 bhnd_get_vendor_name.9 \
bhnd.9 bhnd_hwrev_matches.9 \
bhnd.9 bhnd_is_hw_suspended.9 \
bhnd.9 bhnd_is_region_valid.9 \
bhnd.9 bhnd_map_intr.9 \
bhnd.9 bhnd_match_core.9 \
bhnd.9 bhnd_nvram_getvar.9 \
bhnd.9 bhnd_nvram_getvar_array.9 \
bhnd.9 bhnd_nvram_getvar_int.9 \
bhnd.9 bhnd_nvram_getvar_int16.9 \
bhnd.9 bhnd_nvram_getvar_int32.9 \
bhnd.9 bhnd_nvram_getvar_int8.9 \
bhnd.9 bhnd_nvram_getvar_str.9 \
bhnd.9 bhnd_nvram_getvar_uint.9 \
bhnd.9 bhnd_nvram_getvar_uint16.9 \
bhnd.9 bhnd_nvram_getvar_uint32.9 \
bhnd.9 bhnd_nvram_getvar_uint8.9 \
bhnd.9 bhnd_nvram_string_array_next.9 \
bhnd.9 bhnd_read_board_info.9 \
bhnd.9 bhnd_read_config.9 \
bhnd.9 bhnd_read_ioctl.9 \
bhnd.9 bhnd_read_iost.9 \
bhnd.9 bhnd_register_provider.9 \
bhnd.9 bhnd_release_ext_rsrc.9 \
bhnd.9 bhnd_release_pmu.9 \
bhnd.9 bhnd_release_provider.9 \
bhnd.9 bhnd_release_resource.9 \
bhnd.9 bhnd_release_resources.9 \
bhnd.9 bhnd_request_clock.9 \
bhnd.9 bhnd_request_ext_rsrc.9 \
bhnd.9 bhnd_reset_hw.9 \
bhnd.9 bhnd_retain_provider.9 \
bhnd.9 bhnd_set_custom_core_desc.9 \
bhnd.9 bhnd_set_default_core_desc.9 \
bhnd.9 bhnd_suspend_hw.9 \
bhnd.9 bhnd_unmap_intr.9 \
bhnd.9 bhnd_vendor_name.9 \
bhnd.9 bhnd_write_config.9 \
bhnd.9 bhnd_write_ioctl.9
MLINKS+=bhnd_erom.9 bhnd_erom_alloc.9 \
bhnd_erom.9 bhnd_erom_dump.9 \
bhnd_erom.9 bhnd_erom_fini_static.9 \
bhnd_erom.9 bhnd_erom_free.9 \
bhnd_erom.9 bhnd_erom_free_core_table.9 \
bhnd_erom.9 bhnd_erom_get_core_table.9 \
bhnd_erom.9 bhnd_erom_init_static.9 \
bhnd_erom.9 bhnd_erom_io.9 \
bhnd_erom.9 bhnd_erom_io_fini.9 \
bhnd_erom.9 bhnd_erom_io_map.9 \
bhnd_erom.9 bhnd_erom_io_read.9 \
bhnd_erom.9 bhnd_erom_iobus_init.9 \
bhnd_erom.9 bhnd_erom_iores_new.9 \
bhnd_erom.9 bhnd_erom_lookup_core.9 \
bhnd_erom.9 bhnd_erom_lookup_core_addr.9 \
bhnd_erom.9 bhnd_erom_probe.9 \
bhnd_erom.9 bhnd_erom_probe_driver_classes.9
2015-10-17 19:55:58 +00:00
MLINKS+=bitset.9 BITSET_DEFINE.9 \
bitset.9 BITSET_T_INITIALIZER.9 \
bitset.9 BITSET_FSET.9 \
bitset.9 BIT_CLR.9 \
bitset.9 BIT_COPY.9 \
bitset.9 BIT_ISSET.9 \
bitset.9 BIT_SET.9 \
bitset.9 BIT_ZERO.9 \
bitset.9 BIT_FILL.9 \
bitset.9 BIT_SETOF.9 \
bitset.9 BIT_EMPTY.9 \
bitset.9 BIT_ISFULLSET.9 \
bitset.9 BIT_FFS.9 \
bitset.9 BIT_FLS.9 \
2015-10-17 19:55:58 +00:00
bitset.9 BIT_COUNT.9 \
bitset.9 BIT_SUBSET.9 \
bitset.9 BIT_OVERLAP.9 \
bitset.9 BIT_CMP.9 \
bitset.9 BIT_OR.9 \
bitset.9 BIT_OR2.9 \
2015-10-17 19:55:58 +00:00
bitset.9 BIT_AND.9 \
bitset.9 BIT_AND2.9 \
bitset.9 BIT_ANDNOT.9 \
bitset.9 BIT_ANDNOT2.9 \
bitset.9 BIT_XOR.9 \
bitset.9 BIT_XOR2.9 \
2015-10-17 19:55:58 +00:00
bitset.9 BIT_CLR_ATOMIC.9 \
bitset.9 BIT_SET_ATOMIC.9 \
bitset.9 BIT_SET_ATOMIC_ACQ.9 \
bitset.9 BIT_AND_ATOMIC.9 \
bitset.9 BIT_OR_ATOMIC.9 \
bitset.9 BIT_COPY_STORE_REL.9
2009-12-22 16:02:08 +00:00
MLINKS+=bpf.9 bpfattach.9 \
bpf.9 bpfattach2.9 \
bpf.9 bpfdetach.9 \
bpf.9 bpf_filter.9 \
2008-08-28 17:04:52 +00:00
bpf.9 bpf_mtap.9 \
bpf.9 bpf_mtap2.9 \
bpf.9 bpf_tap.9 \
2009-12-22 16:02:08 +00:00
bpf.9 bpf_validate.9
MLINKS+=buf.9 bp.9
MLINKS+=buf_ring.9 buf_ring_alloc.9 \
buf_ring.9 buf_ring_free.9 \
buf_ring.9 buf_ring_enqueue.9 \
buf_ring.9 buf_ring_enqueue_bytes.9 \
buf_ring.9 buf_ring_dequeue_mc.9 \
buf_ring.9 buf_ring_dequeue_sc.9 \
buf_ring.9 buf_ring_count.9 \
buf_ring.9 buf_ring_empty.9 \
buf_ring.9 buf_ring_full.9 \
buf_ring.9 buf_ring_peek.9
MLINKS+=bus_activate_resource.9 bus_deactivate_resource.9
MLINKS+=bus_alloc_resource.9 bus_alloc_resource_any.9
MLINKS+=BUS_BIND_INTR.9 bus_bind_intr.9
MLINKS+=BUS_DESCRIBE_INTR.9 bus_describe_intr.9
MLINKS+=bus_dma.9 busdma.9 \
bus_dma.9 bus_dmamap_create.9 \
bus_dma.9 bus_dmamap_destroy.9 \
bus_dma.9 bus_dmamap_load.9 \
bus_dma.9 bus_dmamap_load_bio.9 \
bus_dma.9 bus_dmamap_load_ccb.9 \
Add support for optional separate output buffers to in-kernel crypto. Some crypto consumers such as GELI and KTLS for file-backed sendfile need to store their output in a separate buffer from the input. Currently these consumers copy the contents of the input buffer into the output buffer and queue an in-place crypto operation on the output buffer. Using a separate output buffer avoids this copy. - Create a new 'struct crypto_buffer' describing a crypto buffer containing a type and type-specific fields. crp_ilen is gone, instead buffers that use a flat kernel buffer have a cb_buf_len field for their length. The length of other buffer types is inferred from the backing store (e.g. uio_resid for a uio). Requests now have two such structures: crp_buf for the input buffer, and crp_obuf for the output buffer. - Consumers now use helper functions (crypto_use_*, e.g. crypto_use_mbuf()) to configure the input buffer. If an output buffer is not configured, the request still modifies the input buffer in-place. A consumer uses a second set of helper functions (crypto_use_output_*) to configure an output buffer. - Consumers must request support for separate output buffers when creating a crypto session via the CSP_F_SEPARATE_OUTPUT flag and are only permitted to queue a request with a separate output buffer on sessions with this flag set. Existing drivers already reject sessions with unknown flags, so this permits drivers to be modified to support this extension without requiring all drivers to change. - Several data-related functions now have matching versions that operate on an explicit buffer (e.g. crypto_apply_buf, crypto_contiguous_subsegment_buf, bus_dma_load_crp_buf). - Most of the existing data-related functions operate on the input buffer. However crypto_copyback always writes to the output buffer if a request uses a separate output buffer. - For the regions in input/output buffers, the following conventions are followed: - AAD and IV are always present in input only and their fields are offsets into the input buffer. - payload is always present in both buffers. If a request uses a separate output buffer, it must set a new crp_payload_start_output field to the offset of the payload in the output buffer. - digest is in the input buffer for verify operations, and in the output buffer for compute operations. crp_digest_start is relative to the appropriate buffer. - Add a crypto buffer cursor abstraction. This is a more general form of some bits in the cryptosoft driver that tried to always use uio's. However, compared to the original code, this avoids rewalking the uio iovec array for requests with multiple vectors. It also avoids allocate an iovec array for mbufs and populating it by instead walking the mbuf chain directly. - Update the cryptosoft(4) driver to support separate output buffers making use of the cursor abstraction. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D24545
2020-05-25 22:12:04 +00:00
bus_dma.9 bus_dmamap_load_crp.9 \
bus_dma.9 bus_dmamap_load_crp_buffer.9 \
bus_dma.9 bus_dmamap_load_mbuf.9 \
2007-02-12 17:53:21 +00:00
bus_dma.9 bus_dmamap_load_mbuf_sg.9 \
bus_dma.9 bus_dmamap_load_uio.9 \
bus_dma.9 bus_dmamap_sync.9 \
bus_dma.9 bus_dmamap_unload.9 \
bus_dma.9 bus_dmamem_alloc.9 \
bus_dma.9 bus_dmamem_free.9 \
bus_dma.9 bus_dma_tag_create.9 \
bus_dma.9 bus_dma_tag_destroy.9
MLINKS+=bus_generic_read_ivar.9 bus_generic_write_ivar.9
Add a new bus method to fetch device-specific CPU sets. bus_get_cpus() returns a specified set of CPUs for a device. It accepts an enum for the second parameter that indicates the type of cpuset to request. Currently two valus are supported: - LOCAL_CPUS (on x86 this returns all the CPUs in the package closest to the device when DEVICE_NUMA is enabled) - INTR_CPUS (like LOCAL_CPUS but only returns 1 SMT thread for each core) For systems that do not support NUMA (or if it is not enabled in the kernel config), LOCAL_CPUS fails with EINVAL. INTR_CPUS is mapped to 'all_cpus' by default. The idea is that INTR_CPUS should always return a valid set. Device drivers which want to use per-CPU interrupts should start using INTR_CPUS instead of simply assigning interrupts to all available CPUs. In the future we may wish to add tunables to control the policy of INTR_CPUS (e.g. should it be local-only or global, should it ignore SMT threads or not). The x86 nexus driver exposes the internal set of interrupt CPUs from the the x86 interrupt code via INTR_CPUS. The ACPI bus driver and PCI bridge drivers use _PXM to return a suitable LOCAL_CPUS set when _PXM exists and DEVICE_NUMA is enabled. They also and the global INTR_CPUS set from the nexus driver with the per-domain set from _PXM to generate a local INTR_CPUS set for child devices. Compared to the r298933, this version uses 'struct _cpuset' in <sys/bus.h> instead of 'cpuset_t' to avoid requiring <sys/param.h> (<sys/_cpuset.h> still requires <sys/param.h> for MAXCPU even though <sys/_bitset.h> does not after recent changes).
2016-05-09 20:50:21 +00:00
MLINKS+=BUS_GET_CPUS.9 bus_get_cpus.9
Add new bus methods for mapping resources. Add a pair of bus methods that can be used to "map" resources for direct CPU access using bus_space(9). bus_map_resource() creates a mapping and bus_unmap_resource() releases a previously created mapping. Mappings are described by 'struct resource_map' object. Pointers to these objects can be passed as the first argument to the bus_space wrapper API used for bus resources. Drivers that wish to map all of a resource using default settings (for example, using uncacheable memory attributes) do not need to change. However, drivers that wish to use non-default settings can now do so without jumping through hoops. First, an RF_UNMAPPED flag is added to request that a resource is not implicitly mapped with the default settings when it is activated. This permits other activation steps (such as enabling I/O or memory decoding in a device's PCI command register) to be taken without creating a mapping. Right now the AGP drivers don't set RF_ACTIVE to avoid using up a large amount of KVA to map the AGP aperture on 32-bit platforms. Once RF_UNMAPPED is supported on all platforms that support AGP this can be changed to using RF_UNMAPPED with RF_ACTIVE instead. Second, bus_map_resource accepts an optional structure that defines additional settings for a given mapping. For example, a driver can now request to map only a subset of a resource instead of the entire range. The AGP driver could also use this to only map the first page of the aperture (IIRC, it calls pmap_mapdev() directly to map the first page currently). I will also eventually change the PCI-PCI bridge driver to request mappings of the subset of the I/O window resource on its parent side to create mappings for child devices rather than passing child resources directly up to nexus to be mapped. This also permits bridges that do address translation to request suitable mappings from a resource on the "upper" side of the bus when mapping resources on the "lower" side of the bus. Another attribute that can be specified is an alternate memory attribute for memory-mapped resources. This can be used to request a Write-Combining mapping of a PCI BAR in an MI fashion. (Currently the drivers that do this call pmap_change_attr() directly for x86 only.) Note that this commit only adds the MI framework. Each platform needs to add support for handling RF_UNMAPPED and thew new bus_map/unmap_resource methods. Generally speaking, any drivers that are calling rman_set_bustag() and rman_set_bushandle() need to be updated. Discussed on: arch Reviewed by: cem Differential Revision: https://reviews.freebsd.org/D5237
2016-05-20 17:57:47 +00:00
MLINKS+=bus_map_resource.9 bus_unmap_resource.9 \
bus_map_resource.9 resource_init_map_request.9
MLINKS+=BUS_READ_IVAR.9 BUS_WRITE_IVAR.9
MLINKS+=BUS_SETUP_INTR.9 bus_setup_intr.9 \
BUS_SETUP_INTR.9 BUS_TEARDOWN_INTR.9 \
BUS_SETUP_INTR.9 bus_teardown_intr.9
MLINKS+=bus_space.9 bus_space_alloc.9 \
bus_space.9 bus_space_barrier.9 \
bus_space.9 bus_space_copy_region_1.9 \
bus_space.9 bus_space_copy_region_2.9 \
bus_space.9 bus_space_copy_region_4.9 \
bus_space.9 bus_space_copy_region_8.9 \
bus_space.9 bus_space_copy_region_stream_1.9 \
bus_space.9 bus_space_copy_region_stream_2.9 \
bus_space.9 bus_space_copy_region_stream_4.9 \
bus_space.9 bus_space_copy_region_stream_8.9 \
bus_space.9 bus_space_free.9 \
bus_space.9 bus_space_map.9 \
bus_space.9 bus_space_read_1.9 \
bus_space.9 bus_space_read_2.9 \
bus_space.9 bus_space_read_4.9 \
bus_space.9 bus_space_read_8.9 \
bus_space.9 bus_space_read_multi_1.9 \
bus_space.9 bus_space_read_multi_2.9 \
bus_space.9 bus_space_read_multi_4.9 \
bus_space.9 bus_space_read_multi_8.9 \
bus_space.9 bus_space_read_multi_stream_1.9 \
bus_space.9 bus_space_read_multi_stream_2.9 \
bus_space.9 bus_space_read_multi_stream_4.9 \
bus_space.9 bus_space_read_multi_stream_8.9 \
bus_space.9 bus_space_read_region_1.9 \
bus_space.9 bus_space_read_region_2.9 \
bus_space.9 bus_space_read_region_4.9 \
bus_space.9 bus_space_read_region_8.9 \
bus_space.9 bus_space_read_region_stream_1.9 \
bus_space.9 bus_space_read_region_stream_2.9 \
bus_space.9 bus_space_read_region_stream_4.9 \
bus_space.9 bus_space_read_region_stream_8.9 \
2006-10-05 12:40:44 +00:00
bus_space.9 bus_space_read_stream_1.9 \
bus_space.9 bus_space_read_stream_2.9 \
bus_space.9 bus_space_read_stream_4.9 \
bus_space.9 bus_space_read_stream_8.9 \
bus_space.9 bus_space_set_multi_1.9 \
bus_space.9 bus_space_set_multi_2.9 \
bus_space.9 bus_space_set_multi_4.9 \
bus_space.9 bus_space_set_multi_8.9 \
bus_space.9 bus_space_set_multi_stream_1.9 \
bus_space.9 bus_space_set_multi_stream_2.9 \
bus_space.9 bus_space_set_multi_stream_4.9 \
bus_space.9 bus_space_set_multi_stream_8.9 \
bus_space.9 bus_space_set_region_1.9 \
bus_space.9 bus_space_set_region_2.9 \
bus_space.9 bus_space_set_region_4.9 \
bus_space.9 bus_space_set_region_8.9 \
bus_space.9 bus_space_set_region_stream_1.9 \
bus_space.9 bus_space_set_region_stream_2.9 \
bus_space.9 bus_space_set_region_stream_4.9 \
bus_space.9 bus_space_set_region_stream_8.9 \
bus_space.9 bus_space_subregion.9 \
bus_space.9 bus_space_unmap.9 \
bus_space.9 bus_space_write_1.9 \
bus_space.9 bus_space_write_2.9 \
bus_space.9 bus_space_write_4.9 \
bus_space.9 bus_space_write_8.9 \
bus_space.9 bus_space_write_multi_1.9 \
bus_space.9 bus_space_write_multi_2.9 \
bus_space.9 bus_space_write_multi_4.9 \
bus_space.9 bus_space_write_multi_8.9 \
bus_space.9 bus_space_write_multi_stream_1.9 \
bus_space.9 bus_space_write_multi_stream_2.9 \
bus_space.9 bus_space_write_multi_stream_4.9 \
bus_space.9 bus_space_write_multi_stream_8.9 \
bus_space.9 bus_space_write_region_1.9 \
bus_space.9 bus_space_write_region_2.9 \
bus_space.9 bus_space_write_region_4.9 \
bus_space.9 bus_space_write_region_8.9 \
bus_space.9 bus_space_write_region_stream_1.9 \
bus_space.9 bus_space_write_region_stream_2.9 \
bus_space.9 bus_space_write_region_stream_4.9 \
2006-10-05 12:40:44 +00:00
bus_space.9 bus_space_write_region_stream_8.9 \
bus_space.9 bus_space_write_stream_1.9 \
bus_space.9 bus_space_write_stream_2.9 \
bus_space.9 bus_space_write_stream_4.9 \
bus_space.9 bus_space_write_stream_8.9
MLINKS+=byteorder.9 be16dec.9 \
byteorder.9 be16enc.9 \
byteorder.9 be16toh.9 \
byteorder.9 be32dec.9 \
byteorder.9 be32enc.9 \
byteorder.9 be32toh.9 \
byteorder.9 be64dec.9 \
byteorder.9 be64enc.9 \
byteorder.9 be64toh.9 \
byteorder.9 bswap16.9 \
byteorder.9 bswap32.9 \
byteorder.9 bswap64.9 \
byteorder.9 htobe16.9 \
byteorder.9 htobe32.9 \
byteorder.9 htobe64.9 \
byteorder.9 htole16.9 \
byteorder.9 htole32.9 \
byteorder.9 htole64.9 \
byteorder.9 le16dec.9 \
byteorder.9 le16enc.9 \
byteorder.9 le16toh.9 \
byteorder.9 le32dec.9 \
byteorder.9 le32enc.9 \
byteorder.9 le32toh.9 \
byteorder.9 le64dec.9 \
byteorder.9 le64enc.9 \
byteorder.9 le64toh.9
MLINKS+=callout.9 callout_active.9 \
callout.9 callout_async_drain.9 \
callout.9 callout_deactivate.9 \
callout.9 callout_drain.9 \
callout.9 callout_init.9 \
callout.9 callout_init_mtx.9 \
callout.9 callout_init_rm.9 \
callout.9 callout_init_rw.9 \
callout.9 callout_pending.9 \
callout.9 callout_reset.9 \
callout.9 callout_reset_curcpu.9 \
callout.9 callout_reset_on.9 \
callout.9 callout_reset_sbt.9 \
callout.9 callout_reset_sbt_curcpu.9 \
callout.9 callout_reset_sbt_on.9 \
callout.9 callout_schedule.9 \
callout.9 callout_schedule_curcpu.9 \
callout.9 callout_schedule_on.9 \
callout.9 callout_schedule_sbt.9 \
callout.9 callout_schedule_sbt_curcpu.9 \
callout.9 callout_schedule_sbt_on.9 \
callout.9 callout_stop.9 \
callout.9 callout_when.9
MLINKS+=cnv.9 cnvlist.9 \
cnv.9 cnvlist_free_binary.9 \
cnv.9 cnvlist_free_bool.9 \
cnv.9 cnvlist_free_bool_array.9 \
cnv.9 cnvlist_free_descriptor.9 \
cnv.9 cnvlist_free_descriptor_array.9 \
cnv.9 cnvlist_free_null.9 \
cnv.9 cnvlist_free_number.9 \
cnv.9 cnvlist_free_number_array.9 \
cnv.9 cnvlist_free_nvlist.9 \
cnv.9 cnvlist_free_nvlist_array.9 \
cnv.9 cnvlist_free_string.9 \
cnv.9 cnvlist_free_string_array.9 \
cnv.9 cnvlist_get_binary.9 \
cnv.9 cnvlist_get_bool.9 \
cnv.9 cnvlist_get_bool_array.9 \
cnv.9 cnvlist_get_descriptor.9 \
cnv.9 cnvlist_get_descriptor_array.9 \
cnv.9 cnvlist_get_number.9 \
cnv.9 cnvlist_get_number_array.9 \
cnv.9 cnvlist_get_nvlist.9 \
cnv.9 cnvlist_get_nvlist_array.9 \
cnv.9 cnvlist_get_string.9 \
cnv.9 cnvlist_get_string_array.9 \
cnv.9 cnvlist_take_binary.9 \
cnv.9 cnvlist_take_bool.9 \
cnv.9 cnvlist_take_bool_array.9 \
cnv.9 cnvlist_take_descriptor.9 \
cnv.9 cnvlist_take_descriptor_array.9 \
cnv.9 cnvlist_take_number.9 \
cnv.9 cnvlist_take_number_array.9 \
cnv.9 cnvlist_take_nvlist.9 \
cnv.9 cnvlist_take_nvlist_array.9 \
cnv.9 cnvlist_take_string.9 \
cnv.9 cnvlist_take_string_array.9
MLINKS+=condvar.9 cv_broadcast.9 \
condvar.9 cv_broadcastpri.9 \
condvar.9 cv_destroy.9 \
condvar.9 cv_init.9 \
condvar.9 cv_signal.9 \
condvar.9 cv_timedwait.9 \
condvar.9 cv_timedwait_sig.9 \
condvar.9 cv_timedwait_sig_sbt.9 \
condvar.9 cv_wait.9 \
condvar.9 cv_wait_sig.9 \
condvar.9 cv_wait_unlock.9 \
condvar.9 cv_wmesg.9
MLINKS+=config_intrhook.9 config_intrhook_disestablish.9 \
config_intrhook.9 config_intrhook_establish.9 \
config_intrhook.9 config_intrhook_oneshot.9
MLINKS+=contigmalloc.9 contigmalloc_domainset.9 \
contigmalloc.9 contigfree.9
MLINKS+=casuword.9 casueword.9 \
casuword.9 casueword32.9 \
casuword.9 casuword32.9
MLINKS+=copy.9 copyin.9 \
copy.9 copyin_nofault.9 \
copy.9 copyinstr.9 \
copy.9 copyout.9 \
copy.9 copyout_nofault.9 \
copy.9 copystr.9
MLINKS+=counter.9 counter_u64_alloc.9 \
counter.9 counter_u64_free.9 \
counter.9 counter_u64_add.9 \
counter.9 counter_enter.9 \
counter.9 counter_exit.9 \
counter.9 counter_u64_add_protected.9 \
counter.9 counter_u64_fetch.9 \
counter.9 counter_u64_zero.9 \
counter.9 SYSCTL_COUNTER_U64.9 \
counter.9 SYSCTL_ADD_COUNTER_U64.9 \
counter.9 SYSCTL_COUNTER_U64_ARRAY.9 \
counter.9 SYSCTL_ADD_COUNTER_U64_ARRAY.9
MLINKS+=cpuset.9 CPUSET_T_INITIALIZER.9 \
cpuset.9 CPUSET_FSET.9 \
cpuset.9 CPU_CLR.9 \
cpuset.9 CPU_COPY.9 \
cpuset.9 CPU_ISSET.9 \
cpuset.9 CPU_SET.9 \
cpuset.9 CPU_ZERO.9 \
cpuset.9 CPU_FILL.9 \
cpuset.9 CPU_SETOF.9 \
cpuset.9 CPU_EMPTY.9 \
cpuset.9 CPU_ISFULLSET.9 \
cpuset.9 CPU_FFS.9 \
cpuset.9 CPU_COUNT.9 \
cpuset.9 CPU_SUBSET.9 \
cpuset.9 CPU_OVERLAP.9 \
cpuset.9 CPU_CMP.9 \
cpuset.9 CPU_OR.9 \
cpuset.9 CPU_AND.9 \
cpuset.9 CPU_ANDNOT.9 \
cpuset.9 CPU_CLR_ATOMIC.9 \
cpuset.9 CPU_SET_ATOMIC.9 \
cpuset.9 CPU_SET_ATOMIC_ACQ.9 \
cpuset.9 CPU_AND_ATOMIC.9 \
cpuset.9 CPU_OR_ATOMIC.9 \
cpuset.9 CPU_COPY_STORE_REL.9
MLINKS+=critical_enter.9 critical.9 \
2005-09-28 07:32:43 +00:00
critical_enter.9 critical_exit.9
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
MLINKS+=crypto_asym.9 crypto_kdispatch.9 \
crypto_asym.9 crypto_kdone.9 \
crypto_asym.9 crypto_kregister.9 \
crypto_asym.9 CRYPTODEV_KPROCESS.9
Add support for optional separate output buffers to in-kernel crypto. Some crypto consumers such as GELI and KTLS for file-backed sendfile need to store their output in a separate buffer from the input. Currently these consumers copy the contents of the input buffer into the output buffer and queue an in-place crypto operation on the output buffer. Using a separate output buffer avoids this copy. - Create a new 'struct crypto_buffer' describing a crypto buffer containing a type and type-specific fields. crp_ilen is gone, instead buffers that use a flat kernel buffer have a cb_buf_len field for their length. The length of other buffer types is inferred from the backing store (e.g. uio_resid for a uio). Requests now have two such structures: crp_buf for the input buffer, and crp_obuf for the output buffer. - Consumers now use helper functions (crypto_use_*, e.g. crypto_use_mbuf()) to configure the input buffer. If an output buffer is not configured, the request still modifies the input buffer in-place. A consumer uses a second set of helper functions (crypto_use_output_*) to configure an output buffer. - Consumers must request support for separate output buffers when creating a crypto session via the CSP_F_SEPARATE_OUTPUT flag and are only permitted to queue a request with a separate output buffer on sessions with this flag set. Existing drivers already reject sessions with unknown flags, so this permits drivers to be modified to support this extension without requiring all drivers to change. - Several data-related functions now have matching versions that operate on an explicit buffer (e.g. crypto_apply_buf, crypto_contiguous_subsegment_buf, bus_dma_load_crp_buf). - Most of the existing data-related functions operate on the input buffer. However crypto_copyback always writes to the output buffer if a request uses a separate output buffer. - For the regions in input/output buffers, the following conventions are followed: - AAD and IV are always present in input only and their fields are offsets into the input buffer. - payload is always present in both buffers. If a request uses a separate output buffer, it must set a new crp_payload_start_output field to the offset of the payload in the output buffer. - digest is in the input buffer for verify operations, and in the output buffer for compute operations. crp_digest_start is relative to the appropriate buffer. - Add a crypto buffer cursor abstraction. This is a more general form of some bits in the cryptosoft driver that tried to always use uio's. However, compared to the original code, this avoids rewalking the uio iovec array for requests with multiple vectors. It also avoids allocate an iovec array for mbufs and populating it by instead walking the mbuf chain directly. - Update the cryptosoft(4) driver to support separate output buffers making use of the cursor abstraction. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D24545
2020-05-25 22:12:04 +00:00
MLINKS+=crypto_buffer.9 crypto_apply.9 \
crypto_buffer.9 crypto_apply_buf.9 \
crypto_buffer.9 crypto_buffer_contiguous_segment.9 \
crypto_buffer.9 crypto_buffer_len.9 \
crypto_buffer.9 crypto_contiguous_segment.9 \
crypto_buffer.9 crypto_cursor_init.9 \
crypto_buffer.9 crypto_cursor_advance.9 \
crypto_buffer.9 crypto_cursor_copyback.9 \
crypto_buffer.9 crypto_cursor_copydata.9 \
crypto_buffer.9 crypto_cursor_copydata_noadv.9 \
crypto_buffer.9 crypto_cursor_segbase.9 \
crypto_buffer.9 crypto_cursor_seglen.9 \
crypto_buffer.9 CRYPTO_HAS_OUTPUT_BUFFER.9
MLINKS+=crypto_driver.9 crypto_copyback.9 \
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
crypto_driver.9 crypto_copydata.9 \
crypto_driver.9 crypto_done.9 \
crypto_driver.9 crypto_get_driverid.9 \
crypto_driver.9 crypto_get_driver_session.9 \
crypto_driver.9 crypto_read_iv.9 \
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
crypto_driver.9 crypto_unblock.9 \
crypto_driver.9 crypto_unregister_all.9 \
crypto_driver.9 CRYPTODEV_FREESESSION.9 \
crypto_driver.9 CRYPTODEV_NEWSESSION.9 \
crypto_driver.9 CRYPTODEV_PROBESESSION.9 \
crypto_driver.9 CRYPTODEV_PROCESS.9 \
crypto_driver.9 hmac_init_ipad.9 \
crypto_driver.9 hmac_init_opad.9
MLINKS+=crypto_request.9 crypto_destroyreq.9 \
crypto_request.9 crypto_dispatch.9 \
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
crypto_request.9 crypto_freereq.9 \
Add support for optional separate output buffers to in-kernel crypto. Some crypto consumers such as GELI and KTLS for file-backed sendfile need to store their output in a separate buffer from the input. Currently these consumers copy the contents of the input buffer into the output buffer and queue an in-place crypto operation on the output buffer. Using a separate output buffer avoids this copy. - Create a new 'struct crypto_buffer' describing a crypto buffer containing a type and type-specific fields. crp_ilen is gone, instead buffers that use a flat kernel buffer have a cb_buf_len field for their length. The length of other buffer types is inferred from the backing store (e.g. uio_resid for a uio). Requests now have two such structures: crp_buf for the input buffer, and crp_obuf for the output buffer. - Consumers now use helper functions (crypto_use_*, e.g. crypto_use_mbuf()) to configure the input buffer. If an output buffer is not configured, the request still modifies the input buffer in-place. A consumer uses a second set of helper functions (crypto_use_output_*) to configure an output buffer. - Consumers must request support for separate output buffers when creating a crypto session via the CSP_F_SEPARATE_OUTPUT flag and are only permitted to queue a request with a separate output buffer on sessions with this flag set. Existing drivers already reject sessions with unknown flags, so this permits drivers to be modified to support this extension without requiring all drivers to change. - Several data-related functions now have matching versions that operate on an explicit buffer (e.g. crypto_apply_buf, crypto_contiguous_subsegment_buf, bus_dma_load_crp_buf). - Most of the existing data-related functions operate on the input buffer. However crypto_copyback always writes to the output buffer if a request uses a separate output buffer. - For the regions in input/output buffers, the following conventions are followed: - AAD and IV are always present in input only and their fields are offsets into the input buffer. - payload is always present in both buffers. If a request uses a separate output buffer, it must set a new crp_payload_start_output field to the offset of the payload in the output buffer. - digest is in the input buffer for verify operations, and in the output buffer for compute operations. crp_digest_start is relative to the appropriate buffer. - Add a crypto buffer cursor abstraction. This is a more general form of some bits in the cryptosoft driver that tried to always use uio's. However, compared to the original code, this avoids rewalking the uio iovec array for requests with multiple vectors. It also avoids allocate an iovec array for mbufs and populating it by instead walking the mbuf chain directly. - Update the cryptosoft(4) driver to support separate output buffers making use of the cursor abstraction. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D24545
2020-05-25 22:12:04 +00:00
crypto_request.9 crypto_getreq.9 \
crypto_request.9 crypto_initreq.9 \
Add support for optional separate output buffers to in-kernel crypto. Some crypto consumers such as GELI and KTLS for file-backed sendfile need to store their output in a separate buffer from the input. Currently these consumers copy the contents of the input buffer into the output buffer and queue an in-place crypto operation on the output buffer. Using a separate output buffer avoids this copy. - Create a new 'struct crypto_buffer' describing a crypto buffer containing a type and type-specific fields. crp_ilen is gone, instead buffers that use a flat kernel buffer have a cb_buf_len field for their length. The length of other buffer types is inferred from the backing store (e.g. uio_resid for a uio). Requests now have two such structures: crp_buf for the input buffer, and crp_obuf for the output buffer. - Consumers now use helper functions (crypto_use_*, e.g. crypto_use_mbuf()) to configure the input buffer. If an output buffer is not configured, the request still modifies the input buffer in-place. A consumer uses a second set of helper functions (crypto_use_output_*) to configure an output buffer. - Consumers must request support for separate output buffers when creating a crypto session via the CSP_F_SEPARATE_OUTPUT flag and are only permitted to queue a request with a separate output buffer on sessions with this flag set. Existing drivers already reject sessions with unknown flags, so this permits drivers to be modified to support this extension without requiring all drivers to change. - Several data-related functions now have matching versions that operate on an explicit buffer (e.g. crypto_apply_buf, crypto_contiguous_subsegment_buf, bus_dma_load_crp_buf). - Most of the existing data-related functions operate on the input buffer. However crypto_copyback always writes to the output buffer if a request uses a separate output buffer. - For the regions in input/output buffers, the following conventions are followed: - AAD and IV are always present in input only and their fields are offsets into the input buffer. - payload is always present in both buffers. If a request uses a separate output buffer, it must set a new crp_payload_start_output field to the offset of the payload in the output buffer. - digest is in the input buffer for verify operations, and in the output buffer for compute operations. crp_digest_start is relative to the appropriate buffer. - Add a crypto buffer cursor abstraction. This is a more general form of some bits in the cryptosoft driver that tried to always use uio's. However, compared to the original code, this avoids rewalking the uio iovec array for requests with multiple vectors. It also avoids allocate an iovec array for mbufs and populating it by instead walking the mbuf chain directly. - Update the cryptosoft(4) driver to support separate output buffers making use of the cursor abstraction. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D24545
2020-05-25 22:12:04 +00:00
crypto_request.9 crypto_use_buf.9 \
crypto_request.9 crypto_use_mbuf.9 \
crypto_request.9 crypto_use_output_buf.9 \
crypto_request.9 crypto_use_output_mbuf.9 \
crypto_request.9 crypto_use_output_uio.9 \
crypto_request.9 crypto_use_uio.9
Refactor driver and consumer interfaces for OCF (in-kernel crypto). - The linked list of cryptoini structures used in session initialization is replaced with a new flat structure: struct crypto_session_params. This session includes a new mode to define how the other fields should be interpreted. Available modes include: - COMPRESS (for compression/decompression) - CIPHER (for simply encryption/decryption) - DIGEST (computing and verifying digests) - AEAD (combined auth and encryption such as AES-GCM and AES-CCM) - ETA (combined auth and encryption using encrypt-then-authenticate) Additional modes could be added in the future (e.g. if we wanted to support TLS MtE for AES-CBC in the kernel we could add a new mode for that. TLS modes might also affect how AAD is interpreted, etc.) The flat structure also includes the key lengths and algorithms as before. However, code doesn't have to walk the linked list and switch on the algorithm to determine which key is the auth key vs encryption key. The 'csp_auth_*' fields are always used for auth keys and settings and 'csp_cipher_*' for cipher. (Compression algorithms are stored in csp_cipher_alg.) - Drivers no longer register a list of supported algorithms. This doesn't quite work when you factor in modes (e.g. a driver might support both AES-CBC and SHA2-256-HMAC separately but not combined for ETA). Instead, a new 'crypto_probesession' method has been added to the kobj interface for symmteric crypto drivers. This method returns a negative value on success (similar to how device_probe works) and the crypto framework uses this value to pick the "best" driver. There are three constants for hardware (e.g. ccr), accelerated software (e.g. aesni), and plain software (cryptosoft) that give preference in that order. One effect of this is that if you request only hardware when creating a new session, you will no longer get a session using accelerated software. Another effect is that the default setting to disallow software crypto via /dev/crypto now disables accelerated software. Once a driver is chosen, 'crypto_newsession' is invoked as before. - Crypto operations are now solely described by the flat 'cryptop' structure. The linked list of descriptors has been removed. A separate enum has been added to describe the type of data buffer in use instead of using CRYPTO_F_* flags to make it easier to add more types in the future if needed (e.g. wired userspace buffers for zero-copy). It will also make it easier to re-introduce separate input and output buffers (in-kernel TLS would benefit from this). Try to make the flags related to IV handling less insane: - CRYPTO_F_IV_SEPARATE means that the IV is stored in the 'crp_iv' member of the operation structure. If this flag is not set, the IV is stored in the data buffer at the 'crp_iv_start' offset. - CRYPTO_F_IV_GENERATE means that a random IV should be generated and stored into the data buffer. This cannot be used with CRYPTO_F_IV_SEPARATE. If a consumer wants to deal with explicit vs implicit IVs, etc. it can always generate the IV however it needs and store partial IVs in the buffer and the full IV/nonce in crp_iv and set CRYPTO_F_IV_SEPARATE. The layout of the buffer is now described via fields in cryptop. crp_aad_start and crp_aad_length define the boundaries of any AAD. Previously with GCM and CCM you defined an auth crd with this range, but for ETA your auth crd had to span both the AAD and plaintext (and they had to be adjacent). crp_payload_start and crp_payload_length define the boundaries of the plaintext/ciphertext. Modes that only do a single operation (COMPRESS, CIPHER, DIGEST) should only use this region and leave the AAD region empty. If a digest is present (or should be generated), it's starting location is marked by crp_digest_start. Instead of using the CRD_F_ENCRYPT flag to determine the direction of the operation, cryptop now includes an 'op' field defining the operation to perform. For digests I've added a new VERIFY digest mode which assumes a digest is present in the input and fails the request with EBADMSG if it doesn't match the internally-computed digest. GCM and CCM already assumed this, and the new AEAD mode requires this for decryption. The new ETA mode now also requires this for decryption, so IPsec and GELI no longer do their own authentication verification. Simple DIGEST operations can also do this, though there are no in-tree consumers. To eventually support some refcounting to close races, the session cookie is now passed to crypto_getop() and clients should no longer set crp_sesssion directly. - Assymteric crypto operation structures should be allocated via crypto_getkreq() and freed via crypto_freekreq(). This permits the crypto layer to track open asym requests and close races with a driver trying to unregister while asym requests are in flight. - crypto_copyback, crypto_copydata, crypto_apply, and crypto_contiguous_subsegment now accept the 'crp' object as the first parameter instead of individual members. This makes it easier to deal with different buffer types in the future as well as separate input and output buffers. It's also simpler for driver writers to use. - bus_dmamap_load_crp() loads a DMA mapping for a crypto buffer. This understands the various types of buffers so that drivers that use DMA do not have to be aware of different buffer types. - Helper routines now exist to build an auth context for HMAC IPAD and OPAD. This reduces some duplicated work among drivers. - Key buffers are now treated as const throughout the framework and in device drivers. However, session key buffers provided when a session is created are expected to remain alive for the duration of the session. - GCM and CCM sessions now only specify a cipher algorithm and a cipher key. The redundant auth information is not needed or used. - For cryptosoft, split up the code a bit such that the 'process' callback now invokes a function pointer in the session. This function pointer is set based on the mode (in effect) though it simplifies a few edge cases that would otherwise be in the switch in 'process'. It does split up GCM vs CCM which I think is more readable even if there is some duplication. - I changed /dev/crypto to support GMAC requests using CRYPTO_AES_NIST_GMAC as an auth algorithm and updated cryptocheck to work with it. - Combined cipher and auth sessions via /dev/crypto now always use ETA mode. The COP_F_CIPHER_FIRST flag is now a no-op that is ignored. This was actually documented as being true in crypto(4) before, but the code had not implemented this before I added the CIPHER_FIRST flag. - I have not yet updated /dev/crypto to be aware of explicit modes for sessions. I will probably do that at some point in the future as well as teach it about IV/nonce and tag lengths for AEAD so we can support all of the NIST KAT tests for GCM and CCM. - I've split up the exising crypto.9 manpage into several pages of which many are written from scratch. - I have converted all drivers and consumers in the tree and verified that they compile, but I have not tested all of them. I have tested the following drivers: - cryptosoft - aesni (AES only) - blake2 - ccr and the following consumers: - cryptodev - IPsec - ktls_ocf - GELI (lightly) I have not tested the following: - ccp - aesni with sha - hifn - kgssapi_krb5 - ubsec - padlock - safe - armv8_crypto (aarch64) - glxsb (i386) - sec (ppc) - cesa (armv7) - cryptocteon (mips64) - nlmsec (mips64) Discussed with: cem Relnotes: yes Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23677
2020-03-27 18:25:23 +00:00
MLINKS+=crypto_session.9 crypto_auth_hash.9 \
crypto_session.9 crypto_cipher.9 \
crypto_session.9 crypto_get_params.9 \
crypto_session.9 crypto_newsession.9 \
crypto_session.9 crypto_freesession.9
2009-12-22 16:02:08 +00:00
MLINKS+=DB_COMMAND.9 DB_SHOW_ALL_COMMAND.9 \
DB_COMMAND.9 DB_SHOW_COMMAND.9
MLINKS+=DECLARE_MODULE.9 DECLARE_MODULE_TIED.9
MLINKS+=dev_clone.9 drain_dev_clone_events.9
MLINKS+=dev_refthread.9 devvn_refthread.9 \
dev_refthread.9 dev_relthread.9
2009-12-22 16:02:08 +00:00
MLINKS+=devfs_set_cdevpriv.9 devfs_clear_cdevpriv.9 \
devfs_set_cdevpriv.9 devfs_get_cdevpriv.9
MLINKS+=device_add_child.9 device_add_child_ordered.9
MLINKS+=device_enable.9 device_disable.9 \
device_enable.9 device_is_enabled.9
MLINKS+=device_get_ivars.9 device_set_ivars.9
MLINKS+=device_get_name.9 device_get_nameunit.9
MLINKS+=device_get_state.9 device_busy.9 \
device_get_state.9 device_is_alive.9 \
device_get_state.9 device_is_attached.9 \
device_get_state.9 device_unbusy.9
MLINKS+=device_get_sysctl.9 device_get_sysctl_ctx.9 \
device_get_sysctl.9 device_get_sysctl_tree.9
MLINKS+=device_quiet.9 device_is_quiet.9 \
device_quiet.9 device_verbose.9
MLINKS+=device_set_desc.9 device_get_desc.9 \
device_set_desc.9 device_set_desc_copy.9
MLINKS+=device_set_flags.9 device_get_flags.9
MLINKS+=devstat.9 devicestat.9 \
devstat.9 devstat_new_entry.9 \
devstat.9 devstat_end_transaction.9 \
devstat.9 devstat_end_transaction_bio.9 \
devstat.9 devstat_remove_entry.9 \
devstat.9 devstat_start_transaction.9 \
devstat.9 devstat_start_transaction_bio.9
MLINKS+=disk.9 disk_add_alias.9 \
disk.9 disk_alloc.9 \
disk.9 disk_create.9 \
2009-12-22 16:02:08 +00:00
disk.9 disk_destroy.9 \
2012-10-30 13:05:50 +00:00
disk.9 disk_gone.9 \
disk.9 disk_resize.9
MLINKS+=dnv.9 dnvlist.9 \
dnv.9 dnvlist_get_binary.9 \
dnv.9 dnvlist_get_bool.9 \
dnv.9 dnvlist_get_descriptor.9 \
dnv.9 dnvlist_get_number.9 \
dnv.9 dnvlist_get_nvlist.9 \
dnv.9 dnvlist_get_string.9 \
dnv.9 dnvlist_take_binary.9 \
dnv.9 dnvlist_take_bool.9 \
dnv.9 dnvlist_take_descriptor.9 \
dnv.9 dnvlist_take_number.9 \
dnv.9 dnvlist_take_nvlist.9 \
dnv.9 dnvlist_take_string.9
MLINKS+=domain.9 DOMAIN_SET.9 \
domain.9 domain_add.9 \
domain.9 pfctlinput.9 \
2006-10-05 12:40:44 +00:00
domain.9 pfctlinput2.9 \
domain.9 pffinddomain.9 \
domain.9 pffindproto.9 \
domain.9 pffindtype.9
MLINKS+=drbr.9 drbr_free.9 \
drbr.9 drbr_enqueue.9 \
drbr.9 drbr_dequeue.9 \
drbr.9 drbr_dequeue_cond.9 \
drbr.9 drbr_flush.9 \
drbr.9 drbr_empty.9 \
drbr.9 drbr_inuse.9 \
drbr.9 drbr_stats_update.9
MLINKS+=DRIVER_MODULE.9 DRIVER_MODULE_ORDERED.9 \
DRIVER_MODULE.9 EARLY_DRIVER_MODULE.9 \
DRIVER_MODULE.9 EARLY_DRIVER_MODULE_ORDERED.9
MLINKS+=epoch.9 epoch_context.9 \
epoch.9 epoch_alloc.9 \
epoch.9 epoch_free.9 \
epoch.9 epoch_enter.9 \
epoch.9 epoch_exit.9 \
epoch.9 epoch_wait.9 \
epoch.9 epoch_call.9 \
epoch.9 epoch_drain_callbacks.9 \
epoch.9 in_epoch.9
MLINKS+=EVENTHANDLER.9 EVENTHANDLER_DECLARE.9 \
EVENTHANDLER.9 EVENTHANDLER_DEFINE.9 \
EVENTHANDLER.9 EVENTHANDLER_DEREGISTER.9 \
EVENTHANDLER.9 eventhandler_deregister.9 \
2005-09-28 07:32:43 +00:00
EVENTHANDLER.9 eventhandler_find_list.9 \
EVENTHANDLER.9 EVENTHANDLER_INVOKE.9 \
2005-09-28 07:32:43 +00:00
EVENTHANDLER.9 eventhandler_prune_list.9 \
EVENTHANDLER.9 EVENTHANDLER_REGISTER.9 \
2005-09-28 07:32:43 +00:00
EVENTHANDLER.9 eventhandler_register.9
MLINKS+=eventtimers.9 et_register.9 \
eventtimers.9 et_deregister.9 \
eventtimers.9 et_ban.9 \
eventtimers.9 et_find.9 \
eventtimers.9 et_free.9 \
eventtimers.9 et_init.9 \
eventtimers.9 ET_LOCK.9 \
eventtimers.9 ET_UNLOCK.9 \
eventtimers.9 et_start.9 \
eventtimers.9 et_stop.9
MLINKS+=fail.9 KFAIL_POINT_CODE.9 \
fail.9 KFAIL_POINT_ERROR.9 \
fail.9 KFAIL_POINT_GOTO.9 \
fail.9 KFAIL_POINT_RETURN.9 \
fail.9 KFAIL_POINT_RETURN_VOID.9
MLINKS+=fdt_pinctrl.9 fdt_pinctrl_configure.9 \
fdt_pinctrl.9 fdt_pinctrl_configure_by_name.9 \
fdt_pinctrl.9 fdt_pinctrl_configure_tree.9 \
fdt_pinctrl.9 fdt_pinctrl_register.9
MLINKS+=fetch.9 fubyte.9 \
fetch.9 fuword.9 \
fetch.9 fuword16.9 \
fetch.9 fuword32.9 \
fetch.9 fuword64.9 \
fetch.9 fueword.9 \
fetch.9 fueword32.9 \
fetch.9 fueword64.9
MLINKS+=firmware.9 firmware_get.9 \
firmware.9 firmware_put.9 \
firmware.9 firmware_register.9 \
firmware.9 firmware_unregister.9
MLINKS+=fpu_kern.9 fpu_kern_alloc_ctx.9 \
fpu_kern.9 fpu_kern_free_ctx.9 \
fpu_kern.9 fpu_kern_enter.9 \
fpu_kern.9 fpu_kern_leave.9 \
fpu_kern.9 fpu_kern_thread.9 \
fpu_kern.9 is_fpu_kern_thread.9
MLINKS+=g_attach.9 g_detach.9
MLINKS+=g_bio.9 g_alloc_bio.9 \
g_bio.9 g_clone_bio.9 \
g_bio.9 g_destroy_bio.9 \
g_bio.9 g_duplicate_bio.9 \
g_bio.9 g_format_bio.9 \
g_bio.9 g_new_bio.9 \
g_bio.9 g_print_bio.9 \
g_bio.9 g_reset_bio.9
MLINKS+=g_consumer.9 g_destroy_consumer.9 \
g_consumer.9 g_new_consumer.9
MLINKS+=g_data.9 g_read_data.9 \
g_data.9 g_write_data.9
MLINKS+=getenv.9 freeenv.9 \
getenv.9 getenv_int.9 \
getenv.9 getenv_long.9 \
getenv.9 getenv_string.9 \
getenv.9 getenv_quad.9 \
getenv.9 getenv_uint.9 \
getenv.9 getenv_ulong.9 \
getenv.9 kern_getenv.9 \
getenv.9 kern_setenv.9 \
getenv.9 kern_unsetenv.9 \
getenv.9 setenv.9 \
getenv.9 testenv.9 \
getenv.9 unsetenv.9
MLINKS+=g_event.9 g_cancel_event.9 \
g_event.9 g_post_event.9 \
g_event.9 g_waitfor_event.9
MLINKS+=g_geom.9 g_destroy_geom.9 \
g_geom.9 g_new_geomf.9
MLINKS+=g_provider.9 g_destroy_provider.9 \
g_provider.9 g_error_provider.9 \
g_provider.9 g_new_providerf.9
MLINKS+=hash.9 hash32.9 \
hash.9 hash32_buf.9 \
hash.9 hash32_str.9 \
hash.9 hash32_stre.9 \
2006-10-05 12:40:44 +00:00
hash.9 hash32_strn.9 \
hash.9 hash32_strne.9 \
hash.9 jenkins_hash.9 \
hash.9 jenkins_hash32.9
MLINKS+=hashinit.9 hashdestroy.9 \
2007-10-26 11:01:17 +00:00
hashinit.9 hashinit_flags.9 \
hashinit.9 phashinit.9
MLINKS+=hhook.9 hhook_head_register.9 \
hhook.9 hhook_head_deregister.9 \
hhook.9 hhook_head_deregister_lookup.9 \
hhook.9 hhook_run_hooks.9 \
hhook.9 HHOOKS_RUN_IF.9 \
hhook.9 HHOOKS_RUN_LOOKUP_IF.9
MLINKS+=ieee80211.9 ieee80211_ifattach.9 \
ieee80211.9 ieee80211_ifdetach.9
MLINKS+=ieee80211_amrr.9 ieee80211_amrr_choose.9 \
ieee80211_amrr.9 ieee80211_amrr_cleanup.9 \
2009-12-22 16:02:08 +00:00
ieee80211_amrr.9 ieee80211_amrr_init.9 \
ieee80211_amrr.9 ieee80211_amrr_node_init.9 \
2009-12-22 16:02:08 +00:00
ieee80211_amrr.9 ieee80211_amrr_setinterval.9 \
ieee80211_amrr.9 ieee80211_amrr_tx_complete.9 \
ieee80211_amrr.9 ieee80211_amrr_tx_update.9
MLINKS+=ieee80211_beacon.9 ieee80211_beacon_alloc.9 \
2009-12-22 16:02:08 +00:00
ieee80211_beacon.9 ieee80211_beacon_notify.9 \
ieee80211_beacon.9 ieee80211_beacon_update.9
MLINKS+=ieee80211_bmiss.9 ieee80211_beacon_miss.9
2009-12-22 16:02:08 +00:00
MLINKS+=ieee80211_crypto.9 ieee80211_crypto_available.9 \
ieee80211_crypto.9 ieee80211_crypto_decap.9 \
2009-12-22 16:02:08 +00:00
ieee80211_crypto.9 ieee80211_crypto_delglobalkeys.9 \
ieee80211_crypto.9 ieee80211_crypto_delkey.9 \
ieee80211_crypto.9 ieee80211_crypto_demic.9 \
2009-12-22 16:02:08 +00:00
ieee80211_crypto.9 ieee80211_crypto_encap.9 \
ieee80211_crypto.9 ieee80211_crypto_enmic.9 \
2009-12-22 16:02:08 +00:00
ieee80211_crypto.9 ieee80211_crypto_newkey.9 \
ieee80211_crypto.9 ieee80211_crypto_register.9 \
2009-12-22 16:02:08 +00:00
ieee80211_crypto.9 ieee80211_crypto_reload_keys.9 \
ieee80211_crypto.9 ieee80211_crypto_setkey.9 \
ieee80211_crypto.9 ieee80211_crypto_unregister.9 \
2009-12-22 16:02:08 +00:00
ieee80211_crypto.9 ieee80211_key_update_begin.9 \
ieee80211_crypto.9 ieee80211_key_update_end.9 \
ieee80211_crypto.9 ieee80211_notify_michael_failure.9 \
ieee80211_crypto.9 ieee80211_notify_replay_failure.9
MLINKS+=ieee80211_input.9 ieee80211_input_all.9
2009-12-22 16:02:08 +00:00
MLINKS+=ieee80211_node.9 ieee80211_dump_node.9 \
ieee80211_node.9 ieee80211_dump_nodes.9 \
ieee80211_node.9 ieee80211_find_rxnode.9 \
ieee80211_node.9 ieee80211_find_rxnode_withkey.9 \
ieee80211_node.9 ieee80211_free_node.9 \
ieee80211_node.9 ieee80211_iterate_nodes.9 \
2009-12-22 16:02:08 +00:00
ieee80211_node.9 ieee80211_ref_node.9 \
ieee80211_node.9 ieee80211_unref_node.9
MLINKS+=ieee80211_output.9 ieee80211_process_callback.9 \
ieee80211_output.9 M_SEQNO_GET.9 \
2009-12-22 16:02:08 +00:00
ieee80211_output.9 M_WME_GETAC.9
MLINKS+=ieee80211_proto.9 ieee80211_new_state.9 \
2009-12-22 16:02:08 +00:00
ieee80211_proto.9 ieee80211_resume_all.9 \
ieee80211_proto.9 ieee80211_start_all.9 \
ieee80211_proto.9 ieee80211_stop_all.9 \
ieee80211_proto.9 ieee80211_suspend_all.9 \
ieee80211_proto.9 ieee80211_waitfor_parent.9
2009-12-22 16:02:08 +00:00
MLINKS+=ieee80211_radiotap.9 ieee80211_radiotap_active.9 \
ieee80211_radiotap.9 ieee80211_radiotap_active_vap.9 \
2009-12-22 16:02:08 +00:00
ieee80211_radiotap.9 ieee80211_radiotap_attach.9 \
ieee80211_radiotap.9 ieee80211_radiotap_tx.9 \
ieee80211_radiotap.9 radiotap.9
MLINKS+=ieee80211_regdomain.9 ieee80211_alloc_countryie.9 \
ieee80211_regdomain.9 ieee80211_init_channels.9 \
ieee80211_regdomain.9 ieee80211_sort_channels.9
MLINKS+=ieee80211_scan.9 ieee80211_add_scan.9 \
ieee80211_scan.9 ieee80211_bg_scan.9 \
ieee80211_scan.9 ieee80211_cancel_scan.9 \
ieee80211_scan.9 ieee80211_cancel_scan_any.9 \
ieee80211_scan.9 ieee80211_check_scan.9 \
ieee80211_scan.9 ieee80211_check_scan_current.9 \
ieee80211_scan.9 ieee80211_flush.9 \
ieee80211_scan.9 ieee80211_probe_curchan.9 \
ieee80211_scan.9 ieee80211_scan_assoc_fail.9 \
ieee80211_scan.9 ieee80211_scan_done.9 \
ieee80211_scan.9 ieee80211_scan_dump_channels.9 \
ieee80211_scan.9 ieee80211_scan_flush.9 \
ieee80211_scan.9 ieee80211_scan_iterate.9 \
ieee80211_scan.9 ieee80211_scan_next.9 \
ieee80211_scan.9 ieee80211_scan_timeout.9 \
ieee80211_scan.9 ieee80211_scanner_get.9 \
ieee80211_scan.9 ieee80211_scanner_register.9 \
ieee80211_scan.9 ieee80211_scanner_unregister.9 \
ieee80211_scan.9 ieee80211_scanner_unregister_all.9 \
ieee80211_scan.9 ieee80211_start_scan.9
2009-12-22 16:02:08 +00:00
MLINKS+=ieee80211_vap.9 ieee80211_vap_attach.9 \
ieee80211_vap.9 ieee80211_vap_detach.9 \
ieee80211_vap.9 ieee80211_vap_setup.9
MLINKS+=iflibdd.9 ifdi_attach_pre.9 \
iflibdd.9 ifdi_attach_post.9 \
iflibdd.9 ifdi_detach.9 \
iflibdd.9 ifdi_get_counter.9 \
iflibdd.9 ifdi_i2c_req.9 \
iflibdd.9 ifdi_init.9 \
iflibdd.9 ifdi_intr_enable.9 \
iflibdd.9 ifdi_intr_disable.9 \
iflibdd.9 ifdi_led_func.9 \
iflibdd.9 ifdi_link_intr_enable.9 \
iflibdd.9 ifdi_media_set.9 \
iflibdd.9 ifdi_media_status.9 \
iflibdd.9 ifdi_media_change.9 \
iflibdd.9 ifdi_mtu_set.9 \
iflibdd.9 ifdi_multi_set.9 \
iflibdd.9 ifdi_promisc_set.9 \
iflibdd.9 ifdi_queues_alloc.9 \
iflibdd.9 ifdi_queues_free.9 \
iflibdd.9 ifdi_queue_intr_enable.9 \
iflibdd.9 ifdi_resume.9 \
iflibdd.9 ifdi_rxq_setup.9 \
iflibdd.9 ifdi_stop.9 \
iflibdd.9 ifdi_suspend.9 \
iflibdd.9 ifdi_sysctl_int_delay.9 \
iflibdd.9 ifdi_timer.9 \
iflibdd.9 ifdi_txq_setup.9 \
iflibdd.9 ifdi_update_admin_status.9 \
iflibdd.9 ifdi_vf_add.9 \
iflibdd.9 ifdi_vflr_handle.9 \
iflibdd.9 ifdi_vlan_register.9 \
iflibdd.9 ifdi_vlan_unregister.9 \
iflibdd.9 ifdi_watchdog_reset.9 \
iflibdd.9 iov_init.9 \
iflibdd.9 iov_uinit.9
MLINKS+=iflibdi.9 iflib_add_int_delay_sysctl.9 \
iflibdi.9 iflib_device_attach.9 \
iflibdi.9 iflib_device_deregister.9 \
iflibdi.9 iflib_device_detach.9 \
iflibdi.9 iflib_device_suspend.9 \
iflibdi.9 iflib_device_register.9 \
iflibdi.9 iflib_device_resume.9 \
iflibdi.9 iflib_led_create.9 \
iflibdi.9 iflib_irq_alloc.9 \
iflibdi.9 iflib_irq_alloc_generic.9 \
iflibdi.9 iflib_link_intr_deferred.9 \
iflibdi.9 iflib_link_state_change.9 \
iflibdi.9 iflib_rx_intr_deferred.9 \
iflibdi.9 iflib_tx_intr_deferred.9
MLINKS+=iflibtxrx.9 isc_rxd_available.9 \
iflibtxrx.9 isc_rxd_refill.9 \
iflibtxrx.9 isc_rxd_flush.9 \
iflibtxrx.9 isc_rxd_pkt_get.9 \
iflibtxrx.9 isc_txd_credits_update.9 \
iflibtxrx.9 isc_txd_encap.9 \
iflibtxrx.9 isc_txd_flush.9
MLINKS+=ifnet.9 if_addmulti.9 \
ifnet.9 if_alloc.9 \
ifnet.9 if_alloc_dev.9 \
ifnet.9 if_alloc_domain.9 \
ifnet.9 if_allmulti.9 \
ifnet.9 if_attach.9 \
ifnet.9 if_data.9 \
ifnet.9 IF_DEQUEUE.9 \
ifnet.9 if_delmulti.9 \
ifnet.9 if_detach.9 \
ifnet.9 if_down.9 \
ifnet.9 if_findmulti.9 \
ifnet.9 if_free.9 \
ifnet.9 if_free_type.9 \
ifnet.9 if_up.9 \
ifnet.9 ifa_free.9 \
ifnet.9 ifa_ifwithaddr.9 \
ifnet.9 ifa_ifwithdstaddr.9 \
ifnet.9 ifa_ifwithnet.9 \
ifnet.9 ifa_ref.9 \
ifnet.9 ifaddr.9 \
ifnet.9 ifaddr_byindex.9 \
ifnet.9 ifaof_ifpforaddr.9 \
ifnet.9 ifioctl.9 \
ifnet.9 ifpromisc.9 \
ifnet.9 ifqueue.9 \
ifnet.9 ifunit.9 \
ifnet.9 ifunit_ref.9
MLINKS+=insmntque.9 insmntque1.9
MLINKS+=ithread.9 ithread_add_handler.9 \
ithread.9 ithread_create.9 \
ithread.9 ithread_destroy.9 \
ithread.9 ithread_priority.9 \
ithread.9 ithread_remove_handler.9 \
ithread.9 ithread_schedule.9
MLINKS+=kernacc.9 useracc.9
MLINKS+=kernel_mount.9 free_mntarg.9 \
kernel_mount.9 kernel_vmount.9 \
kernel_mount.9 mount_arg.9 \
kernel_mount.9 mount_argb.9 \
kernel_mount.9 mount_argf.9 \
kernel_mount.9 mount_argsu.9
MLINKS+=khelp.9 khelp_add_hhook.9 \
khelp.9 KHELP_DECLARE_MOD.9 \
khelp.9 KHELP_DECLARE_MOD_UMA.9 \
khelp.9 khelp_destroy_osd.9 \
khelp.9 khelp_get_id.9 \
khelp.9 khelp_get_osd.9 \
khelp.9 khelp_init_osd.9 \
khelp.9 khelp_remove_hhook.9
MLINKS+=kobj.9 DEFINE_CLASS.9 \
kobj.9 kobj_class_compile.9 \
kobj.9 kobj_class_compile_static.9 \
kobj.9 kobj_class_free.9 \
kobj.9 kobj_create.9 \
kobj.9 kobj_delete.9 \
kobj.9 kobj_init.9 \
kobj.9 kobj_init_static.9
2007-10-26 16:50:21 +00:00
MLINKS+=kproc.9 kproc_create.9 \
kproc.9 kproc_exit.9 \
kproc.9 kproc_kthread_add.9 \
kproc.9 kproc_resume.9 \
2007-10-26 16:50:21 +00:00
kproc.9 kproc_shutdown.9 \
kproc.9 kproc_start.9 \
kproc.9 kproc_suspend.9 \
2009-12-22 16:02:08 +00:00
kproc.9 kproc_suspend_check.9 \
kproc.9 kthread_create.9
MLINKS+=kqueue.9 knlist_add.9 \
kqueue.9 knlist_clear.9 \
kqueue.9 knlist_delete.9 \
kqueue.9 knlist_destroy.9 \
kqueue.9 knlist_empty.9 \
kqueue.9 knlist_init.9 \
kqueue.9 knlist_init_mtx.9 \
kqueue.9 knlist_init_rw_reader.9 \
kqueue.9 knlist_remove.9 \
kqueue.9 knlist_remove_inevent.9 \
kqueue.9 knote_fdclose.9 \
kqueue.9 KNOTE_LOCKED.9 \
kqueue.9 KNOTE_UNLOCKED.9 \
kqueue.9 kqfd_register.9 \
kqueue.9 kqueue_add_filteropts.9 \
kqueue.9 kqueue_del_filteropts.9
2007-10-26 16:50:21 +00:00
MLINKS+=kthread.9 kthread_add.9 \
kthread.9 kthread_exit.9 \
kthread.9 kthread_resume.9 \
2007-10-26 16:50:21 +00:00
kthread.9 kthread_shutdown.9 \
kthread.9 kthread_start.9 \
kthread.9 kthread_suspend.9 \
kthread.9 kthread_suspend_check.9
MLINKS+=ktr.9 CTR0.9 \
ktr.9 CTR1.9 \
ktr.9 CTR2.9 \
ktr.9 CTR3.9 \
ktr.9 CTR4.9 \
ktr.9 CTR5.9 \
ktr.9 CTR6.9
MLINKS+=lock.9 lockdestroy.9 \
lock.9 lockinit.9 \
lock.9 lockmgr.9 \
2008-03-01 20:39:56 +00:00
lock.9 lockmgr_args.9 \
lock.9 lockmgr_args_rw.9 \
lock.9 lockmgr_assert.9 \
lock.9 lockmgr_disown.9 \
lock.9 lockmgr_printinfo.9 \
lock.9 lockmgr_recursed.9 \
lock.9 lockmgr_rw.9 \
lock.9 lockstatus.9
MLINKS+=LOCK_PROFILING.9 MUTEX_PROFILING.9
MLINKS+=make_dev.9 destroy_dev.9 \
make_dev.9 destroy_dev_drain.9 \
make_dev.9 destroy_dev_sched.9 \
make_dev.9 destroy_dev_sched_cb.9 \
make_dev.9 dev_depends.9 \
make_dev.9 make_dev_alias.9 \
make_dev.9 make_dev_alias_p.9 \
make_dev.9 make_dev_cred.9 \
make_dev.9 make_dev_credf.9 \
make_dev.9 make_dev_p.9 \
make_dev.9 make_dev_s.9
MLINKS+=malloc.9 free.9 \
malloc.9 malloc_domainset.9 \
malloc.9 mallocarray.9 \
malloc.9 MALLOC_DECLARE.9 \
malloc.9 MALLOC_DEFINE.9 \
malloc.9 realloc.9 \
malloc.9 reallocf.9
MLINKS+=mbchain.9 mb_detach.9 \
mbchain.9 mb_done.9 \
mbchain.9 mb_fixhdr.9 \
mbchain.9 mb_init.9 \
mbchain.9 mb_initm.9 \
mbchain.9 mb_put_int64be.9 \
mbchain.9 mb_put_int64le.9 \
mbchain.9 mb_put_mbuf.9 \
mbchain.9 mb_put_mem.9 \
mbchain.9 mb_put_uint16be.9 \
mbchain.9 mb_put_uint16le.9 \
mbchain.9 mb_put_uint32be.9 \
mbchain.9 mb_put_uint32le.9 \
mbchain.9 mb_put_uint8.9 \
mbchain.9 mb_put_uio.9 \
mbchain.9 mb_reserve.9
MLINKS+=\
mbuf.9 m_adj.9 \
mbuf.9 m_align.9 \
mbuf.9 M_ALIGN.9 \
mbuf.9 m_append.9 \
mbuf.9 m_apply.9 \
mbuf.9 m_cat.9 \
mbuf.9 m_catpkt.9 \
mbuf.9 MCHTYPE.9 \
mbuf.9 MCLGET.9 \
mbuf.9 m_collapse.9 \
mbuf.9 m_copyback.9 \
mbuf.9 m_copydata.9 \
mbuf.9 m_copym.9 \
mbuf.9 m_copypacket.9 \
mbuf.9 m_copyup.9 \
mbuf.9 m_defrag.9 \
mbuf.9 m_devget.9 \
mbuf.9 m_dup.9 \
mbuf.9 m_dup_pkthdr.9 \
mbuf.9 MEXTADD.9 \
mbuf.9 m_fixhdr.9 \
mbuf.9 m_free.9 \
mbuf.9 m_freem.9 \
mbuf.9 MGET.9 \
mbuf.9 m_get.9 \
mbuf.9 m_get2.9 \
2013-12-20 23:57:05 +00:00
mbuf.9 m_getjcl.9 \
mbuf.9 m_getcl.9 \
mbuf.9 MGETHDR.9 \
mbuf.9 m_gethdr.9 \
mbuf.9 m_getm.9 \
mbuf.9 m_getptr.9 \
mbuf.9 MH_ALIGN.9 \
mbuf.9 M_LEADINGSPACE.9 \
mbuf.9 m_length.9 \
mbuf.9 M_MOVE_PKTHDR.9 \
mbuf.9 m_move_pkthdr.9 \
mbuf.9 M_PREPEND.9 \
mbuf.9 m_prepend.9 \
mbuf.9 m_pulldown.9 \
mbuf.9 m_pullup.9 \
mbuf.9 m_split.9 \
mbuf.9 mtod.9 \
mbuf.9 M_TRAILINGSPACE.9 \
mbuf.9 m_unshare.9 \
mbuf.9 M_WRITABLE.9
MLINKS+=\
mbuf_tags.9 m_tag_alloc.9 \
mbuf_tags.9 m_tag_copy.9 \
mbuf_tags.9 m_tag_copy_chain.9 \
mbuf_tags.9 m_tag_delete.9 \
mbuf_tags.9 m_tag_delete_chain.9 \
mbuf_tags.9 m_tag_delete_nonpersistent.9 \
mbuf_tags.9 m_tag_find.9 \
mbuf_tags.9 m_tag_first.9 \
mbuf_tags.9 m_tag_free.9 \
mbuf_tags.9 m_tag_get.9 \
mbuf_tags.9 m_tag_init.9 \
mbuf_tags.9 m_tag_locate.9 \
mbuf_tags.9 m_tag_next.9 \
mbuf_tags.9 m_tag_prepend.9 \
mbuf_tags.9 m_tag_unlink.9
MLINKS+=MD5.9 MD5Init.9 \
MD5.9 MD5Transform.9
MLINKS+=mdchain.9 md_append_record.9 \
mdchain.9 md_done.9 \
mdchain.9 md_get_int64.9 \
mdchain.9 md_get_int64be.9 \
mdchain.9 md_get_int64le.9 \
mdchain.9 md_get_mbuf.9 \
mdchain.9 md_get_mem.9 \
mdchain.9 md_get_uint16.9 \
mdchain.9 md_get_uint16be.9 \
mdchain.9 md_get_uint16le.9 \
mdchain.9 md_get_uint32.9 \
mdchain.9 md_get_uint32be.9 \
mdchain.9 md_get_uint32le.9 \
mdchain.9 md_get_uint8.9 \
mdchain.9 md_get_uio.9 \
mdchain.9 md_initm.9 \
mdchain.9 md_next_record.9
MLINKS+=microtime.9 bintime.9 \
microtime.9 getbintime.9 \
microtime.9 getmicrotime.9 \
microtime.9 getnanotime.9 \
microtime.9 nanotime.9
MLINKS+=microuptime.9 binuptime.9 \
microuptime.9 getbinuptime.9 \
microuptime.9 getmicrouptime.9 \
microuptime.9 getnanouptime.9 \
microuptime.9 getsbinuptime.9 \
microuptime.9 nanouptime.9 \
microuptime.9 sbinuptime.9
MLINKS+=mi_switch.9 cpu_switch.9 \
mi_switch.9 cpu_throw.9
MLINKS+=mod_cc.9 CCV.9 \
mod_cc.9 DECLARE_CC_MODULE.9
MLINKS+=mtx_pool.9 mtx_pool_alloc.9 \
mtx_pool.9 mtx_pool_create.9 \
mtx_pool.9 mtx_pool_destroy.9 \
mtx_pool.9 mtx_pool_find.9 \
mtx_pool.9 mtx_pool_lock.9 \
mtx_pool.9 mtx_pool_lock_spin.9 \
mtx_pool.9 mtx_pool_unlock.9 \
mtx_pool.9 mtx_pool_unlock_spin.9
MLINKS+=mutex.9 mtx_assert.9 \
mutex.9 mtx_destroy.9 \
mutex.9 mtx_init.9 \
mutex.9 mtx_initialized.9 \
mutex.9 mtx_lock.9 \
mutex.9 mtx_lock_flags.9 \
mutex.9 mtx_lock_spin.9 \
mutex.9 mtx_lock_spin_flags.9 \
mutex.9 mtx_owned.9 \
mutex.9 mtx_recursed.9 \
mutex.9 mtx_sleep.9 \
mutex.9 MTX_SYSINIT.9 \
mutex.9 mtx_trylock.9 \
mutex.9 mtx_trylock_flags.9 \
mutex.9 mtx_trylock_spin.9 \
mutex.9 mtx_trylock_spin_flags.9 \
mutex.9 mtx_unlock.9 \
mutex.9 mtx_unlock_flags.9 \
mutex.9 mtx_unlock_spin.9 \
mutex.9 mtx_unlock_spin_flags.9
MLINKS+=namei.9 NDFREE.9 \
2010-01-19 20:36:15 +00:00
namei.9 NDINIT.9
MLINKS+=netisr.9 netisr_clearqdrops.9 \
netisr.9 netisr_default_flow2cpu.9 \
netisr.9 netisr_dispatch.9 \
netisr.9 netisr_dispatch_src.9 \
netisr.9 netisr_get_cpucount.9 \
netisr.9 netisr_get_cpuid.9 \
netisr.9 netisr_getqdrops.9 \
netisr.9 netisr_getqlimit.9 \
netisr.9 netisr_queue.9 \
netisr.9 netisr_queue_src.9 \
netisr.9 netisr_register.9 \
netisr.9 netisr_setqlimit.9 \
netisr.9 netisr_unregister.9
MLINKS+=nv.9 libnv.9 \
nv.9 nvlist.9 \
nv.9 nvlist_add_binary.9 \
nv.9 nvlist_add_bool.9 \
nv.9 nvlist_add_bool_array.9 \
nv.9 nvlist_add_descriptor.9 \
nv.9 nvlist_add_descriptor_array.9 \
nv.9 nvlist_add_null.9 \
nv.9 nvlist_add_number.9 \
nv.9 nvlist_add_number_array.9 \
nv.9 nvlist_add_nvlist.9 \
nv.9 nvlist_add_nvlist_array.9 \
nv.9 nvlist_add_string.9 \
nv.9 nvlist_add_stringf.9 \
nv.9 nvlist_add_stringv.9 \
nv.9 nvlist_add_string_array.9 \
nv.9 nvlist_clone.9 \
nv.9 nvlist_create.9 \
nv.9 nvlist_destroy.9 \
nv.9 nvlist_dump.9 \
nv.9 nvlist_empty.9 \
nv.9 nvlist_error.9 \
nv.9 nvlist_exists.9 \
nv.9 nvlist_exists_binary.9 \
nv.9 nvlist_exists_bool.9 \
nv.9 nvlist_exists_bool_array.9 \
nv.9 nvlist_exists_descriptor.9 \
nv.9 nvlist_exists_descriptor_array.9 \
nv.9 nvlist_exists_null.9 \
nv.9 nvlist_exists_number.9 \
nv.9 nvlist_exists_number_array.9 \
nv.9 nvlist_exists_nvlist.9 \
nv.9 nvlist_exists_nvlist_array.9 \
nv.9 nvlist_exists_string.9 \
nv.9 nvlist_exists_type.9 \
nv.9 nvlist_fdump.9 \
nv.9 nvlist_flags.9 \
nv.9 nvlist_free.9 \
nv.9 nvlist_free_binary.9 \
nv.9 nvlist_free_bool.9 \
nv.9 nvlist_free_bool_array.9 \
nv.9 nvlist_free_descriptor.9 \
nv.9 nvlist_free_descriptor_array.9 \
nv.9 nvlist_free_null.9 \
nv.9 nvlist_free_number.9 \
nv.9 nvlist_free_number_array.9 \
nv.9 nvlist_free_nvlist.9 \
nv.9 nvlist_free_nvlist_array.9 \
nv.9 nvlist_free_string.9 \
nv.9 nvlist_free_string_array.9 \
nv.9 nvlist_free_type.9 \
nv.9 nvlist_get_binary.9 \
nv.9 nvlist_get_bool.9 \
nv.9 nvlist_get_bool_array.9 \
nv.9 nvlist_get_descriptor.9 \
nv.9 nvlist_get_descriptor_array.9 \
nv.9 nvlist_get_number.9 \
nv.9 nvlist_get_number_array.9 \
nv.9 nvlist_get_nvlist.9 \
nv.9 nvlist_get_nvlist_array.9 \
nv.9 nvlist_get_parent.9 \
nv.9 nvlist_get_string.9 \
nv.9 nvlist_get_string_array.9 \
nv.9 nvlist_move_binary.9 \
nv.9 nvlist_move_descriptor.9 \
nv.9 nvlist_move_descriptor_array.9 \
nv.9 nvlist_move_nvlist.9 \
nv.9 nvlist_move_nvlist_array.9 \
nv.9 nvlist_move_string.9 \
nv.9 nvlist_move_string_array.9 \
nv.9 nvlist_next.9 \
nv.9 nvlist_pack.9 \
nv.9 nvlist_recv.9 \
nv.9 nvlist_send.9 \
nv.9 nvlist_set_error.9 \
nv.9 nvlist_size.9 \
nv.9 nvlist_take_binary.9 \
nv.9 nvlist_take_bool.9 \
nv.9 nvlist_take_bool_array.9 \
nv.9 nvlist_take_descriptor.9 \
nv.9 nvlist_take_descriptor_array.9 \
nv.9 nvlist_take_number.9 \
nv.9 nvlist_take_number_array.9 \
nv.9 nvlist_take_nvlist.9 \
nv.9 nvlist_take_nvlist_array.9 \
nv.9 nvlist_take_string.9 \
nv.9 nvlist_take_string_array.9 \
nv.9 nvlist_unpack.9 \
nv.9 nvlist_xfer.9
MLINKS+=OF_child.9 OF_parent.9 \
OF_child.9 OF_peer.9
MLINKS+=OF_device_from_xref.9 OF_device_register_xref.9 \
OF_device_from_xref.9 OF_xref_from_device.9
MLINKS+=OF_getprop.9 OF_getencprop.9 \
OF_getprop.9 OF_getencprop_alloc.9 \
OF_getprop.9 OF_getencprop_alloc_multi.9 \
OF_getprop.9 OF_getprop_alloc.9 \
OF_getprop.9 OF_getprop_alloc_multi.9 \
OF_getprop.9 OF_getproplen.9 \
OF_getprop.9 OF_hasprop.9 \
OF_getprop.9 OF_nextprop.9 \
OF_getprop.9 OF_prop_free.9 \
OF_getprop.9 OF_searchencprop.9 \
OF_getprop.9 OF_searchprop.9 \
OF_getprop.9 OF_setprop.9
MLINKS+=OF_node_from_xref.9 OF_xref_from_node.9
MLINKS+=ofw_bus_is_compatible.9 ofw_bus_is_compatible_strict.9 \
ofw_bus_is_compatible.9 ofw_bus_node_is_compatible.9 \
ofw_bus_is_compatible.9 ofw_bus_search_compatible.9
MLINKS+= ofw_bus_status_okay.9 ofw_bus_get_status.9 \
ofw_bus_status_okay.9 ofw_bus_node_status_okay.9
MLINKS+=osd.9 osd_call.9 \
osd.9 osd_del.9 \
osd.9 osd_deregister.9 \
osd.9 osd_exit.9 \
osd.9 osd_get.9 \
osd.9 osd_register.9 \
osd.9 osd_set.9
MLINKS+=panic.9 vpanic.9
MLINKS+=PCBGROUP.9 in_pcbgroup_byhash.9 \
PCBGROUP.9 in_pcbgroup_byinpcb.9 \
PCBGROUP.9 in_pcbgroup_destroy.9 \
PCBGROUP.9 in_pcbgroup_enabled.9 \
PCBGROUP.9 in_pcbgroup_init.9 \
PCBGROUP.9 in_pcbgroup_remove.9 \
PCBGROUP.9 in_pcbgroup_update.9 \
PCBGROUP.9 in_pcbgroup_update_mbuf.9 \
PCBGROUP.9 in6_pcbgroup_byhash.9
MLINKS+=pci.9 pci_alloc_msi.9 \
pci.9 pci_alloc_msix.9 \
pci.9 pci_disable_busmaster.9 \
pci.9 pci_disable_io.9 \
pci.9 pci_enable_busmaster.9 \
pci.9 pci_enable_io.9 \
pci.9 pci_find_bsf.9 \
pci.9 pci_find_cap.9 \
pci.9 pci_find_dbsf.9 \
pci.9 pci_find_device.9 \
pci.9 pci_find_extcap.9 \
pci.9 pci_find_htcap.9 \
pci.9 pci_find_pcie_root_port.9 \
pci.9 pci_get_id.9 \
pci.9 pci_get_max_read_req.9 \
pci.9 pci_get_powerstate.9 \
pci.9 pci_get_vpd_ident.9 \
pci.9 pci_get_vpd_readonly.9 \
pci.9 pci_iov_attach.9 \
pci.9 pci_iov_attach_name.9 \
pci.9 pci_iov_detach.9 \
pci.9 pci_msi_count.9 \
pci.9 pci_msix_count.9 \
pci.9 pci_msix_pba_bar.9 \
pci.9 pci_msix_table_bar.9 \
pci.9 pci_pending_msix.9 \
pci.9 pci_read_config.9 \
pci.9 pci_release_msi.9 \
pci.9 pci_remap_msix.9 \
pci.9 pci_restore_state.9 \
pci.9 pci_save_state.9 \
pci.9 pci_set_powerstate.9 \
pci.9 pci_set_max_read_req.9 \
pci.9 pci_write_config.9 \
pci.9 pcie_adjust_config.9 \
pci.9 pcie_flr.9 \
pci.9 pcie_max_completion_timeout.9 \
pci.9 pcie_read_config.9 \
pci.9 pcie_wait_for_pending_transactions.9 \
2015-11-05 22:50:21 +00:00
pci.9 pcie_write_config.9
MLINKS+=pci_iov_schema.9 pci_iov_schema_alloc_node.9 \
pci_iov_schema.9 pci_iov_schema_add_bool.9 \
pci_iov_schema.9 pci_iov_schema_add_string.9 \
pci_iov_schema.9 pci_iov_schema_add_uint8.9 \
pci_iov_schema.9 pci_iov_schema_add_uint16.9 \
pci_iov_schema.9 pci_iov_schema_add_uint32.9 \
pci_iov_schema.9 pci_iov_schema_add_uint64.9 \
pci_iov_schema.9 pci_iov_schema_add_unicast_mac.9
MLINKS+=pfil.9 pfil_add_hook.9 \
pfil.9 pfil_head_register.9 \
pfil.9 pfil_head_unregister.9 \
pfil.9 pfil_remove_hook.9 \
pfil.9 pfil_run_hooks.9 \
New pfil(9) KPI together with newborn pfil API and control utility. The KPI have been reviewed and cleansed of features that were planned back 20 years ago and never implemented. The pfil(9) internals have been made opaque to protocols with only returned types and function declarations exposed. The KPI is made more strict, but at the same time more extensible, as kernel uses same command structures that userland ioctl uses. In nutshell [KA]PI is about declaring filtering points, declaring filters and linking and unlinking them together. New [KA]PI makes it possible to reconfigure pfil(9) configuration: change order of hooks, rehook filter from one filtering point to a different one, disconnect a hook on output leaving it on input only, prepend/append a filter to existing list of filters. Now it possible for a single packet filter to provide multiple rulesets that may be linked to different points. Think of per-interface ACLs in Cisco or Juniper. None of existing packet filters yet support that, however limited usage is already possible, e.g. default ruleset can be moved to single interface, as soon as interface would pride their filtering points. Another future feature is possiblity to create pfil heads, that provide not an mbuf pointer but just a memory pointer with length. That would allow filtering at very early stages of a packet lifecycle, e.g. when packet has just been received by a NIC and no mbuf was yet allocated. Differential Revision: https://reviews.freebsd.org/D18951
2019-01-31 23:01:03 +00:00
pfil.9 pfil_link.9
MLINKS+=pfind.9 zpfind.9
MLINKS+=PHOLD.9 PRELE.9 \
PHOLD.9 _PHOLD.9 \
PHOLD.9 _PRELE.9 \
PHOLD.9 PROC_ASSERT_HELD.9 \
PHOLD.9 PROC_ASSERT_NOT_HELD.9
MLINKS+=pmap_copy.9 pmap_copy_page.9
MLINKS+=pmap_extract.9 pmap_extract_and_hold.9
MLINKS+=pmap_init.9 pmap_init2.9
MLINKS+=pmap_is_modified.9 pmap_ts_referenced.9
MLINKS+=pmap_pinit.9 pmap_pinit0.9 \
pmap_pinit.9 pmap_pinit2.9
MLINKS+=pmap_qenter.9 pmap_qremove.9
MLINKS+=pmap_quick_enter_page.9 pmap_quick_remove_page.9
MLINKS+=pmap_remove.9 pmap_remove_all.9 \
pmap_remove.9 pmap_remove_pages.9
MLINKS+=pmap_resident_count.9 pmap_wired_count.9
MLINKS+=pmap_zero_page.9 pmap_zero_area.9
MLINKS+=printf.9 log.9 \
printf.9 tprintf.9 \
printf.9 uprintf.9
MLINKS+=priv.9 priv_check.9 \
2007-03-28 04:43:55 +00:00
priv.9 priv_check_cred.9
MLINKS+=prng.9 prng32.9 \
prng.9 prng32_bounded.9 \
prng.9 prng64.9 \
prng.9 prng64_bounded.9
MLINKS+=proc_rwmem.9 proc_readmem.9 \
proc_rwmem.9 proc_writemem.9
MLINKS+=psignal.9 gsignal.9 \
2011-10-07 22:14:18 +00:00
psignal.9 pgsignal.9 \
psignal.9 tdsignal.9
MLINKS+=pwmbus.9 pwm.9
MLINKS+=random.9 arc4rand.9 \
random.9 arc4random.9 \
random.9 is_random_seeded.9 \
random.9 read_random.9 \
random.9 read_random_uio.9 \
random.9 srandom.9
MLINKS+=random_harvest.9 random_harvest_direct.9 \
random_harvest.9 random_harvest_fast.9 \
random_harvest.9 random_harvest_queue.9
MLINKS+=ratecheck.9 ppsratecheck.9
MLINKS+=refcount.9 refcount_acquire.9 \
refcount.9 refcount_init.9 \
refcount.9 refcount_release.9
MLINKS+=resource_int_value.9 resource_long_value.9 \
resource_int_value.9 resource_string_value.9
MLINKS+=rman.9 rman_activate_resource.9 \
rman.9 rman_adjust_resource.9 \
rman.9 rman_deactivate_resource.9 \
rman.9 rman_fini.9 \
rman.9 rman_first_free_region.9 \
rman.9 rman_get_bushandle.9 \
rman.9 rman_get_bustag.9 \
rman.9 rman_get_device.9 \
rman.9 rman_get_end.9 \
rman.9 rman_get_flags.9 \
Add new bus methods for mapping resources. Add a pair of bus methods that can be used to "map" resources for direct CPU access using bus_space(9). bus_map_resource() creates a mapping and bus_unmap_resource() releases a previously created mapping. Mappings are described by 'struct resource_map' object. Pointers to these objects can be passed as the first argument to the bus_space wrapper API used for bus resources. Drivers that wish to map all of a resource using default settings (for example, using uncacheable memory attributes) do not need to change. However, drivers that wish to use non-default settings can now do so without jumping through hoops. First, an RF_UNMAPPED flag is added to request that a resource is not implicitly mapped with the default settings when it is activated. This permits other activation steps (such as enabling I/O or memory decoding in a device's PCI command register) to be taken without creating a mapping. Right now the AGP drivers don't set RF_ACTIVE to avoid using up a large amount of KVA to map the AGP aperture on 32-bit platforms. Once RF_UNMAPPED is supported on all platforms that support AGP this can be changed to using RF_UNMAPPED with RF_ACTIVE instead. Second, bus_map_resource accepts an optional structure that defines additional settings for a given mapping. For example, a driver can now request to map only a subset of a resource instead of the entire range. The AGP driver could also use this to only map the first page of the aperture (IIRC, it calls pmap_mapdev() directly to map the first page currently). I will also eventually change the PCI-PCI bridge driver to request mappings of the subset of the I/O window resource on its parent side to create mappings for child devices rather than passing child resources directly up to nexus to be mapped. This also permits bridges that do address translation to request suitable mappings from a resource on the "upper" side of the bus when mapping resources on the "lower" side of the bus. Another attribute that can be specified is an alternate memory attribute for memory-mapped resources. This can be used to request a Write-Combining mapping of a PCI BAR in an MI fashion. (Currently the drivers that do this call pmap_change_attr() directly for x86 only.) Note that this commit only adds the MI framework. Each platform needs to add support for handling RF_UNMAPPED and thew new bus_map/unmap_resource methods. Generally speaking, any drivers that are calling rman_set_bustag() and rman_set_bushandle() need to be updated. Discussed on: arch Reviewed by: cem Differential Revision: https://reviews.freebsd.org/D5237
2016-05-20 17:57:47 +00:00
rman.9 rman_get_mapping.9 \
rman.9 rman_get_rid.9 \
rman.9 rman_get_size.9 \
rman.9 rman_get_start.9 \
rman.9 rman_get_virtual.9 \
rman.9 rman_init.9 \
rman.9 rman_init_from_resource.9 \
rman.9 rman_is_region_manager.9 \
rman.9 rman_last_free_region.9 \
rman.9 rman_make_alignment_flags.9 \
rman.9 rman_manage_region.9 \
rman.9 rman_release_resource.9 \
rman.9 rman_reserve_resource.9 \
rman.9 rman_reserve_resource_bound.9 \
rman.9 rman_set_bushandle.9 \
rman.9 rman_set_bustag.9 \
Add new bus methods for mapping resources. Add a pair of bus methods that can be used to "map" resources for direct CPU access using bus_space(9). bus_map_resource() creates a mapping and bus_unmap_resource() releases a previously created mapping. Mappings are described by 'struct resource_map' object. Pointers to these objects can be passed as the first argument to the bus_space wrapper API used for bus resources. Drivers that wish to map all of a resource using default settings (for example, using uncacheable memory attributes) do not need to change. However, drivers that wish to use non-default settings can now do so without jumping through hoops. First, an RF_UNMAPPED flag is added to request that a resource is not implicitly mapped with the default settings when it is activated. This permits other activation steps (such as enabling I/O or memory decoding in a device's PCI command register) to be taken without creating a mapping. Right now the AGP drivers don't set RF_ACTIVE to avoid using up a large amount of KVA to map the AGP aperture on 32-bit platforms. Once RF_UNMAPPED is supported on all platforms that support AGP this can be changed to using RF_UNMAPPED with RF_ACTIVE instead. Second, bus_map_resource accepts an optional structure that defines additional settings for a given mapping. For example, a driver can now request to map only a subset of a resource instead of the entire range. The AGP driver could also use this to only map the first page of the aperture (IIRC, it calls pmap_mapdev() directly to map the first page currently). I will also eventually change the PCI-PCI bridge driver to request mappings of the subset of the I/O window resource on its parent side to create mappings for child devices rather than passing child resources directly up to nexus to be mapped. This also permits bridges that do address translation to request suitable mappings from a resource on the "upper" side of the bus when mapping resources on the "lower" side of the bus. Another attribute that can be specified is an alternate memory attribute for memory-mapped resources. This can be used to request a Write-Combining mapping of a PCI BAR in an MI fashion. (Currently the drivers that do this call pmap_change_attr() directly for x86 only.) Note that this commit only adds the MI framework. Each platform needs to add support for handling RF_UNMAPPED and thew new bus_map/unmap_resource methods. Generally speaking, any drivers that are calling rman_set_bustag() and rman_set_bushandle() need to be updated. Discussed on: arch Reviewed by: cem Differential Revision: https://reviews.freebsd.org/D5237
2016-05-20 17:57:47 +00:00
rman.9 rman_set_mapping.9 \
rman.9 rman_set_rid.9 \
rman.9 rman_set_virtual.9
MLINKS+=rmlock.9 rm_assert.9 \
rmlock.9 rm_destroy.9 \
rmlock.9 rm_init.9 \
rmlock.9 rm_init_flags.9 \
rmlock.9 rm_rlock.9 \
rmlock.9 rm_runlock.9 \
rmlock.9 rm_sleep.9 \
rmlock.9 RM_SYSINIT.9 \
rmlock.9 RM_SYSINIT_FLAGS.9 \
rmlock.9 rm_try_rlock.9 \
rmlock.9 rm_wlock.9 \
rmlock.9 rm_wowned.9 \
rmlock.9 rm_wunlock.9
2007-11-13 20:26:27 +00:00
MLINKS+=rtalloc.9 rtalloc1.9 \
rtalloc.9 rtalloc_ign.9 \
rtalloc.9 RT_ADDREF.9 \
rtalloc.9 RT_LOCK.9 \
rtalloc.9 RT_REMREF.9 \
rtalloc.9 RT_RTFREE.9 \
rtalloc.9 RT_UNLOCK.9 \
2011-12-14 14:55:19 +00:00
rtalloc.9 RTFREE_LOCKED.9 \
2007-11-13 20:26:27 +00:00
rtalloc.9 RTFREE.9 \
2011-12-14 14:55:19 +00:00
rtalloc.9 rtfree.9 \
rtalloc.9 rtalloc1_fib.9 \
rtalloc.9 rtalloc_ign_fib.9 \
rtalloc.9 rtalloc_fib.9
MLINKS+=runqueue.9 choosethread.9 \
2007-11-13 20:26:27 +00:00
runqueue.9 procrunnable.9 \
runqueue.9 remrunqueue.9 \
runqueue.9 setrunqueue.9
2006-04-19 21:09:39 +00:00
MLINKS+=rwlock.9 rw_assert.9 \
rwlock.9 rw_destroy.9 \
rwlock.9 rw_downgrade.9 \
rwlock.9 rw_init.9 \
rwlock.9 rw_init_flags.9 \
rwlock.9 rw_initialized.9 \
2006-04-19 21:09:39 +00:00
rwlock.9 rw_rlock.9 \
rwlock.9 rw_runlock.9 \
rwlock.9 rw_unlock.9 \
rwlock.9 rw_sleep.9 \
2006-04-19 21:09:39 +00:00
rwlock.9 RW_SYSINIT.9 \
rwlock.9 RW_SYSINIT_FLAGS.9 \
rwlock.9 rw_try_rlock.9 \
2006-04-19 21:09:39 +00:00
rwlock.9 rw_try_upgrade.9 \
rwlock.9 rw_try_wlock.9 \
2006-04-19 21:09:39 +00:00
rwlock.9 rw_wlock.9 \
2007-02-26 19:09:36 +00:00
rwlock.9 rw_wowned.9 \
2006-04-19 21:09:39 +00:00
rwlock.9 rw_wunlock.9
2005-04-15 10:57:34 +00:00
MLINKS+=sbuf.9 sbuf_bcat.9 \
sbuf.9 sbuf_bcopyin.9 \
sbuf.9 sbuf_bcpy.9 \
sbuf.9 sbuf_cat.9 \
sbuf.9 sbuf_clear.9 \
sbuf.9 sbuf_clear_flags.9 \
2005-04-15 10:57:34 +00:00
sbuf.9 sbuf_copyin.9 \
sbuf.9 sbuf_cpy.9 \
sbuf.9 sbuf_data.9 \
sbuf.9 sbuf_delete.9 \
2005-04-15 10:57:34 +00:00
sbuf.9 sbuf_done.9 \
sbuf.9 sbuf_error.9 \
sbuf.9 sbuf_finish.9 \
sbuf.9 sbuf_get_flags.9 \
sbuf.9 sbuf_hexdump.9 \
sbuf.9 sbuf_len.9 \
sbuf.9 sbuf_new.9 \
sbuf.9 sbuf_new_auto.9 \
sbuf.9 sbuf_new_for_sysctl.9 \
sbuf.9 sbuf_nl_terminate.9 \
sbuf.9 sbuf_printf.9 \
sbuf.9 sbuf_printf_drain.9 \
sbuf.9 sbuf_putbuf.9 \
sbuf.9 sbuf_putc.9 \
sbuf.9 sbuf_set_drain.9 \
sbuf.9 sbuf_set_flags.9 \
sbuf.9 sbuf_setpos.9 \
sbuf.9 sbuf_start_section.9 \
sbuf.9 sbuf_end_section.9 \
sbuf.9 sbuf_trim.9 \
sbuf.9 sbuf_vprintf.9
MLINKS+=scheduler.9 curpriority_cmp.9 \
scheduler.9 maybe_resched.9 \
scheduler.9 propagate_priority.9 \
scheduler.9 resetpriority.9 \
scheduler.9 roundrobin.9 \
scheduler.9 roundrobin_interval.9 \
scheduler.9 schedclock.9 \
scheduler.9 schedcpu.9 \
scheduler.9 sched_setup.9 \
scheduler.9 setrunnable.9 \
scheduler.9 updatepri.9
MLINKS+=SDT.9 SDT_PROVIDER_DECLARE.9 \
SDT.9 SDT_PROVIDER_DEFINE.9 \
SDT.9 SDT_PROBE_DECLARE.9 \
SDT.9 SDT_PROBE_DEFINE.9 \
SDT.9 SDT_PROBE.9
MLINKS+=securelevel_gt.9 securelevel_ge.9
MLINKS+=selrecord.9 seldrain.9 \
selrecord.9 selwakeup.9
MLINKS+=sema.9 sema_destroy.9 \
sema.9 sema_init.9 \
sema.9 sema_post.9 \
sema.9 sema_timedwait.9 \
sema.9 sema_trywait.9 \
sema.9 sema_value.9 \
sema.9 sema_wait.9
MLINKS+=seqc.9 seqc_consistent.9 \
seqc.9 seqc_read.9 \
seqc.9 seqc_write_begin.9 \
seqc.9 seqc_write_end.9
2007-01-29 11:27:44 +00:00
MLINKS+=sf_buf.9 sf_buf_alloc.9 \
sf_buf.9 sf_buf_free.9 \
sf_buf.9 sf_buf_kva.9 \
sf_buf.9 sf_buf_page.9
MLINKS+=sglist.9 sglist_alloc.9 \
sglist.9 sglist_append.9 \
sglist.9 sglist_append_bio.9 \
sglist.9 sglist_append_mbuf.9 \
sglist.9 sglist_append_mbuf_epg.9 \
sglist.9 sglist_append_phys.9 \
sglist.9 sglist_append_sglist.9 \
sglist.9 sglist_append_uio.9 \
sglist.9 sglist_append_user.9 \
sglist.9 sglist_append_vmpages.9 \
sglist.9 sglist_build.9 \
sglist.9 sglist_clone.9 \
sglist.9 sglist_consume_uio.9 \
sglist.9 sglist_count.9 \
sglist.9 sglist_count_mbuf_epg.9 \
sglist.9 sglist_count_vmpages.9 \
sglist.9 sglist_free.9 \
sglist.9 sglist_hold.9 \
sglist.9 sglist_init.9 \
sglist.9 sglist_join.9 \
sglist.9 sglist_length.9 \
sglist.9 sglist_reset.9 \
sglist.9 sglist_slice.9 \
sglist.9 sglist_split.9
MLINKS+=shm_map.9 shm_unmap.9
MLINKS+=signal.9 cursig.9 \
signal.9 execsigs.9 \
signal.9 issignal.9 \
signal.9 killproc.9 \
signal.9 pgsigio.9 \
signal.9 postsig.9 \
signal.9 SETSETNEQ.9 \
signal.9 SETSETOR.9 \
signal.9 SIGADDSET.9 \
signal.9 SIG_CONTSIGMASK.9 \
signal.9 SIGDELSET.9 \
signal.9 SIGEMPTYSET.9 \
signal.9 sigexit.9 \
signal.9 SIGFILLSET.9 \
signal.9 siginit.9 \
signal.9 SIGISEMPTY.9 \
signal.9 SIGISMEMBER.9 \
signal.9 SIGNOTEMPTY.9 \
signal.9 signotify.9 \
signal.9 SIGPENDING.9 \
signal.9 SIGSETAND.9 \
signal.9 SIGSETCANTMASK.9 \
signal.9 SIGSETEQ.9 \
signal.9 SIGSETNAND.9 \
signal.9 SIG_STOPSIGMASK.9 \
signal.9 trapsignal.9
MLINKS+=sleep.9 msleep.9 \
sleep.9 msleep_sbt.9 \
sleep.9 msleep_spin.9 \
sleep.9 msleep_spin_sbt.9 \
sleep.9 pause.9 \
sleep.9 pause_sig.9 \
sleep.9 pause_sbt.9 \
sleep.9 tsleep.9 \
sleep.9 tsleep_sbt.9 \
sleep.9 wakeup.9 \
sleep.9 wakeup_one.9 \
sleep.9 wakeup_any.9
MLINKS+=sleepqueue.9 init_sleepqueues.9 \
sleepqueue.9 sleepq_abort.9 \
sleepqueue.9 sleepq_add.9 \
sleepqueue.9 sleepq_alloc.9 \
sleepqueue.9 sleepq_broadcast.9 \
sleepqueue.9 sleepq_free.9 \
sleepqueue.9 sleepq_lookup.9 \
sleepqueue.9 sleepq_lock.9 \
sleepqueue.9 sleepq_release.9 \
sleepqueue.9 sleepq_remove.9 \
sleepqueue.9 sleepq_set_timeout.9 \
sleepqueue.9 sleepq_set_timeout_sbt.9 \
sleepqueue.9 sleepq_signal.9 \
sleepqueue.9 sleepq_sleepcnt.9 \
sleepqueue.9 sleepq_timedwait.9 \
sleepqueue.9 sleepq_timedwait_sig.9 \
sleepqueue.9 sleepq_type.9 \
sleepqueue.9 sleepq_wait.9 \
sleepqueue.9 sleepq_wait_sig.9
MLINKS+=socket.9 soabort.9 \
socket.9 soaccept.9 \
socket.9 sobind.9 \
socket.9 socheckuid.9 \
socket.9 soclose.9 \
socket.9 soconnect.9 \
socket.9 socreate.9 \
socket.9 sodisconnect.9 \
socket.9 sodtor_set.9 \
socket.9 sodupsockaddr.9 \
socket.9 sofree.9 \
socket.9 sogetopt.9 \
socket.9 sohasoutofband.9 \
socket.9 solisten.9 \
socket.9 solisten_proto.9 \
socket.9 solisten_proto_check.9 \
socket.9 sonewconn.9 \
socket.9 sooptcopyin.9 \
socket.9 sooptcopyout.9 \
socket.9 sopoll.9 \
socket.9 sopoll_generic.9 \
socket.9 soreceive.9 \
socket.9 soreceive_dgram.9 \
socket.9 soreceive_generic.9 \
socket.9 soreceive_stream.9 \
socket.9 soreserve.9 \
socket.9 sorflush.9 \
socket.9 sosend.9 \
socket.9 sosend_dgram.9 \
socket.9 sosend_generic.9 \
2007-10-26 11:01:17 +00:00
socket.9 sosetopt.9 \
socket.9 soshutdown.9 \
socket.9 sotoxsocket.9 \
socket.9 soupcall_clear.9 \
socket.9 soupcall_set.9 \
socket.9 sowakeup.9
MLINKS+=stack.9 stack_copy.9 \
stack.9 stack_create.9 \
stack.9 stack_destroy.9 \
stack.9 stack_print.9 \
stack.9 stack_print_ddb.9 \
stack.9 stack_print_short.9 \
stack.9 stack_print_short_ddb.9 \
stack.9 stack_put.9 \
stack.9 stack_save.9 \
stack.9 stack_sbuf_print.9 \
stack.9 stack_sbuf_print_ddb.9 \
stack.9 stack_zero.9
MLINKS+=store.9 subyte.9 \
store.9 suword.9 \
store.9 suword16.9 \
store.9 suword32.9 \
store.9 suword64.9
MLINKS+=swi.9 swi_add.9 \
swi.9 swi_remove.9 \
swi.9 swi_sched.9
MLINKS+=sx.9 sx_assert.9 \
sx.9 sx_destroy.9 \
sx.9 sx_downgrade.9 \
sx.9 sx_init.9 \
sx.9 sx_init_flags.9 \
2007-10-26 11:01:17 +00:00
sx.9 sx_sleep.9 \
sx.9 sx_slock.9 \
sx.9 sx_slock_sig.9 \
sx.9 sx_sunlock.9 \
sx.9 SX_SYSINIT.9 \
sx.9 SX_SYSINIT_FLAGS.9 \
sx.9 sx_try_slock.9 \
sx.9 sx_try_upgrade.9 \
sx.9 sx_try_xlock.9 \
sx.9 sx_unlock.9 \
2007-05-19 20:24:32 +00:00
sx.9 sx_xholder.9 \
sx.9 sx_xlock.9 \
sx.9 sx_xlock_sig.9 \
2006-07-12 19:12:16 +00:00
sx.9 sx_xlocked.9 \
sx.9 sx_xunlock.9
MLINKS+=syscall_helper_register.9 syscall_helper_unregister.9 \
syscall_helper_register.9 SYSCALL_INIT_HELPER.9 \
syscall_helper_register.9 SYSCALL_INIT_HELPER_COMPAT.9 \
syscall_helper_register.9 SYSCALL_INIT_HELPER_COMPAT_F.9 \
syscall_helper_register.9 SYSCALL_INIT_HELPER_F.9
MLINKS+=sysctl.9 SYSCTL_DECL.9 \
sysctl.9 SYSCTL_ADD_INT.9 \
sysctl.9 SYSCTL_ADD_LONG.9 \
sysctl.9 SYSCTL_ADD_NODE.9 \
sysctl.9 SYSCTL_ADD_NODE_WITH_LABEL.9 \
sysctl.9 SYSCTL_ADD_OPAQUE.9 \
sysctl.9 SYSCTL_ADD_PROC.9 \
sysctl.9 SYSCTL_ADD_QUAD.9 \
sysctl.9 SYSCTL_ADD_ROOT_NODE.9 \
sysctl.9 SYSCTL_ADD_S8.9 \
sysctl.9 SYSCTL_ADD_S16.9 \
sysctl.9 SYSCTL_ADD_S32.9 \
sysctl.9 SYSCTL_ADD_S64.9 \
sysctl.9 SYSCTL_ADD_STRING.9 \
sysctl.9 SYSCTL_ADD_STRUCT.9 \
sysctl.9 SYSCTL_ADD_TIMEVAL_SEC.9 \
sysctl.9 SYSCTL_ADD_U8.9 \
sysctl.9 SYSCTL_ADD_U16.9 \
sysctl.9 SYSCTL_ADD_U32.9 \
sysctl.9 SYSCTL_ADD_U64.9 \
sysctl.9 SYSCTL_ADD_UAUTO.9 \
sysctl.9 SYSCTL_ADD_UINT.9 \
sysctl.9 SYSCTL_ADD_ULONG.9 \
sysctl.9 SYSCTL_ADD_UMA_CUR.9 \
sysctl.9 SYSCTL_ADD_UMA_MAX.9 \
sysctl.9 SYSCTL_ADD_UQUAD.9 \
sysctl.9 SYSCTL_CHILDREN.9 \
sysctl.9 SYSCTL_STATIC_CHILDREN.9 \
sysctl.9 SYSCTL_NODE_CHILDREN.9 \
sysctl.9 SYSCTL_PARENT.9 \
sysctl.9 SYSCTL_INT.9 \
sysctl.9 SYSCTL_INT_WITH_LABEL.9 \
sysctl.9 SYSCTL_LONG.9 \
sysctl.9 sysctl_msec_to_ticks.9 \
sysctl.9 SYSCTL_NODE.9 \
sysctl.9 SYSCTL_NODE_WITH_LABEL.9 \
sysctl.9 SYSCTL_OPAQUE.9 \
sysctl.9 SYSCTL_PROC.9 \
sysctl.9 SYSCTL_QUAD.9 \
sysctl.9 SYSCTL_ROOT_NODE.9 \
sysctl.9 SYSCTL_S8.9 \
sysctl.9 SYSCTL_S16.9 \
sysctl.9 SYSCTL_S32.9 \
sysctl.9 SYSCTL_S64.9 \
sysctl.9 SYSCTL_STRING.9 \
sysctl.9 SYSCTL_STRUCT.9 \
sysctl.9 SYSCTL_TIMEVAL_SEC.9 \
sysctl.9 SYSCTL_U8.9 \
sysctl.9 SYSCTL_U16.9 \
sysctl.9 SYSCTL_U32.9 \
sysctl.9 SYSCTL_U64.9 \
sysctl.9 SYSCTL_UINT.9 \
sysctl.9 SYSCTL_ULONG.9 \
sysctl.9 SYSCTL_UMA_CUR.9 \
sysctl.9 SYSCTL_UMA_MAX.9 \
sysctl.9 SYSCTL_UQUAD.9
MLINKS+=sysctl_add_oid.9 sysctl_move_oid.9 \
sysctl_add_oid.9 sysctl_remove_oid.9 \
sysctl_add_oid.9 sysctl_remove_name.9
MLINKS+=sysctl_ctx_init.9 sysctl_ctx_entry_add.9 \
sysctl_ctx_init.9 sysctl_ctx_entry_del.9 \
sysctl_ctx_init.9 sysctl_ctx_entry_find.9 \
sysctl_ctx_init.9 sysctl_ctx_free.9
MLINKS+=SYSINIT.9 SYSUNINIT.9
MLINKS+=taskqueue.9 TASK_INIT.9 \
taskqueue.9 TASK_INITIALIZER.9 \
taskqueue.9 taskqueue_block.9 \
taskqueue.9 taskqueue_cancel.9 \
taskqueue.9 taskqueue_cancel_timeout.9 \
taskqueue.9 taskqueue_create.9 \
taskqueue.9 taskqueue_create_fast.9 \
taskqueue.9 TASKQUEUE_DECLARE.9 \
taskqueue.9 TASKQUEUE_DEFINE.9 \
taskqueue.9 TASKQUEUE_DEFINE_THREAD.9 \
taskqueue.9 taskqueue_drain.9 \
taskqueue.9 taskqueue_drain_all.9 \
taskqueue.9 taskqueue_drain_timeout.9 \
taskqueue.9 taskqueue_enqueue.9 \
taskqueue.9 taskqueue_enqueue_timeout.9 \
taskqueue.9 TASKQUEUE_FAST_DEFINE.9 \
taskqueue.9 TASKQUEUE_FAST_DEFINE_THREAD.9 \
taskqueue.9 taskqueue_free.9 \
taskqueue.9 taskqueue_member.9 \
taskqueue.9 taskqueue_quiesce.9 \
taskqueue.9 taskqueue_run.9 \
taskqueue.9 taskqueue_set_callback.9 \
taskqueue.9 taskqueue_start_threads.9 \
taskqueue.9 taskqueue_start_threads_cpuset.9 \
taskqueue.9 taskqueue_start_threads_in_proc.9 \
taskqueue.9 taskqueue_unblock.9 \
taskqueue.9 TIMEOUT_TASK_INIT.9
MLINKS+=tcp_functions.9 register_tcp_functions.9 \
tcp_functions.9 register_tcp_functions_as_name.9 \
tcp_functions.9 register_tcp_functions_as_names.9 \
tcp_functions.9 deregister_tcp_functions.9
MLINKS+=time.9 boottime.9 \
time.9 time_second.9 \
time.9 time_uptime.9
MLINKS+=ucred.9 crcopy.9 \
ucred.9 crcopysafe.9 \
ucred.9 crdup.9 \
ucred.9 crfree.9 \
ucred.9 crget.9 \
ucred.9 crhold.9 \
ucred.9 crsetgroups.9 \
ucred.9 cru2x.9
MLINKS+=uidinfo.9 uifind.9 \
uidinfo.9 uifree.9 \
uidinfo.9 uihashinit.9 \
uidinfo.9 uihold.9
MLINKS+=uio.9 uiomove.9 \
2017-03-11 22:22:51 +00:00
uio.9 uiomove_frombuf.9 \
uio.9 uiomove_nofault.9
.if ${MK_USB} != "no"
MAN+= usbdi.9
2009-12-22 16:02:08 +00:00
MLINKS+=usbdi.9 usbd_do_request.9 \
usbdi.9 usbd_do_request_flags.9 \
usbdi.9 usbd_errstr.9 \
usbdi.9 usbd_lookup_id_by_info.9 \
usbdi.9 usbd_lookup_id_by_uaa.9 \
usbdi.9 usbd_transfer_clear_stall.9 \
usbdi.9 usbd_transfer_drain.9 \
usbdi.9 usbd_transfer_pending.9 \
usbdi.9 usbd_transfer_poll.9 \
usbdi.9 usbd_transfer_setup.9 \
usbdi.9 usbd_transfer_start.9 \
usbdi.9 usbd_transfer_stop.9 \
usbdi.9 usbd_transfer_submit.9 \
usbdi.9 usbd_transfer_unsetup.9 \
usbdi.9 usbd_xfer_clr_flag.9 \
usbdi.9 usbd_xfer_frame_data.9 \
usbdi.9 usbd_xfer_frame_len.9 \
usbdi.9 usbd_xfer_get_frame.9 \
usbdi.9 usbd_xfer_get_priv.9 \
usbdi.9 usbd_xfer_is_stalled.9 \
usbdi.9 usbd_xfer_max_framelen.9 \
usbdi.9 usbd_xfer_max_frames.9 \
usbdi.9 usbd_xfer_max_len.9 \
usbdi.9 usbd_xfer_set_flag.9 \
usbdi.9 usbd_xfer_set_frame_data.9 \
usbdi.9 usbd_xfer_set_frame_len.9 \
usbdi.9 usbd_xfer_set_frame_offset.9 \
usbdi.9 usbd_xfer_set_frames.9 \
usbdi.9 usbd_xfer_set_interval.9 \
usbdi.9 usbd_xfer_set_priv.9 \
usbdi.9 usbd_xfer_set_stall.9 \
usbdi.9 usbd_xfer_set_timeout.9 \
usbdi.9 usbd_xfer_softc.9 \
usbdi.9 usbd_xfer_state.9 \
2009-12-22 16:02:08 +00:00
usbdi.9 usbd_xfer_status.9 \
usbdi.9 usb_fifo_alloc_buffer.9 \
usbdi.9 usb_fifo_attach.9 \
usbdi.9 usb_fifo_detach.9 \
usbdi.9 usb_fifo_free_buffer.9 \
usbdi.9 usb_fifo_get_data.9 \
usbdi.9 usb_fifo_get_data_buffer.9 \
usbdi.9 usb_fifo_get_data_error.9 \
usbdi.9 usb_fifo_get_data_linear.9 \
usbdi.9 usb_fifo_put_bytes_max.9 \
usbdi.9 usb_fifo_put_data.9 \
usbdi.9 usb_fifo_put_data_buffer.9 \
usbdi.9 usb_fifo_put_data_error.9 \
usbdi.9 usb_fifo_put_data_linear.9 \
usbdi.9 usb_fifo_reset.9 \
usbdi.9 usb_fifo_softc.9 \
usbdi.9 usb_fifo_wakeup.9
.endif
MLINKS+=vcount.9 count_dev.9
MLINKS+=vfsconf.9 vfs_modevent.9 \
vfsconf.9 vfs_register.9 \
vfsconf.9 vfs_unregister.9
2007-10-26 11:01:17 +00:00
MLINKS+=vfs_getopt.9 vfs_copyopt.9 \
vfs_getopt.9 vfs_filteropt.9 \
vfs_getopt.9 vfs_flagopt.9 \
2007-10-26 11:01:17 +00:00
vfs_getopt.9 vfs_getopts.9 \
vfs_getopt.9 vfs_scanopt.9 \
vfs_getopt.9 vfs_setopt.9 \
vfs_getopt.9 vfs_setopt_part.9 \
vfs_getopt.9 vfs_setopts.9
MLINKS+=vhold.9 vdrop.9 \
2009-12-22 16:02:08 +00:00
vhold.9 vdropl.9 \
vhold.9 vholdl.9
MLINKS+=vmem.9 vmem_add.9 \
vmem.9 vmem_alloc.9 \
vmem.9 vmem_create.9 \
vmem.9 vmem_destroy.9 \
vmem.9 vmem_free.9 \
vmem.9 vmem_xalloc.9 \
vmem.9 vmem_xfree.9
MLINKS+=vm_map_lock.9 vm_map_lock_downgrade.9 \
vm_map_lock.9 vm_map_lock_read.9 \
vm_map_lock.9 vm_map_lock_upgrade.9 \
vm_map_lock.9 vm_map_trylock.9 \
vm_map_lock.9 vm_map_trylock_read.9 \
vm_map_lock.9 vm_map_unlock.9 \
vm_map_lock.9 vm_map_unlock_read.9
MLINKS+=vm_map_lookup.9 vm_map_lookup_done.9
MLINKS+=vm_map_max.9 vm_map_min.9 \
vm_map_max.9 vm_map_pmap.9
MLINKS+=vm_map_stack.9 vm_map_growstack.9
Change synchonization rules for vm_page reference counting. There are several mechanisms by which a vm_page reference is held, preventing the page from being freed back to the page allocator. In particular, holding the page's object lock is sufficient to prevent the page from being freed; holding the busy lock or a wiring is sufficent as well. These references are protected by the page lock, which must therefore be acquired for many per-page operations. This results in false sharing since the page locks are external to the vm_page structures themselves and each lock protects multiple structures. Transition to using an atomically updated per-page reference counter. The object's reference is counted using a flag bit in the counter. A second flag bit is used to atomically block new references via pmap_extract_and_hold() while removing managed mappings of a page. Thus, the reference count of a page is guaranteed not to increase if the page is unbusied, unmapped, and the object's write lock is held. As a consequence of this, the page lock no longer protects a page's identity; operations which move pages between objects are now synchronized solely by the objects' locks. The vm_page_wire() and vm_page_unwire() KPIs are changed. The former requires that either the object lock or the busy lock is held. The latter no longer has a return value and may free the page if it releases the last reference to that page. vm_page_unwire_noq() behaves the same as before; the caller is responsible for checking its return value and freeing or enqueuing the page as appropriate. vm_page_wire_mapped() is introduced for use in pmap_extract_and_hold(). It fails if the page is concurrently being unmapped, typically triggering a fallback to the fault handler. vm_page_wire() no longer requires the page lock and vm_page_unwire() now internally acquires the page lock when releasing the last wiring of a page (since the page lock still protects a page's queue state). In particular, synchronization details are no longer leaked into the caller. The change excises the page lock from several frequently executed code paths. In particular, vm_object_terminate() no longer bounces between page locks as it releases an object's pages, and direct I/O and sendfile(SF_NOCACHE) completions no longer require the page lock. In these latter cases we now get linear scalability in the common scenario where different threads are operating on different files. __FreeBSD_version is bumped. The DRM ports have been updated to accomodate the KPI changes. Reviewed by: jeff (earlier version) Tested by: gallatin (earlier version), pho Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D20486
2019-09-09 21:32:42 +00:00
MLINKS+=vm_map_wire.9 vm_map_wire_mapped.9 \
vm_page_wire.9 vm_page_unwire.9 \
vm_page_wire.9 vm_page_unwire_noq.9
MLINKS+=vm_page_bits.9 vm_page_clear_dirty.9 \
vm_page_bits.9 vm_page_dirty.9 \
vm_page_bits.9 vm_page_is_valid.9 \
vm_page_bits.9 vm_page_set_invalid.9 \
vm_page_bits.9 vm_page_set_validclean.9 \
vm_page_bits.9 vm_page_test_dirty.9 \
vm_page_bits.9 vm_page_undirty.9 \
vm_page_bits.9 vm_page_zero_invalid.9
MLINKS+=vm_page_busy.9 vm_page_busied.9 \
vm_page_busy.9 vm_page_busy_downgrade.9 \
vm_page_busy.9 vm_page_busy_sleep.9 \
vm_page_busy.9 vm_page_sbusied.9 \
vm_page_busy.9 vm_page_sbusy.9 \
vm_page_busy.9 vm_page_sleep_if_busy.9 \
vm_page_busy.9 vm_page_sunbusy.9 \
vm_page_busy.9 vm_page_trysbusy.9 \
vm_page_busy.9 vm_page_tryxbusy.9 \
vm_page_busy.9 vm_page_xbusied.9 \
vm_page_busy.9 vm_page_xbusy.9 \
vm_page_busy.9 vm_page_xunbusy.9 \
vm_page_busy.9 vm_page_assert_sbusied.9 \
vm_page_busy.9 vm_page_assert_unbusied.9 \
vm_page_busy.9 vm_page_assert_xbusied.9
MLINKS+=vm_page_aflag.9 vm_page_aflag_clear.9 \
vm_page_aflag.9 vm_page_aflag_set.9 \
vm_page_aflag.9 vm_page_reference.9
MLINKS+=vm_page_free.9 vm_page_free_toq.9 \
vm_page_free.9 vm_page_free_zero.9 \
vm_page_free.9 vm_page_try_to_free.9
MLINKS+=vm_page_insert.9 vm_page_remove.9
MLINKS+=vm_page_wire.9 vm_page_unwire.9
MLINKS+=VOP_ACCESS.9 VOP_ACCESSX.9
MLINKS+=VOP_ATTRIB.9 VOP_GETATTR.9 \
VOP_ATTRIB.9 VOP_SETATTR.9 \
VOP_ATTRIB.9 VOP_STAT.9
MLINKS+=VOP_CREATE.9 VOP_MKDIR.9 \
VOP_CREATE.9 VOP_MKNOD.9 \
VOP_CREATE.9 VOP_SYMLINK.9
MLINKS+=VOP_FSYNC.9 VOP_FDATASYNC.9
MLINKS+=VOP_GETPAGES.9 VOP_PUTPAGES.9
MLINKS+=VOP_INACTIVE.9 VOP_RECLAIM.9
MLINKS+=VOP_LOCK.9 vn_lock.9 \
VOP_LOCK.9 VOP_ISLOCKED.9 \
VOP_LOCK.9 VOP_UNLOCK.9
MLINKS+=VOP_OPENCLOSE.9 VOP_CLOSE.9 \
VOP_OPENCLOSE.9 VOP_OPEN.9
MLINKS+=VOP_RDWR.9 VOP_READ.9 \
VOP_RDWR.9 VOP_WRITE.9
MLINKS+=VOP_REMOVE.9 VOP_RMDIR.9
MLINKS+=vnet.9 vimage.9
MLINKS+=vref.9 VREF.9 \
vref.9 vrefl.9
MLINKS+=vrele.9 vput.9 \
vrele.9 vunref.9
MLINKS+=vslock.9 vsunlock.9
MLINKS+=zone.9 uma.9 \
zone.9 uma_prealloc.9 \
zone.9 uma_reclaim.9 \
zone.9 uma_zalloc.9 \
zone.9 uma_zalloc_arg.9 \
zone.9 uma_zalloc_domain.9 \
zone.9 uma_zalloc_pcpu.9 \
zone.9 uma_zalloc_pcpu_arg.9 \
zone.9 uma_zcache_create.9 \
zone.9 uma_zcreate.9 \
zone.9 uma_zdestroy.9 \
zone.9 uma_zfree.9 \
zone.9 uma_zfree_arg.9 \
zone.9 uma_zfree_pcpu.9 \
zone.9 uma_zfree_pcpu_arg.9 \
zone.9 uma_zone_get_cur.9 \
zone.9 uma_zone_get_max.9 \
zone.9 uma_zone_reclaim.9 \
zone.9 uma_zone_reserve.9 \
zone.9 uma_zone_reserve_kva.9 \
zone.9 uma_zone_set_allocf.9 \
zone.9 uma_zone_set_freef.9 \
zone.9 uma_zone_set_max.9 \
zone.9 uma_zone_set_maxaction.9 \
zone.9 uma_zone_set_maxcache.9 \
zone.9 uma_zone_set_warning.9 \
zone.9 uma_zsecond_create.9
2001-01-27 19:13:08 +00:00
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
_superio.9= superio.9
MLINKS+=superio.9 superio_devid.9 \
superio.9 superio_dev_disable.9 \
superio.9 superio_dev_enable.9 \
superio.9 superio_dev_enabled.9 \
superio.9 superio_find_dev.9 \
superio.9 superio_find_dev.9 \
superio.9 superio_get_dma.9 \
superio.9 superio_get_iobase.9 \
superio.9 superio_get_irq.9 \
superio.9 superio_get_ldn.9 \
superio.9 superio_get_type.9 \
superio.9 superio_read.9 \
superio.9 superio_revid.9 \
superio.9 superio_vendor.9 \
superio.9 superio_write.9
.endif
.include <bsd.prog.mk>