diff options
| author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-21 05:33:03 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-21 08:44:55 -0400 |
| commit | 64131a87f2aae2ed9e05d8227c5b009ca6c50d98 (patch) | |
| tree | fdea23fd59216120bf54a48c60ca24489a733f14 /Documentation/DocBook | |
| parent | 676ee36be04985062522804c2de04f0764212be6 (diff) | |
| parent | 2c33ce009ca2389dbf0535d0672214d09738e35e (diff) | |
Merge branch 'drm-next-merged' of git://people.freedesktop.org/~airlied/linux into v4l_for_linus
* 'drm-next-merged' of git://people.freedesktop.org/~airlied/linux: (9717 commits)
media-bus: Fixup RGB444_1X12, RGB565_1X16, and YUV8_1X24 media bus format
hexdump: avoid warning in test function
fs: take i_mutex during prepare_binprm for set[ug]id executables
smp: Fix error case handling in smp_call_function_*()
iommu-common: Fix PARISC compile-time warnings
sparc: Make LDC use common iommu poll management functions
sparc: Make sparc64 use scalable lib/iommu-common.c functions
Break up monolithic iommu table/lock into finer graularity pools and lock
sparc: Revert generic IOMMU allocator.
tools/power turbostat: correct dumped pkg-cstate-limit value
tools/power turbostat: calculate TSC frequency from CPUID(0x15) on SKL
tools/power turbostat: correct DRAM RAPL units on recent Xeon processors
tools/power turbostat: Initial Skylake support
tools/power turbostat: Use $(CURDIR) instead of $(PWD) and add support for O= option in Makefile
tools/power turbostat: modprobe msr, if needed
tools/power turbostat: dump MSR_TURBO_RATIO_LIMIT2
tools/power turbostat: use new MSR_TURBO_RATIO_LIMIT names
Bluetooth: hidp: Fix regression with older userspace and flags validation
config: Enable NEED_DMA_MAP_STATE by default when SWIOTLB is selected
perf/x86/intel/pt: Fix and clean up error handling in pt_event_add()
...
That solves several merge conflicts:
Documentation/DocBook/media/v4l/subdev-formats.xml
Documentation/devicetree/bindings/vendor-prefixes.txt
drivers/staging/media/mn88473/mn88473.c
include/linux/kconfig.h
include/uapi/linux/media-bus-format.h
The ones at subdev-formats.xml and media-bus-format.h are not trivial.
That's why we opted to merge from DRM.
Diffstat (limited to 'Documentation/DocBook')
| -rw-r--r-- | Documentation/DocBook/crypto-API.tmpl | 860 | ||||
| -rw-r--r-- | Documentation/DocBook/drm.tmpl | 31 | ||||
| -rw-r--r-- | Documentation/DocBook/media/v4l/subdev-formats.xml | 426 |
3 files changed, 1314 insertions, 3 deletions
diff --git a/Documentation/DocBook/crypto-API.tmpl b/Documentation/DocBook/crypto-API.tmpl index 04a8c24ead47..efc8d90a9a3f 100644 --- a/Documentation/DocBook/crypto-API.tmpl +++ b/Documentation/DocBook/crypto-API.tmpl | |||
| @@ -509,6 +509,270 @@ | |||
| 509 | select it due to the used type and mask field. | 509 | select it due to the used type and mask field. |
| 510 | </para> | 510 | </para> |
| 511 | </sect1> | 511 | </sect1> |
| 512 | |||
| 513 | <sect1><title>Internal Structure of Kernel Crypto API</title> | ||
| 514 | |||
| 515 | <para> | ||
| 516 | The kernel crypto API has an internal structure where a cipher | ||
| 517 | implementation may use many layers and indirections. This section | ||
| 518 | shall help to clarify how the kernel crypto API uses | ||
| 519 | various components to implement the complete cipher. | ||
| 520 | </para> | ||
| 521 | |||
| 522 | <para> | ||
| 523 | The following subsections explain the internal structure based | ||
| 524 | on existing cipher implementations. The first section addresses | ||
| 525 | the most complex scenario where all other scenarios form a logical | ||
| 526 | subset. | ||
| 527 | </para> | ||
| 528 | |||
| 529 | <sect2><title>Generic AEAD Cipher Structure</title> | ||
| 530 | |||
| 531 | <para> | ||
| 532 | The following ASCII art decomposes the kernel crypto API layers | ||
| 533 | when using the AEAD cipher with the automated IV generation. The | ||
| 534 | shown example is used by the IPSEC layer. | ||
| 535 | </para> | ||
| 536 | |||
| 537 | <para> | ||
| 538 | For other use cases of AEAD ciphers, the ASCII art applies as | ||
| 539 | well, but the caller may not use the GIVCIPHER interface. In | ||
| 540 | this case, the caller must generate the IV. | ||
| 541 | </para> | ||
| 542 | |||
| 543 | <para> | ||
| 544 | The depicted example decomposes the AEAD cipher of GCM(AES) based | ||
| 545 | on the generic C implementations (gcm.c, aes-generic.c, ctr.c, | ||
| 546 | ghash-generic.c, seqiv.c). The generic implementation serves as an | ||
| 547 | example showing the complete logic of the kernel crypto API. | ||
| 548 | </para> | ||
| 549 | |||
| 550 | <para> | ||
| 551 | It is possible that some streamlined cipher implementations (like | ||
| 552 | AES-NI) provide implementations merging aspects which in the view | ||
| 553 | of the kernel crypto API cannot be decomposed into layers any more. | ||
| 554 | In case of the AES-NI implementation, the CTR mode, the GHASH | ||
| 555 | implementation and the AES cipher are all merged into one cipher | ||
| 556 | implementation registered with the kernel crypto API. In this case, | ||
| 557 | the concept described by the following ASCII art applies too. However, | ||
| 558 | the decomposition of GCM into the individual sub-components | ||
| 559 | by the kernel crypto API is not done any more. | ||
| 560 | </para> | ||
| 561 | |||
| 562 | <para> | ||
| 563 | Each block in the following ASCII art is an independent cipher | ||
| 564 | instance obtained from the kernel crypto API. Each block | ||
| 565 | is accessed by the caller or by other blocks using the API functions | ||
| 566 | defined by the kernel crypto API for the cipher implementation type. | ||
| 567 | </para> | ||
| 568 | |||
| 569 | <para> | ||
| 570 | The blocks below indicate the cipher type as well as the specific | ||
| 571 | logic implemented in the cipher. | ||
| 572 | </para> | ||
| 573 | |||
| 574 | <para> | ||
| 575 | The ASCII art picture also indicates the call structure, i.e. who | ||
| 576 | calls which component. The arrows point to the invoked block | ||
| 577 | where the caller uses the API applicable to the cipher type | ||
| 578 | specified for the block. | ||
| 579 | </para> | ||
| 580 | |||
| 581 | <programlisting> | ||
| 582 | <![CDATA[ | ||
| 583 | kernel crypto API | IPSEC Layer | ||
| 584 | | | ||
| 585 | +-----------+ | | ||
| 586 | | | (1) | ||
| 587 | | givcipher | <----------------------------------- esp_output | ||
| 588 | | (seqiv) | ---+ | ||
| 589 | +-----------+ | | ||
| 590 | | (2) | ||
| 591 | +-----------+ | | ||
| 592 | | | <--+ (2) | ||
| 593 | | aead | <----------------------------------- esp_input | ||
| 594 | | (gcm) | ------------+ | ||
| 595 | +-----------+ | | ||
| 596 | | (3) | (5) | ||
| 597 | v v | ||
| 598 | +-----------+ +-----------+ | ||
| 599 | | | | | | ||
| 600 | | ablkcipher| | ahash | | ||
| 601 | | (ctr) | ---+ | (ghash) | | ||
| 602 | +-----------+ | +-----------+ | ||
| 603 | | | ||
| 604 | +-----------+ | (4) | ||
| 605 | | | <--+ | ||
| 606 | | cipher | | ||
| 607 | | (aes) | | ||
| 608 | +-----------+ | ||
| 609 | ]]> | ||
| 610 | </programlisting> | ||
| 611 | |||
| 612 | <para> | ||
| 613 | The following call sequence is applicable when the IPSEC layer | ||
| 614 | triggers an encryption operation with the esp_output function. During | ||
| 615 | configuration, the administrator set up the use of rfc4106(gcm(aes)) as | ||
| 616 | the cipher for ESP. The following call sequence is now depicted in the | ||
| 617 | ASCII art above: | ||
| 618 | </para> | ||
| 619 | |||
| 620 | <orderedlist> | ||
| 621 | <listitem> | ||
| 622 | <para> | ||
| 623 | esp_output() invokes crypto_aead_givencrypt() to trigger an encryption | ||
| 624 | operation of the GIVCIPHER implementation. | ||
| 625 | </para> | ||
| 626 | |||
| 627 | <para> | ||
| 628 | In case of GCM, the SEQIV implementation is registered as GIVCIPHER | ||
| 629 | in crypto_rfc4106_alloc(). | ||
| 630 | </para> | ||
| 631 | |||
| 632 | <para> | ||
| 633 | The SEQIV performs its operation to generate an IV where the core | ||
| 634 | function is seqiv_geniv(). | ||
| 635 | </para> | ||
| 636 | </listitem> | ||
| 637 | |||
| 638 | <listitem> | ||
| 639 | <para> | ||
| 640 | Now, SEQIV uses the AEAD API function calls to invoke the associated | ||
| 641 | AEAD cipher. In our case, during the instantiation of SEQIV, the | ||
| 642 | cipher handle for GCM is provided to SEQIV. This means that SEQIV | ||
| 643 | invokes AEAD cipher operations with the GCM cipher handle. | ||
| 644 | </para> | ||
| 645 | |||
| 646 | <para> | ||
| 647 | During instantiation of the GCM handle, the CTR(AES) and GHASH | ||
| 648 | ciphers are instantiated. The cipher handles for CTR(AES) and GHASH | ||
| 649 | are retained for later use. | ||
| 650 | </para> | ||
| 651 | |||
| 652 | <para> | ||
| 653 | The GCM implementation is responsible to invoke the CTR mode AES and | ||
| 654 | the GHASH cipher in the right manner to implement the GCM | ||
| 655 | specification. | ||
| 656 | </para> | ||
| 657 | </listitem> | ||
| 658 | |||
| 659 | <listitem> | ||
| 660 | <para> | ||
| 661 | The GCM AEAD cipher type implementation now invokes the ABLKCIPHER API | ||
| 662 | with the instantiated CTR(AES) cipher handle. | ||
| 663 | </para> | ||
| 664 | |||
| 665 | <para> | ||
| 666 | During instantiation of the CTR(AES) cipher, the CIPHER type | ||
| 667 | implementation of AES is instantiated. The cipher handle for AES is | ||
| 668 | retained. | ||
| 669 | </para> | ||
| 670 | |||
| 671 | <para> | ||
| 672 | That means that the ABLKCIPHER implementation of CTR(AES) only | ||
| 673 | implements the CTR block chaining mode. After performing the block | ||
| 674 | chaining operation, the CIPHER implementation of AES is invoked. | ||
| 675 | </para> | ||
| 676 | </listitem> | ||
| 677 | |||
| 678 | <listitem> | ||
| 679 | <para> | ||
| 680 | The ABLKCIPHER of CTR(AES) now invokes the CIPHER API with the AES | ||
| 681 | cipher handle to encrypt one block. | ||
| 682 | </para> | ||
| 683 | </listitem> | ||
| 684 | |||
| 685 | <listitem> | ||
| 686 | <para> | ||
| 687 | The GCM AEAD implementation also invokes the GHASH cipher | ||
| 688 | implementation via the AHASH API. | ||
| 689 | </para> | ||
| 690 | </listitem> | ||
| 691 | </orderedlist> | ||
| 692 | |||
| 693 | <para> | ||
| 694 | When the IPSEC layer triggers the esp_input() function, the same call | ||
| 695 | sequence is followed with the only difference that the operation starts | ||
| 696 | with step (2). | ||
| 697 | </para> | ||
| 698 | </sect2> | ||
| 699 | |||
| 700 | <sect2><title>Generic Block Cipher Structure</title> | ||
| 701 | <para> | ||
| 702 | Generic block ciphers follow the same concept as depicted with the ASCII | ||
| 703 | art picture above. | ||
| 704 | </para> | ||
| 705 | |||
| 706 | <para> | ||
| 707 | For example, CBC(AES) is implemented with cbc.c, and aes-generic.c. The | ||
| 708 | ASCII art picture above applies as well with the difference that only | ||
| 709 | step (4) is used and the ABLKCIPHER block chaining mode is CBC. | ||
| 710 | </para> | ||
| 711 | </sect2> | ||
| 712 | |||
| 713 | <sect2><title>Generic Keyed Message Digest Structure</title> | ||
| 714 | <para> | ||
| 715 | Keyed message digest implementations again follow the same concept as | ||
| 716 | depicted in the ASCII art picture above. | ||
| 717 | </para> | ||
| 718 | |||
| 719 | <para> | ||
| 720 | For example, HMAC(SHA256) is implemented with hmac.c and | ||
| 721 | sha256_generic.c. The following ASCII art illustrates the | ||
| 722 | implementation: | ||
| 723 | </para> | ||
| 724 | |||
| 725 | <programlisting> | ||
| 726 | <![CDATA[ | ||
| 727 | kernel crypto API | Caller | ||
| 728 | | | ||
| 729 | +-----------+ (1) | | ||
| 730 | | | <------------------ some_function | ||
| 731 | | ahash | | ||
| 732 | | (hmac) | ---+ | ||
| 733 | +-----------+ | | ||
| 734 | | (2) | ||
| 735 | +-----------+ | | ||
| 736 | | | <--+ | ||
| 737 | | shash | | ||
| 738 | | (sha256) | | ||
| 739 | +-----------+ | ||
| 740 | ]]> | ||
| 741 | </programlisting> | ||
| 742 | |||
| 743 | <para> | ||
| 744 | The following call sequence is applicable when a caller triggers | ||
| 745 | an HMAC operation: | ||
| 746 | </para> | ||
| 747 | |||
| 748 | <orderedlist> | ||
| 749 | <listitem> | ||
| 750 | <para> | ||
| 751 | The AHASH API functions are invoked by the caller. The HMAC | ||
| 752 | implementation performs its operation as needed. | ||
| 753 | </para> | ||
| 754 | |||
| 755 | <para> | ||
| 756 | During initialization of the HMAC cipher, the SHASH cipher type of | ||
| 757 | SHA256 is instantiated. The cipher handle for the SHA256 instance is | ||
| 758 | retained. | ||
| 759 | </para> | ||
| 760 | |||
| 761 | <para> | ||
| 762 | At one time, the HMAC implementation requires a SHA256 operation | ||
| 763 | where the SHA256 cipher handle is used. | ||
| 764 | </para> | ||
| 765 | </listitem> | ||
| 766 | |||
| 767 | <listitem> | ||
| 768 | <para> | ||
| 769 | The HMAC instance now invokes the SHASH API with the SHA256 | ||
| 770 | cipher handle to calculate the message digest. | ||
| 771 | </para> | ||
| 772 | </listitem> | ||
| 773 | </orderedlist> | ||
| 774 | </sect2> | ||
| 775 | </sect1> | ||
| 512 | </chapter> | 776 | </chapter> |
| 513 | 777 | ||
| 514 | <chapter id="Development"><title>Developing Cipher Algorithms</title> | 778 | <chapter id="Development"><title>Developing Cipher Algorithms</title> |
| @@ -808,6 +1072,602 @@ | |||
| 808 | </sect1> | 1072 | </sect1> |
| 809 | </chapter> | 1073 | </chapter> |
| 810 | 1074 | ||
| 1075 | <chapter id="User"><title>User Space Interface</title> | ||
| 1076 | <sect1><title>Introduction</title> | ||
| 1077 | <para> | ||
| 1078 | The concepts of the kernel crypto API visible to kernel space is fully | ||
| 1079 | applicable to the user space interface as well. Therefore, the kernel | ||
| 1080 | crypto API high level discussion for the in-kernel use cases applies | ||
| 1081 | here as well. | ||
| 1082 | </para> | ||
| 1083 | |||
| 1084 | <para> | ||
| 1085 | The major difference, however, is that user space can only act as a | ||
| 1086 | consumer and never as a provider of a transformation or cipher algorithm. | ||
| 1087 | </para> | ||
| 1088 | |||
| 1089 | <para> | ||
| 1090 | The following covers the user space interface exported by the kernel | ||
| 1091 | crypto API. A working example of this description is libkcapi that | ||
| 1092 | can be obtained from [1]. That library can be used by user space | ||
| 1093 | applications that require cryptographic services from the kernel. | ||
| 1094 | </para> | ||
| 1095 | |||
| 1096 | <para> | ||
| 1097 | Some details of the in-kernel kernel crypto API aspects do not | ||
| 1098 | apply to user space, however. This includes the difference between | ||
| 1099 | synchronous and asynchronous invocations. The user space API call | ||
| 1100 | is fully synchronous. | ||
| 1101 | </para> | ||
| 1102 | |||
| 1103 | <para> | ||
| 1104 | [1] http://www.chronox.de/libkcapi.html | ||
| 1105 | </para> | ||
| 1106 | |||
| 1107 | </sect1> | ||
| 1108 | |||
| 1109 | <sect1><title>User Space API General Remarks</title> | ||
| 1110 | <para> | ||
| 1111 | The kernel crypto API is accessible from user space. Currently, | ||
| 1112 | the following ciphers are accessible: | ||
| 1113 | </para> | ||
| 1114 | |||
| 1115 | <itemizedlist> | ||
| 1116 | <listitem> | ||
| 1117 | <para>Message digest including keyed message digest (HMAC, CMAC)</para> | ||
| 1118 | </listitem> | ||
| 1119 | |||
| 1120 | <listitem> | ||
| 1121 | <para>Symmetric ciphers</para> | ||
| 1122 | </listitem> | ||
| 1123 | |||
| 1124 | <listitem> | ||
| 1125 | <para>AEAD ciphers</para> | ||
| 1126 | </listitem> | ||
| 1127 | |||
| 1128 | <listitem> | ||
| 1129 | <para>Random Number Generators</para> | ||
| 1130 | </listitem> | ||
| 1131 | </itemizedlist> | ||
| 1132 | |||
| 1133 | <para> | ||
| 1134 | The interface is provided via socket type using the type AF_ALG. | ||
| 1135 | In addition, the setsockopt option type is SOL_ALG. In case the | ||
| 1136 | user space header files do not export these flags yet, use the | ||
| 1137 | following macros: | ||
| 1138 | </para> | ||
| 1139 | |||
| 1140 | <programlisting> | ||
| 1141 | #ifndef AF_ALG | ||
| 1142 | #define AF_ALG 38 | ||
| 1143 | #endif | ||
| 1144 | #ifndef SOL_ALG | ||
| 1145 | #define SOL_ALG 279 | ||
| 1146 | #endif | ||
| 1147 | </programlisting> | ||
| 1148 | |||
| 1149 | <para> | ||
| 1150 | A cipher is accessed with the same name as done for the in-kernel | ||
| 1151 | API calls. This includes the generic vs. unique naming schema for | ||
| 1152 | ciphers as well as the enforcement of priorities for generic names. | ||
| 1153 | </para> | ||
| 1154 | |||
| 1155 | <para> | ||
| 1156 | To interact with the kernel crypto API, a socket must be | ||
| 1157 | created by the user space application. User space invokes the cipher | ||
| 1158 | operation with the send()/write() system call family. The result of the | ||
| 1159 | cipher operation is obtained with the read()/recv() system call family. | ||
| 1160 | </para> | ||
| 1161 | |||
| 1162 | <para> | ||
| 1163 | The following API calls assume that the socket descriptor | ||
| 1164 | is already opened by the user space application and discusses only | ||
| 1165 | the kernel crypto API specific invocations. | ||
| 1166 | </para> | ||
| 1167 | |||
| 1168 | <para> | ||
| 1169 | To initialize the socket interface, the following sequence has to | ||
| 1170 | be performed by the consumer: | ||
| 1171 | </para> | ||
| 1172 | |||
| 1173 | <orderedlist> | ||
| 1174 | <listitem> | ||
| 1175 | <para> | ||
| 1176 | Create a socket of type AF_ALG with the struct sockaddr_alg | ||
| 1177 | parameter specified below for the different cipher types. | ||
| 1178 | </para> | ||
| 1179 | </listitem> | ||
| 1180 | |||
| 1181 | <listitem> | ||
| 1182 | <para> | ||
| 1183 | Invoke bind with the socket descriptor | ||
| 1184 | </para> | ||
| 1185 | </listitem> | ||
| 1186 | |||
| 1187 | <listitem> | ||
| 1188 | <para> | ||
| 1189 | Invoke accept with the socket descriptor. The accept system call | ||
| 1190 | returns a new file descriptor that is to be used to interact with | ||
| 1191 | the particular cipher instance. When invoking send/write or recv/read | ||
| 1192 | system calls to send data to the kernel or obtain data from the | ||
| 1193 | kernel, the file descriptor returned by accept must be used. | ||
| 1194 | </para> | ||
| 1195 | </listitem> | ||
| 1196 | </orderedlist> | ||
| 1197 | </sect1> | ||
| 1198 | |||
| 1199 | <sect1><title>In-place Cipher operation</title> | ||
| 1200 | <para> | ||
| 1201 | Just like the in-kernel operation of the kernel crypto API, the user | ||
| 1202 | space interface allows the cipher operation in-place. That means that | ||
| 1203 | the input buffer used for the send/write system call and the output | ||
| 1204 | buffer used by the read/recv system call may be one and the same. | ||
| 1205 | This is of particular interest for symmetric cipher operations where a | ||
| 1206 | copying of the output data to its final destination can be avoided. | ||
| 1207 | </para> | ||
| 1208 | |||
| 1209 | <para> | ||
| 1210 | If a consumer on the other hand wants to maintain the plaintext and | ||
| 1211 | the ciphertext in different memory locations, all a consumer needs | ||
| 1212 | to do is to provide different memory pointers for the encryption and | ||
| 1213 | decryption operation. | ||
| 1214 | </para> | ||
| 1215 | </sect1> | ||
| 1216 | |||
| 1217 | <sect1><title>Message Digest API</title> | ||
| 1218 | <para> | ||
| 1219 | The message digest type to be used for the cipher operation is | ||
| 1220 | selected when invoking the bind syscall. bind requires the caller | ||
| 1221 | to provide a filled struct sockaddr data structure. This data | ||
| 1222 | structure must be filled as follows: | ||
| 1223 | </para> | ||
| 1224 | |||
| 1225 | <programlisting> | ||
| 1226 | struct sockaddr_alg sa = { | ||
| 1227 | .salg_family = AF_ALG, | ||
| 1228 | .salg_type = "hash", /* this selects the hash logic in the kernel */ | ||
| 1229 | .salg_name = "sha1" /* this is the cipher name */ | ||
| 1230 | }; | ||
| 1231 | </programlisting> | ||
| 1232 | |||
| 1233 | <para> | ||
| 1234 | The salg_type value "hash" applies to message digests and keyed | ||
| 1235 | message digests. Though, a keyed message digest is referenced by | ||
| 1236 | the appropriate salg_name. Please see below for the setsockopt | ||
| 1237 | interface that explains how the key can be set for a keyed message | ||
| 1238 | digest. | ||
| 1239 | </para> | ||
| 1240 | |||
| 1241 | <para> | ||
| 1242 | Using the send() system call, the application provides the data that | ||
| 1243 | should be processed with the message digest. The send system call | ||
| 1244 | allows the following flags to be specified: | ||
| 1245 | </para> | ||
| 1246 | |||
| 1247 | <itemizedlist> | ||
| 1248 | <listitem> | ||
| 1249 | <para> | ||
| 1250 | MSG_MORE: If this flag is set, the send system call acts like a | ||
| 1251 | message digest update function where the final hash is not | ||
| 1252 | yet calculated. If the flag is not set, the send system call | ||
| 1253 | calculates the final message digest immediately. | ||
| 1254 | </para> | ||
| 1255 | </listitem> | ||
| 1256 | </itemizedlist> | ||
| 1257 | |||
| 1258 | <para> | ||
| 1259 | With the recv() system call, the application can read the message | ||
| 1260 | digest from the kernel crypto API. If the buffer is too small for the | ||
| 1261 | message digest, the flag MSG_TRUNC is set by the kernel. | ||
| 1262 | </para> | ||
| 1263 | |||
| 1264 | <para> | ||
| 1265 | In order to set a message digest key, the calling application must use | ||
| 1266 | the setsockopt() option of ALG_SET_KEY. If the key is not set the HMAC | ||
| 1267 | operation is performed without the initial HMAC state change caused by | ||
| 1268 | the key. | ||
| 1269 | </para> | ||
| 1270 | </sect1> | ||
| 1271 | |||
| 1272 | <sect1><title>Symmetric Cipher API</title> | ||
| 1273 | <para> | ||
| 1274 | The operation is very similar to the message digest discussion. | ||
| 1275 | During initialization, the struct sockaddr data structure must be | ||
| 1276 | filled as follows: | ||
| 1277 | </para> | ||
| 1278 | |||
| 1279 | <programlisting> | ||
| 1280 | struct sockaddr_alg sa = { | ||
| 1281 | .salg_family = AF_ALG, | ||
| 1282 | .salg_type = "skcipher", /* this selects the symmetric cipher */ | ||
| 1283 | .salg_name = "cbc(aes)" /* this is the cipher name */ | ||
| 1284 | }; | ||
| 1285 | </programlisting> | ||
| 1286 | |||
| 1287 | <para> | ||
| 1288 | Before data can be sent to the kernel using the write/send system | ||
| 1289 | call family, the consumer must set the key. The key setting is | ||
| 1290 | described with the setsockopt invocation below. | ||
| 1291 | </para> | ||
| 1292 | |||
| 1293 | <para> | ||
| 1294 | Using the sendmsg() system call, the application provides the data that should be processed for encryption or decryption. In addition, the IV is | ||
| 1295 | specified with the data structure provided by the sendmsg() system call. | ||
| 1296 | </para> | ||
| 1297 | |||
| 1298 | <para> | ||
| 1299 | The sendmsg system call parameter of struct msghdr is embedded into the | ||
| 1300 | struct cmsghdr data structure. See recv(2) and cmsg(3) for more | ||
| 1301 | information on how the cmsghdr data structure is used together with the | ||
| 1302 | send/recv system call family. That cmsghdr data structure holds the | ||
| 1303 | following information specified with a separate header instances: | ||
| 1304 | </para> | ||
| 1305 | |||
| 1306 | <itemizedlist> | ||
| 1307 | <listitem> | ||
| 1308 | <para> | ||
| 1309 | specification of the cipher operation type with one of these flags: | ||
| 1310 | </para> | ||
| 1311 | <itemizedlist> | ||
| 1312 | <listitem> | ||
| 1313 | <para>ALG_OP_ENCRYPT - encryption of data</para> | ||
| 1314 | </listitem> | ||
| 1315 | <listitem> | ||
| 1316 | <para>ALG_OP_DECRYPT - decryption of data</para> | ||
| 1317 | </listitem> | ||
| 1318 | </itemizedlist> | ||
| 1319 | </listitem> | ||
| 1320 | |||
| 1321 | <listitem> | ||
| 1322 | <para> | ||
| 1323 | specification of the IV information marked with the flag ALG_SET_IV | ||
| 1324 | </para> | ||
| 1325 | </listitem> | ||
| 1326 | </itemizedlist> | ||
| 1327 | |||
| 1328 | <para> | ||
| 1329 | The send system call family allows the following flag to be specified: | ||
| 1330 | </para> | ||
| 1331 | |||
| 1332 | <itemizedlist> | ||
| 1333 | <listitem> | ||
| 1334 | <para> | ||
| 1335 | MSG_MORE: If this flag is set, the send system call acts like a | ||
| 1336 | cipher update function where more input data is expected | ||
| 1337 | with a subsequent invocation of the send system call. | ||
| 1338 | </para> | ||
| 1339 | </listitem> | ||
| 1340 | </itemizedlist> | ||
| 1341 | |||
| 1342 | <para> | ||
| 1343 | Note: The kernel reports -EINVAL for any unexpected data. The caller | ||
| 1344 | must make sure that all data matches the constraints given in | ||
| 1345 | /proc/crypto for the selected cipher. | ||
| 1346 | </para> | ||
| 1347 | |||
| 1348 | <para> | ||
| 1349 | With the recv() system call, the application can read the result of | ||
| 1350 | the cipher operation from the kernel crypto API. The output buffer | ||
| 1351 | must be at least as large as to hold all blocks of the encrypted or | ||
| 1352 | decrypted data. If the output data size is smaller, only as many | ||
| 1353 | blocks are returned that fit into that output buffer size. | ||
| 1354 | </para> | ||
| 1355 | </sect1> | ||
| 1356 | |||
| 1357 | <sect1><title>AEAD Cipher API</title> | ||
| 1358 | <para> | ||
| 1359 | The operation is very similar to the symmetric cipher discussion. | ||
| 1360 | During initialization, the struct sockaddr data structure must be | ||
| 1361 | filled as follows: | ||
| 1362 | </para> | ||
| 1363 | |||
| 1364 | <programlisting> | ||
| 1365 | struct sockaddr_alg sa = { | ||
| 1366 | .salg_family = AF_ALG, | ||
| 1367 | .salg_type = "aead", /* this selects the symmetric cipher */ | ||
| 1368 | .salg_name = "gcm(aes)" /* this is the cipher name */ | ||
| 1369 | }; | ||
| 1370 | </programlisting> | ||
| 1371 | |||
| 1372 | <para> | ||
| 1373 | Before data can be sent to the kernel using the write/send system | ||
| 1374 | call family, the consumer must set the key. The key setting is | ||
| 1375 | described with the setsockopt invocation below. | ||
| 1376 | </para> | ||
| 1377 | |||
| 1378 | <para> | ||
| 1379 | In addition, before data can be sent to the kernel using the | ||
| 1380 | write/send system call family, the consumer must set the authentication | ||
| 1381 | tag size. To set the authentication tag size, the caller must use the | ||
| 1382 | setsockopt invocation described below. | ||
| 1383 | </para> | ||
| 1384 | |||
| 1385 | <para> | ||
| 1386 | Using the sendmsg() system call, the application provides the data that should be processed for encryption or decryption. In addition, the IV is | ||
| 1387 | specified with the data structure provided by the sendmsg() system call. | ||
| 1388 | </para> | ||
| 1389 | |||
| 1390 | <para> | ||
| 1391 | The sendmsg system call parameter of struct msghdr is embedded into the | ||
| 1392 | struct cmsghdr data structure. See recv(2) and cmsg(3) for more | ||
| 1393 | information on how the cmsghdr data structure is used together with the | ||
| 1394 | send/recv system call family. That cmsghdr data structure holds the | ||
| 1395 | following information specified with a separate header instances: | ||
| 1396 | </para> | ||
| 1397 | |||
| 1398 | <itemizedlist> | ||
| 1399 | <listitem> | ||
| 1400 | <para> | ||
| 1401 | specification of the cipher operation type with one of these flags: | ||
| 1402 | </para> | ||
| 1403 | <itemizedlist> | ||
| 1404 | <listitem> | ||
| 1405 | <para>ALG_OP_ENCRYPT - encryption of data</para> | ||
| 1406 | </listitem> | ||
| 1407 | <listitem> | ||
| 1408 | <para>ALG_OP_DECRYPT - decryption of data</para> | ||
| 1409 | </listitem> | ||
| 1410 | </itemizedlist> | ||
| 1411 | </listitem> | ||
| 1412 | |||
| 1413 | <listitem> | ||
| 1414 | <para> | ||
| 1415 | specification of the IV information marked with the flag ALG_SET_IV | ||
| 1416 | </para> | ||
| 1417 | </listitem> | ||
| 1418 | |||
| 1419 | <listitem> | ||
| 1420 | <para> | ||
| 1421 | specification of the associated authentication data (AAD) with the | ||
| 1422 | flag ALG_SET_AEAD_ASSOCLEN. The AAD is sent to the kernel together | ||
| 1423 | with the plaintext / ciphertext. See below for the memory structure. | ||
| 1424 | </para> | ||
| 1425 | </listitem> | ||
| 1426 | </itemizedlist> | ||
| 1427 | |||
| 1428 | <para> | ||
| 1429 | The send system call family allows the following flag to be specified: | ||
| 1430 | </para> | ||
| 1431 | |||
| 1432 | <itemizedlist> | ||
| 1433 | <listitem> | ||
| 1434 | <para> | ||
| 1435 | MSG_MORE: If this flag is set, the send system call acts like a | ||
| 1436 | cipher update function where more input data is expected | ||
| 1437 | with a subsequent invocation of the send system call. | ||
| 1438 | </para> | ||
| 1439 | </listitem> | ||
| 1440 | </itemizedlist> | ||
| 1441 | |||
| 1442 | <para> | ||
| 1443 | Note: The kernel reports -EINVAL for any unexpected data. The caller | ||
| 1444 | must make sure that all data matches the constraints given in | ||
| 1445 | /proc/crypto for the selected cipher. | ||
| 1446 | </para> | ||
| 1447 | |||
| 1448 | <para> | ||
| 1449 | With the recv() system call, the application can read the result of | ||
| 1450 | the cipher operation from the kernel crypto API. The output buffer | ||
| 1451 | must be at least as large as defined with the memory structure below. | ||
| 1452 | If the output data size is smaller, the cipher operation is not performed. | ||
| 1453 | </para> | ||
| 1454 | |||
| 1455 | <para> | ||
| 1456 | The authenticated decryption operation may indicate an integrity error. | ||
| 1457 | Such breach in integrity is marked with the -EBADMSG error code. | ||
| 1458 | </para> | ||
| 1459 | |||
| 1460 | <sect2><title>AEAD Memory Structure</title> | ||
| 1461 | <para> | ||
| 1462 | The AEAD cipher operates with the following information that | ||
| 1463 | is communicated between user and kernel space as one data stream: | ||
| 1464 | </para> | ||
| 1465 | |||
| 1466 | <itemizedlist> | ||
| 1467 | <listitem> | ||
| 1468 | <para>plaintext or ciphertext</para> | ||
| 1469 | </listitem> | ||
| 1470 | |||
| 1471 | <listitem> | ||
| 1472 | <para>associated authentication data (AAD)</para> | ||
| 1473 | </listitem> | ||
| 1474 | |||
| 1475 | <listitem> | ||
| 1476 | <para>authentication tag</para> | ||
| 1477 | </listitem> | ||
| 1478 | </itemizedlist> | ||
| 1479 | |||
| 1480 | <para> | ||
| 1481 | The sizes of the AAD and the authentication tag are provided with | ||
| 1482 | the sendmsg and setsockopt calls (see there). As the kernel knows | ||
| 1483 | the size of the entire data stream, the kernel is now able to | ||
| 1484 | calculate the right offsets of the data components in the data | ||
| 1485 | stream. | ||
| 1486 | </para> | ||
| 1487 | |||
| 1488 | <para> | ||
| 1489 | The user space caller must arrange the aforementioned information | ||
| 1490 | in the following order: | ||
| 1491 | </para> | ||
| 1492 | |||
| 1493 | <itemizedlist> | ||
| 1494 | <listitem> | ||
| 1495 | <para> | ||
| 1496 | AEAD encryption input: AAD || plaintext | ||
| 1497 | </para> | ||
| 1498 | </listitem> | ||
| 1499 | |||
| 1500 | <listitem> | ||
| 1501 | <para> | ||
| 1502 | AEAD decryption input: AAD || ciphertext || authentication tag | ||
| 1503 | </para> | ||
| 1504 | </listitem> | ||
| 1505 | </itemizedlist> | ||
| 1506 | |||
| 1507 | <para> | ||
| 1508 | The output buffer the user space caller provides must be at least as | ||
| 1509 | large to hold the following data: | ||
| 1510 | </para> | ||
| 1511 | |||
| 1512 | <itemizedlist> | ||
| 1513 | <listitem> | ||
| 1514 | <para> | ||
| 1515 | AEAD encryption output: ciphertext || authentication tag | ||
| 1516 | </para> | ||
| 1517 | </listitem> | ||
| 1518 | |||
| 1519 | <listitem> | ||
| 1520 | <para> | ||
| 1521 | AEAD decryption output: plaintext | ||
| 1522 | </para> | ||
| 1523 | </listitem> | ||
| 1524 | </itemizedlist> | ||
| 1525 | </sect2> | ||
| 1526 | </sect1> | ||
| 1527 | |||
| 1528 | <sect1><title>Random Number Generator API</title> | ||
| 1529 | <para> | ||
| 1530 | Again, the operation is very similar to the other APIs. | ||
| 1531 | During initialization, the struct sockaddr data structure must be | ||
| 1532 | filled as follows: | ||
| 1533 | </para> | ||
| 1534 | |||
| 1535 | <programlisting> | ||
| 1536 | struct sockaddr_alg sa = { | ||
| 1537 | .salg_family = AF_ALG, | ||
| 1538 | .salg_type = "rng", /* this selects the symmetric cipher */ | ||
| 1539 | .salg_name = "drbg_nopr_sha256" /* this is the cipher name */ | ||
| 1540 | }; | ||
| 1541 | </programlisting> | ||
| 1542 | |||
| 1543 | <para> | ||
| 1544 | Depending on the RNG type, the RNG must be seeded. The seed is provided | ||
| 1545 | using the setsockopt interface to set the key. For example, the | ||
| 1546 | ansi_cprng requires a seed. The DRBGs do not require a seed, but | ||
| 1547 | may be seeded. | ||
| 1548 | </para> | ||
| 1549 | |||
| 1550 | <para> | ||
| 1551 | Using the read()/recvmsg() system calls, random numbers can be obtained. | ||
| 1552 | The kernel generates at most 128 bytes in one call. If user space | ||
| 1553 | requires more data, multiple calls to read()/recvmsg() must be made. | ||
| 1554 | </para> | ||
| 1555 | |||
| 1556 | <para> | ||
| 1557 | WARNING: The user space caller may invoke the initially mentioned | ||
| 1558 | accept system call multiple times. In this case, the returned file | ||
| 1559 | descriptors have the same state. | ||
| 1560 | </para> | ||
| 1561 | |||
| 1562 | </sect1> | ||
| 1563 | |||
| 1564 | <sect1><title>Zero-Copy Interface</title> | ||
| 1565 | <para> | ||
| 1566 | In addition to the send/write/read/recv system call familty, the AF_ALG | ||
| 1567 | interface can be accessed with the zero-copy interface of splice/vmsplice. | ||
| 1568 | As the name indicates, the kernel tries to avoid a copy operation into | ||
| 1569 | kernel space. | ||
| 1570 | </para> | ||
| 1571 | |||
| 1572 | <para> | ||
| 1573 | The zero-copy operation requires data to be aligned at the page boundary. | ||
| 1574 | Non-aligned data can be used as well, but may require more operations of | ||
| 1575 | the kernel which would defeat the speed gains obtained from the zero-copy | ||
| 1576 | interface. | ||
| 1577 | </para> | ||
| 1578 | |||
| 1579 | <para> | ||
| 1580 | The system-interent limit for the size of one zero-copy operation is | ||
| 1581 | 16 pages. If more data is to be sent to AF_ALG, user space must slice | ||
| 1582 | the input into segments with a maximum size of 16 pages. | ||
| 1583 | </para> | ||
| 1584 | |||
| 1585 | <para> | ||
| 1586 | Zero-copy can be used with the following code example (a complete working | ||
| 1587 | example is provided with libkcapi): | ||
| 1588 | </para> | ||
| 1589 | |||
| 1590 | <programlisting> | ||
| 1591 | int pipes[2]; | ||
| 1592 | |||
| 1593 | pipe(pipes); | ||
| 1594 | /* input data in iov */ | ||
| 1595 | vmsplice(pipes[1], iov, iovlen, SPLICE_F_GIFT); | ||
| 1596 | /* opfd is the file descriptor returned from accept() system call */ | ||
| 1597 | splice(pipes[0], NULL, opfd, NULL, ret, 0); | ||
| 1598 | read(opfd, out, outlen); | ||
| 1599 | </programlisting> | ||
| 1600 | |||
| 1601 | </sect1> | ||
| 1602 | |||
| 1603 | <sect1><title>Setsockopt Interface</title> | ||
| 1604 | <para> | ||
| 1605 | In addition to the read/recv and send/write system call handling | ||
| 1606 | to send and retrieve data subject to the cipher operation, a consumer | ||
| 1607 | also needs to set the additional information for the cipher operation. | ||
| 1608 | This additional information is set using the setsockopt system call | ||
| 1609 | that must be invoked with the file descriptor of the open cipher | ||
| 1610 | (i.e. the file descriptor returned by the accept system call). | ||
| 1611 | </para> | ||
| 1612 | |||
| 1613 | <para> | ||
| 1614 | Each setsockopt invocation must use the level SOL_ALG. | ||
| 1615 | </para> | ||
| 1616 | |||
| 1617 | <para> | ||
| 1618 | The setsockopt interface allows setting the following data using | ||
| 1619 | the mentioned optname: | ||
| 1620 | </para> | ||
| 1621 | |||
| 1622 | <itemizedlist> | ||
| 1623 | <listitem> | ||
| 1624 | <para> | ||
| 1625 | ALG_SET_KEY -- Setting the key. Key setting is applicable to: | ||
| 1626 | </para> | ||
| 1627 | <itemizedlist> | ||
| 1628 | <listitem> | ||
| 1629 | <para>the skcipher cipher type (symmetric ciphers)</para> | ||
| 1630 | </listitem> | ||
| 1631 | <listitem> | ||
| 1632 | <para>the hash cipher type (keyed message digests)</para> | ||
| 1633 | </listitem> | ||
| 1634 | <listitem> | ||
| 1635 | <para>the AEAD cipher type</para> | ||
| 1636 | </listitem> | ||
| 1637 | <listitem> | ||
| 1638 | <para>the RNG cipher type to provide the seed</para> | ||
| 1639 | </listitem> | ||
| 1640 | </itemizedlist> | ||
| 1641 | </listitem> | ||
| 1642 | |||
| 1643 | <listitem> | ||
| 1644 | <para> | ||
| 1645 | ALG_SET_AEAD_AUTHSIZE -- Setting the authentication tag size | ||
| 1646 | for AEAD ciphers. For a encryption operation, the authentication | ||
| 1647 | tag of the given size will be generated. For a decryption operation, | ||
| 1648 | the provided ciphertext is assumed to contain an authentication tag | ||
| 1649 | of the given size (see section about AEAD memory layout below). | ||
| 1650 | </para> | ||
| 1651 | </listitem> | ||
| 1652 | </itemizedlist> | ||
| 1653 | |||
| 1654 | </sect1> | ||
| 1655 | |||
| 1656 | <sect1><title>User space API example</title> | ||
| 1657 | <para> | ||
| 1658 | Please see [1] for libkcapi which provides an easy-to-use wrapper | ||
| 1659 | around the aforementioned Netlink kernel interface. [1] also contains | ||
| 1660 | a test application that invokes all libkcapi API calls. | ||
| 1661 | </para> | ||
| 1662 | |||
| 1663 | <para> | ||
| 1664 | [1] http://www.chronox.de/libkcapi.html | ||
| 1665 | </para> | ||
| 1666 | |||
| 1667 | </sect1> | ||
| 1668 | |||
| 1669 | </chapter> | ||
| 1670 | |||
| 811 | <chapter id="API"><title>Programming Interface</title> | 1671 | <chapter id="API"><title>Programming Interface</title> |
| 812 | <sect1><title>Block Cipher Context Data Structures</title> | 1672 | <sect1><title>Block Cipher Context Data Structures</title> |
| 813 | !Pinclude/linux/crypto.h Block Cipher Context Data Structures | 1673 | !Pinclude/linux/crypto.h Block Cipher Context Data Structures |
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl index 03f1985a4bd1..9765a4c0829d 100644 --- a/Documentation/DocBook/drm.tmpl +++ b/Documentation/DocBook/drm.tmpl | |||
| @@ -1293,7 +1293,7 @@ int max_width, max_height;</synopsis> | |||
| 1293 | </para> | 1293 | </para> |
| 1294 | <para> | 1294 | <para> |
| 1295 | If a page flip can be successfully scheduled the driver must set the | 1295 | If a page flip can be successfully scheduled the driver must set the |
| 1296 | <code>drm_crtc-<fb</code> field to the new framebuffer pointed to | 1296 | <code>drm_crtc->fb</code> field to the new framebuffer pointed to |
| 1297 | by <code>fb</code>. This is important so that the reference counting | 1297 | by <code>fb</code>. This is important so that the reference counting |
| 1298 | on framebuffers stays balanced. | 1298 | on framebuffers stays balanced. |
| 1299 | </para> | 1299 | </para> |
| @@ -3979,6 +3979,11 @@ int num_ioctls;</synopsis> | |||
| 3979 | !Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_disable_interrupts | 3979 | !Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_disable_interrupts |
| 3980 | !Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_enable_interrupts | 3980 | !Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_enable_interrupts |
| 3981 | </sect2> | 3981 | </sect2> |
| 3982 | <sect2> | ||
| 3983 | <title>Intel GVT-g Guest Support(vGPU)</title> | ||
| 3984 | !Pdrivers/gpu/drm/i915/i915_vgpu.c Intel GVT-g guest support | ||
| 3985 | !Idrivers/gpu/drm/i915/i915_vgpu.c | ||
| 3986 | </sect2> | ||
| 3982 | </sect1> | 3987 | </sect1> |
| 3983 | <sect1> | 3988 | <sect1> |
| 3984 | <title>Display Hardware Handling</title> | 3989 | <title>Display Hardware Handling</title> |
| @@ -4048,6 +4053,17 @@ int num_ioctls;</synopsis> | |||
| 4048 | !Idrivers/gpu/drm/i915/intel_fbc.c | 4053 | !Idrivers/gpu/drm/i915/intel_fbc.c |
| 4049 | </sect2> | 4054 | </sect2> |
| 4050 | <sect2> | 4055 | <sect2> |
| 4056 | <title>Display Refresh Rate Switching (DRRS)</title> | ||
| 4057 | !Pdrivers/gpu/drm/i915/intel_dp.c Display Refresh Rate Switching (DRRS) | ||
| 4058 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_set_drrs_state | ||
| 4059 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_enable | ||
| 4060 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_disable | ||
| 4061 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_invalidate | ||
| 4062 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_flush | ||
| 4063 | !Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_drrs_init | ||
| 4064 | |||
| 4065 | </sect2> | ||
| 4066 | <sect2> | ||
| 4051 | <title>DPIO</title> | 4067 | <title>DPIO</title> |
| 4052 | !Pdrivers/gpu/drm/i915/i915_reg.h DPIO | 4068 | !Pdrivers/gpu/drm/i915/i915_reg.h DPIO |
| 4053 | <table id="dpiox2"> | 4069 | <table id="dpiox2"> |
| @@ -4168,7 +4184,7 @@ int num_ioctls;</synopsis> | |||
| 4168 | <sect2> | 4184 | <sect2> |
| 4169 | <title>Buffer Object Eviction</title> | 4185 | <title>Buffer Object Eviction</title> |
| 4170 | <para> | 4186 | <para> |
| 4171 | This section documents the interface function for evicting buffer | 4187 | This section documents the interface functions for evicting buffer |
| 4172 | objects to make space available in the virtual gpu address spaces. | 4188 | objects to make space available in the virtual gpu address spaces. |
| 4173 | Note that this is mostly orthogonal to shrinking buffer objects | 4189 | Note that this is mostly orthogonal to shrinking buffer objects |
| 4174 | caches, which has the goal to make main memory (shared with the gpu | 4190 | caches, which has the goal to make main memory (shared with the gpu |
| @@ -4176,6 +4192,17 @@ int num_ioctls;</synopsis> | |||
| 4176 | </para> | 4192 | </para> |
| 4177 | !Idrivers/gpu/drm/i915/i915_gem_evict.c | 4193 | !Idrivers/gpu/drm/i915/i915_gem_evict.c |
| 4178 | </sect2> | 4194 | </sect2> |
| 4195 | <sect2> | ||
| 4196 | <title>Buffer Object Memory Shrinking</title> | ||
| 4197 | <para> | ||
| 4198 | This section documents the interface function for shrinking memory | ||
| 4199 | usage of buffer object caches. Shrinking is used to make main memory | ||
| 4200 | available. Note that this is mostly orthogonal to evicting buffer | ||
| 4201 | objects, which has the goal to make space in gpu virtual address | ||
| 4202 | spaces. | ||
| 4203 | </para> | ||
| 4204 | !Idrivers/gpu/drm/i915/i915_gem_shrinker.c | ||
| 4205 | </sect2> | ||
| 4179 | </sect1> | 4206 | </sect1> |
| 4180 | 4207 | ||
| 4181 | <sect1> | 4208 | <sect1> |
diff --git a/Documentation/DocBook/media/v4l/subdev-formats.xml b/Documentation/DocBook/media/v4l/subdev-formats.xml index bc8d3fb9e4a9..2588ad781242 100644 --- a/Documentation/DocBook/media/v4l/subdev-formats.xml +++ b/Documentation/DocBook/media/v4l/subdev-formats.xml | |||
| @@ -91,7 +91,9 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 91 | <listitem><para>For formats where the total number of bits per pixel is smaller | 91 | <listitem><para>For formats where the total number of bits per pixel is smaller |
| 92 | than the number of bus samples per pixel times the bus width, a padding | 92 | than the number of bus samples per pixel times the bus width, a padding |
| 93 | value stating if the bytes are padded in their most high order bits | 93 | value stating if the bytes are padded in their most high order bits |
| 94 | (PADHI) or low order bits (PADLO).</para></listitem> | 94 | (PADHI) or low order bits (PADLO). A "C" prefix is used for component-wise |
| 95 | padding in the most high order bits (CPADHI) or low order bits (CPADLO) | ||
| 96 | of each separate component.</para></listitem> | ||
| 95 | <listitem><para>For formats where the number of bus samples per pixel is larger | 97 | <listitem><para>For formats where the number of bus samples per pixel is larger |
| 96 | than 1, an endianness value stating if the pixel is transferred MSB first | 98 | than 1, an endianness value stating if the pixel is transferred MSB first |
| 97 | (BE) or LSB first (LE).</para></listitem> | 99 | (BE) or LSB first (LE).</para></listitem> |
| @@ -192,6 +194,24 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 192 | </row> | 194 | </row> |
| 193 | </thead> | 195 | </thead> |
| 194 | <tbody valign="top"> | 196 | <tbody valign="top"> |
| 197 | <row id="MEDIA-BUS-FMT-RGB444-1X12"> | ||
| 198 | <entry>MEDIA_BUS_FMT_RGB444_1X12</entry> | ||
| 199 | <entry>0x1016</entry> | ||
| 200 | <entry></entry> | ||
| 201 | &dash-ent-20; | ||
| 202 | <entry>r<subscript>3</subscript></entry> | ||
| 203 | <entry>r<subscript>2</subscript></entry> | ||
| 204 | <entry>r<subscript>1</subscript></entry> | ||
| 205 | <entry>r<subscript>0</subscript></entry> | ||
| 206 | <entry>g<subscript>3</subscript></entry> | ||
| 207 | <entry>g<subscript>2</subscript></entry> | ||
| 208 | <entry>g<subscript>1</subscript></entry> | ||
| 209 | <entry>g<subscript>0</subscript></entry> | ||
| 210 | <entry>b<subscript>3</subscript></entry> | ||
| 211 | <entry>b<subscript>2</subscript></entry> | ||
| 212 | <entry>b<subscript>1</subscript></entry> | ||
| 213 | <entry>b<subscript>0</subscript></entry> | ||
| 214 | </row> | ||
| 195 | <row id="MEDIA-BUS-FMT-RGB444-2X8-PADHI-BE"> | 215 | <row id="MEDIA-BUS-FMT-RGB444-2X8-PADHI-BE"> |
| 196 | <entry>MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE</entry> | 216 | <entry>MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE</entry> |
| 197 | <entry>0x1001</entry> | 217 | <entry>0x1001</entry> |
| @@ -304,6 +324,28 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 304 | <entry>g<subscript>4</subscript></entry> | 324 | <entry>g<subscript>4</subscript></entry> |
| 305 | <entry>g<subscript>3</subscript></entry> | 325 | <entry>g<subscript>3</subscript></entry> |
| 306 | </row> | 326 | </row> |
| 327 | <row id="MEDIA-BUS-FMT-RGB565-1X16"> | ||
| 328 | <entry>MEDIA_BUS_FMT_RGB565_1X16</entry> | ||
| 329 | <entry>0x1017</entry> | ||
| 330 | <entry></entry> | ||
| 331 | &dash-ent-16; | ||
| 332 | <entry>r<subscript>4</subscript></entry> | ||
| 333 | <entry>r<subscript>3</subscript></entry> | ||
| 334 | <entry>r<subscript>2</subscript></entry> | ||
| 335 | <entry>r<subscript>1</subscript></entry> | ||
| 336 | <entry>r<subscript>0</subscript></entry> | ||
| 337 | <entry>g<subscript>5</subscript></entry> | ||
| 338 | <entry>g<subscript>4</subscript></entry> | ||
| 339 | <entry>g<subscript>3</subscript></entry> | ||
| 340 | <entry>g<subscript>2</subscript></entry> | ||
| 341 | <entry>g<subscript>1</subscript></entry> | ||
| 342 | <entry>g<subscript>0</subscript></entry> | ||
| 343 | <entry>b<subscript>4</subscript></entry> | ||
| 344 | <entry>b<subscript>3</subscript></entry> | ||
| 345 | <entry>b<subscript>2</subscript></entry> | ||
| 346 | <entry>b<subscript>1</subscript></entry> | ||
| 347 | <entry>b<subscript>0</subscript></entry> | ||
| 348 | </row> | ||
| 307 | <row id="MEDIA-BUS-FMT-BGR565-2X8-BE"> | 349 | <row id="MEDIA-BUS-FMT-BGR565-2X8-BE"> |
| 308 | <entry>MEDIA_BUS_FMT_BGR565_2X8_BE</entry> | 350 | <entry>MEDIA_BUS_FMT_BGR565_2X8_BE</entry> |
| 309 | <entry>0x1005</entry> | 351 | <entry>0x1005</entry> |
| @@ -470,6 +512,96 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 470 | <entry>g<subscript>1</subscript></entry> | 512 | <entry>g<subscript>1</subscript></entry> |
| 471 | <entry>g<subscript>0</subscript></entry> | 513 | <entry>g<subscript>0</subscript></entry> |
| 472 | </row> | 514 | </row> |
| 515 | <row id="MEDIA-BUS-FMT-RGB666-1X24_CPADHI"> | ||
| 516 | <entry>MEDIA_BUS_FMT_RGB666_1X24_CPADHI</entry> | ||
| 517 | <entry>0x1015</entry> | ||
| 518 | <entry></entry> | ||
| 519 | &dash-ent-8; | ||
| 520 | <entry>0</entry> | ||
| 521 | <entry>0</entry> | ||
| 522 | <entry>r<subscript>5</subscript></entry> | ||
| 523 | <entry>r<subscript>4</subscript></entry> | ||
| 524 | <entry>r<subscript>3</subscript></entry> | ||
| 525 | <entry>r<subscript>2</subscript></entry> | ||
| 526 | <entry>r<subscript>1</subscript></entry> | ||
| 527 | <entry>r<subscript>0</subscript></entry> | ||
| 528 | <entry>0</entry> | ||
| 529 | <entry>0</entry> | ||
| 530 | <entry>g<subscript>5</subscript></entry> | ||
| 531 | <entry>g<subscript>4</subscript></entry> | ||
| 532 | <entry>g<subscript>3</subscript></entry> | ||
| 533 | <entry>g<subscript>2</subscript></entry> | ||
| 534 | <entry>g<subscript>1</subscript></entry> | ||
| 535 | <entry>g<subscript>0</subscript></entry> | ||
| 536 | <entry>0</entry> | ||
| 537 | <entry>0</entry> | ||
| 538 | <entry>b<subscript>5</subscript></entry> | ||
| 539 | <entry>b<subscript>4</subscript></entry> | ||
| 540 | <entry>b<subscript>3</subscript></entry> | ||
| 541 | <entry>b<subscript>2</subscript></entry> | ||
| 542 | <entry>b<subscript>1</subscript></entry> | ||
| 543 | <entry>b<subscript>0</subscript></entry> | ||
| 544 | </row> | ||
| 545 | <row id="MEDIA-BUS-FMT-BGR888-1X24"> | ||
| 546 | <entry>MEDIA_BUS_FMT_BGR888_1X24</entry> | ||
| 547 | <entry>0x1013</entry> | ||
| 548 | <entry></entry> | ||
| 549 | &dash-ent-8; | ||
| 550 | <entry>b<subscript>7</subscript></entry> | ||
| 551 | <entry>b<subscript>6</subscript></entry> | ||
| 552 | <entry>b<subscript>5</subscript></entry> | ||
| 553 | <entry>b<subscript>4</subscript></entry> | ||
| 554 | <entry>b<subscript>3</subscript></entry> | ||
| 555 | <entry>b<subscript>2</subscript></entry> | ||
| 556 | <entry>b<subscript>1</subscript></entry> | ||
| 557 | <entry>b<subscript>0</subscript></entry> | ||
| 558 | <entry>g<subscript>7</subscript></entry> | ||
| 559 | <entry>g<subscript>6</subscript></entry> | ||
| 560 | <entry>g<subscript>5</subscript></entry> | ||
| 561 | <entry>g<subscript>4</subscript></entry> | ||
| 562 | <entry>g<subscript>3</subscript></entry> | ||
| 563 | <entry>g<subscript>2</subscript></entry> | ||
| 564 | <entry>g<subscript>1</subscript></entry> | ||
| 565 | <entry>g<subscript>0</subscript></entry> | ||
| 566 | <entry>r<subscript>7</subscript></entry> | ||
| 567 | <entry>r<subscript>6</subscript></entry> | ||
| 568 | <entry>r<subscript>5</subscript></entry> | ||
| 569 | <entry>r<subscript>4</subscript></entry> | ||
| 570 | <entry>r<subscript>3</subscript></entry> | ||
| 571 | <entry>r<subscript>2</subscript></entry> | ||
| 572 | <entry>r<subscript>1</subscript></entry> | ||
| 573 | <entry>r<subscript>0</subscript></entry> | ||
| 574 | </row> | ||
| 575 | <row id="MEDIA-BUS-FMT-GBR888-1X24"> | ||
| 576 | <entry>MEDIA_BUS_FMT_GBR888_1X24</entry> | ||
| 577 | <entry>0x1014</entry> | ||
| 578 | <entry></entry> | ||
| 579 | &dash-ent-8; | ||
| 580 | <entry>g<subscript>7</subscript></entry> | ||
| 581 | <entry>g<subscript>6</subscript></entry> | ||
| 582 | <entry>g<subscript>5</subscript></entry> | ||
| 583 | <entry>g<subscript>4</subscript></entry> | ||
| 584 | <entry>g<subscript>3</subscript></entry> | ||
| 585 | <entry>g<subscript>2</subscript></entry> | ||
| 586 | <entry>g<subscript>1</subscript></entry> | ||
| 587 | <entry>g<subscript>0</subscript></entry> | ||
| 588 | <entry>b<subscript>7</subscript></entry> | ||
| 589 | <entry>b<subscript>6</subscript></entry> | ||
| 590 | <entry>b<subscript>5</subscript></entry> | ||
| 591 | <entry>b<subscript>4</subscript></entry> | ||
| 592 | <entry>b<subscript>3</subscript></entry> | ||
| 593 | <entry>b<subscript>2</subscript></entry> | ||
| 594 | <entry>b<subscript>1</subscript></entry> | ||
| 595 | <entry>b<subscript>0</subscript></entry> | ||
| 596 | <entry>r<subscript>7</subscript></entry> | ||
| 597 | <entry>r<subscript>6</subscript></entry> | ||
| 598 | <entry>r<subscript>5</subscript></entry> | ||
| 599 | <entry>r<subscript>4</subscript></entry> | ||
| 600 | <entry>r<subscript>3</subscript></entry> | ||
| 601 | <entry>r<subscript>2</subscript></entry> | ||
| 602 | <entry>r<subscript>1</subscript></entry> | ||
| 603 | <entry>r<subscript>0</subscript></entry> | ||
| 604 | </row> | ||
| 473 | <row id="MEDIA-BUS-FMT-RGB888-1X24"> | 605 | <row id="MEDIA-BUS-FMT-RGB888-1X24"> |
| 474 | <entry>MEDIA_BUS_FMT_RGB888_1X24</entry> | 606 | <entry>MEDIA_BUS_FMT_RGB888_1X24</entry> |
| 475 | <entry>0x100a</entry> | 607 | <entry>0x100a</entry> |
| @@ -649,6 +781,261 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 649 | </tbody> | 781 | </tbody> |
| 650 | </tgroup> | 782 | </tgroup> |
| 651 | </table> | 783 | </table> |
| 784 | |||
| 785 | <para>On LVDS buses, usually each sample is transferred serialized in | ||
| 786 | seven time slots per pixel clock, on three (18-bit) or four (24-bit) | ||
| 787 | differential data pairs at the same time. The remaining bits are used for | ||
| 788 | control signals as defined by SPWG/PSWG/VESA or JEIDA standards. | ||
| 789 | The 24-bit RGB format serialized in seven time slots on four lanes using | ||
| 790 | JEIDA defined bit mapping will be named | ||
| 791 | <constant>MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA</constant>, for example. | ||
| 792 | </para> | ||
| 793 | |||
| 794 | <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb-lvds"> | ||
| 795 | <title>LVDS RGB formats</title> | ||
| 796 | <tgroup cols="8"> | ||
| 797 | <colspec colname="id" align="left" /> | ||
| 798 | <colspec colname="code" align="center" /> | ||
| 799 | <colspec colname="slot" align="center" /> | ||
| 800 | <colspec colname="lane" /> | ||
| 801 | <colspec colnum="5" colname="l03" align="center" /> | ||
| 802 | <colspec colnum="6" colname="l02" align="center" /> | ||
| 803 | <colspec colnum="7" colname="l01" align="center" /> | ||
| 804 | <colspec colnum="8" colname="l00" align="center" /> | ||
| 805 | <spanspec namest="l03" nameend="l00" spanname="l0" /> | ||
| 806 | <thead> | ||
| 807 | <row> | ||
| 808 | <entry>Identifier</entry> | ||
| 809 | <entry>Code</entry> | ||
| 810 | <entry></entry> | ||
| 811 | <entry></entry> | ||
| 812 | <entry spanname="l0">Data organization</entry> | ||
| 813 | </row> | ||
| 814 | <row> | ||
| 815 | <entry></entry> | ||
| 816 | <entry></entry> | ||
| 817 | <entry>Timeslot</entry> | ||
| 818 | <entry>Lane</entry> | ||
| 819 | <entry>3</entry> | ||
| 820 | <entry>2</entry> | ||
| 821 | <entry>1</entry> | ||
| 822 | <entry>0</entry> | ||
| 823 | </row> | ||
| 824 | </thead> | ||
| 825 | <tbody valign="top"> | ||
| 826 | <row id="MEDIA-BUS-FMT-RGB666-1X7X3-SPWG"> | ||
| 827 | <entry>MEDIA_BUS_FMT_RGB666_1X7X3_SPWG</entry> | ||
| 828 | <entry>0x1010</entry> | ||
| 829 | <entry>0</entry> | ||
| 830 | <entry></entry> | ||
| 831 | <entry>-</entry> | ||
| 832 | <entry>d</entry> | ||
| 833 | <entry>b<subscript>1</subscript></entry> | ||
| 834 | <entry>g<subscript>0</subscript></entry> | ||
| 835 | </row> | ||
| 836 | <row> | ||
| 837 | <entry></entry> | ||
| 838 | <entry></entry> | ||
| 839 | <entry>1</entry> | ||
| 840 | <entry></entry> | ||
| 841 | <entry>-</entry> | ||
| 842 | <entry>d</entry> | ||
| 843 | <entry>b<subscript>0</subscript></entry> | ||
| 844 | <entry>r<subscript>5</subscript></entry> | ||
| 845 | </row> | ||
| 846 | <row> | ||
| 847 | <entry></entry> | ||
| 848 | <entry></entry> | ||
| 849 | <entry>2</entry> | ||
| 850 | <entry></entry> | ||
| 851 | <entry>-</entry> | ||
| 852 | <entry>d</entry> | ||
| 853 | <entry>g<subscript>5</subscript></entry> | ||
| 854 | <entry>r<subscript>4</subscript></entry> | ||
| 855 | </row> | ||
| 856 | <row> | ||
| 857 | <entry></entry> | ||
| 858 | <entry></entry> | ||
| 859 | <entry>3</entry> | ||
| 860 | <entry></entry> | ||
| 861 | <entry>-</entry> | ||
| 862 | <entry>b<subscript>5</subscript></entry> | ||
| 863 | <entry>g<subscript>4</subscript></entry> | ||
| 864 | <entry>r<subscript>3</subscript></entry> | ||
| 865 | </row> | ||
| 866 | <row> | ||
| 867 | <entry></entry> | ||
| 868 | <entry></entry> | ||
| 869 | <entry>4</entry> | ||
| 870 | <entry></entry> | ||
| 871 | <entry>-</entry> | ||
| 872 | <entry>b<subscript>4</subscript></entry> | ||
| 873 | <entry>g<subscript>3</subscript></entry> | ||
| 874 | <entry>r<subscript>2</subscript></entry> | ||
| 875 | </row> | ||
| 876 | <row> | ||
| 877 | <entry></entry> | ||
| 878 | <entry></entry> | ||
| 879 | <entry>5</entry> | ||
| 880 | <entry></entry> | ||
| 881 | <entry>-</entry> | ||
| 882 | <entry>b<subscript>3</subscript></entry> | ||
| 883 | <entry>g<subscript>2</subscript></entry> | ||
| 884 | <entry>r<subscript>1</subscript></entry> | ||
| 885 | </row> | ||
| 886 | <row> | ||
| 887 | <entry></entry> | ||
| 888 | <entry></entry> | ||
| 889 | <entry>6</entry> | ||
| 890 | <entry></entry> | ||
| 891 | <entry>-</entry> | ||
| 892 | <entry>b<subscript>2</subscript></entry> | ||
| 893 | <entry>g<subscript>1</subscript></entry> | ||
| 894 | <entry>r<subscript>0</subscript></entry> | ||
| 895 | </row> | ||
| 896 | <row id="MEDIA-BUS-FMT-RGB888-1X7X4-SPWG"> | ||
| 897 | <entry>MEDIA_BUS_FMT_RGB888_1X7X4_SPWG</entry> | ||
| 898 | <entry>0x1011</entry> | ||
| 899 | <entry>0</entry> | ||
| 900 | <entry></entry> | ||
| 901 | <entry>d</entry> | ||
| 902 | <entry>d</entry> | ||
| 903 | <entry>b<subscript>1</subscript></entry> | ||
| 904 | <entry>g<subscript>0</subscript></entry> | ||
| 905 | </row> | ||
| 906 | <row> | ||
| 907 | <entry></entry> | ||
| 908 | <entry></entry> | ||
| 909 | <entry>1</entry> | ||
| 910 | <entry></entry> | ||
| 911 | <entry>b<subscript>7</subscript></entry> | ||
| 912 | <entry>d</entry> | ||
| 913 | <entry>b<subscript>0</subscript></entry> | ||
| 914 | <entry>r<subscript>5</subscript></entry> | ||
| 915 | </row> | ||
| 916 | <row> | ||
| 917 | <entry></entry> | ||
| 918 | <entry></entry> | ||
| 919 | <entry>2</entry> | ||
| 920 | <entry></entry> | ||
| 921 | <entry>b<subscript>6</subscript></entry> | ||
| 922 | <entry>d</entry> | ||
| 923 | <entry>g<subscript>5</subscript></entry> | ||
| 924 | <entry>r<subscript>4</subscript></entry> | ||
| 925 | </row> | ||
| 926 | <row> | ||
| 927 | <entry></entry> | ||
| 928 | <entry></entry> | ||
| 929 | <entry>3</entry> | ||
| 930 | <entry></entry> | ||
| 931 | <entry>g<subscript>7</subscript></entry> | ||
| 932 | <entry>b<subscript>5</subscript></entry> | ||
| 933 | <entry>g<subscript>4</subscript></entry> | ||
| 934 | <entry>r<subscript>3</subscript></entry> | ||
| 935 | </row> | ||
| 936 | <row> | ||
| 937 | <entry></entry> | ||
| 938 | <entry></entry> | ||
| 939 | <entry>4</entry> | ||
| 940 | <entry></entry> | ||
| 941 | <entry>g<subscript>6</subscript></entry> | ||
| 942 | <entry>b<subscript>4</subscript></entry> | ||
| 943 | <entry>g<subscript>3</subscript></entry> | ||
| 944 | <entry>r<subscript>2</subscript></entry> | ||
| 945 | </row> | ||
| 946 | <row> | ||
| 947 | <entry></entry> | ||
| 948 | <entry></entry> | ||
| 949 | <entry>5</entry> | ||
| 950 | <entry></entry> | ||
| 951 | <entry>r<subscript>7</subscript></entry> | ||
| 952 | <entry>b<subscript>3</subscript></entry> | ||
| 953 | <entry>g<subscript>2</subscript></entry> | ||
| 954 | <entry>r<subscript>1</subscript></entry> | ||
| 955 | </row> | ||
| 956 | <row> | ||
| 957 | <entry></entry> | ||
| 958 | <entry></entry> | ||
| 959 | <entry>6</entry> | ||
| 960 | <entry></entry> | ||
| 961 | <entry>r<subscript>6</subscript></entry> | ||
| 962 | <entry>b<subscript>2</subscript></entry> | ||
| 963 | <entry>g<subscript>1</subscript></entry> | ||
| 964 | <entry>r<subscript>0</subscript></entry> | ||
| 965 | </row> | ||
| 966 | <row id="MEDIA-BUS-FMT-RGB888-1X7X4-JEIDA"> | ||
| 967 | <entry>MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA</entry> | ||
| 968 | <entry>0x1012</entry> | ||
| 969 | <entry>0</entry> | ||
| 970 | <entry></entry> | ||
| 971 | <entry>d</entry> | ||
| 972 | <entry>d</entry> | ||
| 973 | <entry>b<subscript>3</subscript></entry> | ||
| 974 | <entry>g<subscript>2</subscript></entry> | ||
| 975 | </row> | ||
| 976 | <row> | ||
| 977 | <entry></entry> | ||
| 978 | <entry></entry> | ||
| 979 | <entry>1</entry> | ||
| 980 | <entry></entry> | ||
| 981 | <entry>b<subscript>1</subscript></entry> | ||
| 982 | <entry>d</entry> | ||
| 983 | <entry>b<subscript>2</subscript></entry> | ||
| 984 | <entry>r<subscript>7</subscript></entry> | ||
| 985 | </row> | ||
| 986 | <row> | ||
| 987 | <entry></entry> | ||
| 988 | <entry></entry> | ||
| 989 | <entry>2</entry> | ||
| 990 | <entry></entry> | ||
| 991 | <entry>b<subscript>0</subscript></entry> | ||
| 992 | <entry>d</entry> | ||
| 993 | <entry>g<subscript>7</subscript></entry> | ||
| 994 | <entry>r<subscript>6</subscript></entry> | ||
| 995 | </row> | ||
| 996 | <row> | ||
| 997 | <entry></entry> | ||
| 998 | <entry></entry> | ||
| 999 | <entry>3</entry> | ||
| 1000 | <entry></entry> | ||
| 1001 | <entry>g<subscript>1</subscript></entry> | ||
| 1002 | <entry>b<subscript>7</subscript></entry> | ||
| 1003 | <entry>g<subscript>6</subscript></entry> | ||
| 1004 | <entry>r<subscript>5</subscript></entry> | ||
| 1005 | </row> | ||
| 1006 | <row> | ||
| 1007 | <entry></entry> | ||
| 1008 | <entry></entry> | ||
| 1009 | <entry>4</entry> | ||
| 1010 | <entry></entry> | ||
| 1011 | <entry>g<subscript>0</subscript></entry> | ||
| 1012 | <entry>b<subscript>6</subscript></entry> | ||
| 1013 | <entry>g<subscript>5</subscript></entry> | ||
| 1014 | <entry>r<subscript>4</subscript></entry> | ||
| 1015 | </row> | ||
| 1016 | <row> | ||
| 1017 | <entry></entry> | ||
| 1018 | <entry></entry> | ||
| 1019 | <entry>5</entry> | ||
| 1020 | <entry></entry> | ||
| 1021 | <entry>r<subscript>1</subscript></entry> | ||
| 1022 | <entry>b<subscript>5</subscript></entry> | ||
| 1023 | <entry>g<subscript>4</subscript></entry> | ||
| 1024 | <entry>r<subscript>3</subscript></entry> | ||
| 1025 | </row> | ||
| 1026 | <row> | ||
| 1027 | <entry></entry> | ||
| 1028 | <entry></entry> | ||
| 1029 | <entry>6</entry> | ||
| 1030 | <entry></entry> | ||
| 1031 | <entry>r<subscript>0</subscript></entry> | ||
| 1032 | <entry>b<subscript>4</subscript></entry> | ||
| 1033 | <entry>g<subscript>3</subscript></entry> | ||
| 1034 | <entry>r<subscript>2</subscript></entry> | ||
| 1035 | </row> | ||
| 1036 | </tbody> | ||
| 1037 | </tgroup> | ||
| 1038 | </table> | ||
| 652 | </section> | 1039 | </section> |
| 653 | 1040 | ||
| 654 | <section> | 1041 | <section> |
| @@ -3045,6 +3432,43 @@ see <xref linkend="colorspaces" />.</entry> | |||
| 3045 | <entry>y<subscript>1</subscript></entry> | 3432 | <entry>y<subscript>1</subscript></entry> |
| 3046 | <entry>y<subscript>0</subscript></entry> | 3433 | <entry>y<subscript>0</subscript></entry> |
| 3047 | </row> | 3434 | </row> |
| 3435 | <row id="MEDIA-BUS-FMT-YUV8-1X24"> | ||
| 3436 | <entry>MEDIA_BUS_FMT_YUV8_1X24</entry> | ||
| 3437 | <entry>0x2025</entry> | ||
| 3438 | <entry></entry> | ||
| 3439 | <entry>-</entry> | ||
| 3440 | <entry>-</entry> | ||
| 3441 | <entry>-</entry> | ||
| 3442 | <entry>-</entry> | ||
| 3443 | <entry>-</entry> | ||
| 3444 | <entry>-</entry> | ||
| 3445 | <entry>-</entry> | ||
| 3446 | <entry>-</entry> | ||
| 3447 | <entry>y<subscript>7</subscript></entry> | ||
| 3448 | <entry>y<subscript>6</subscript></entry> | ||
| 3449 | <entry>y<subscript>5</subscript></entry> | ||
| 3450 | <entry>y<subscript>4</subscript></entry> | ||
| 3451 | <entry>y<subscript>3</subscript></entry> | ||
| 3452 | <entry>y<subscript>2</subscript></entry> | ||
| 3453 | <entry>y<subscript>1</subscript></entry> | ||
| 3454 | <entry>y<subscript>0</subscript></entry> | ||
| 3455 | <entry>u<subscript>7</subscript></entry> | ||
| 3456 | <entry>u<subscript>6</subscript></entry> | ||
| 3457 | <entry>u<subscript>5</subscript></entry> | ||
| 3458 | <entry>u<subscript>4</subscript></entry> | ||
| 3459 | <entry>u<subscript>3</subscript></entry> | ||
| 3460 | <entry>u<subscript>2</subscript></entry> | ||
| 3461 | <entry>u<subscript>1</subscript></entry> | ||
| 3462 | <entry>u<subscript>0</subscript></entry> | ||
| 3463 | <entry>v<subscript>7</subscript></entry> | ||
| 3464 | <entry>v<subscript>6</subscript></entry> | ||
| 3465 | <entry>v<subscript>5</subscript></entry> | ||
| 3466 | <entry>v<subscript>4</subscript></entry> | ||
| 3467 | <entry>v<subscript>3</subscript></entry> | ||
| 3468 | <entry>v<subscript>2</subscript></entry> | ||
| 3469 | <entry>v<subscript>1</subscript></entry> | ||
| 3470 | <entry>v<subscript>0</subscript></entry> | ||
| 3471 | </row> | ||
| 3048 | <row id="MEDIA-BUS-FMT-UYVY12-1X24"> | 3472 | <row id="MEDIA-BUS-FMT-UYVY12-1X24"> |
| 3049 | <entry>MEDIA_BUS_FMT_UYVY12_1X24</entry> | 3473 | <entry>MEDIA_BUS_FMT_UYVY12_1X24</entry> |
| 3050 | <entry>0x2020</entry> | 3474 | <entry>0x2020</entry> |
